LoginSignup
10
2

More than 5 years have passed since last update.

UbuntuServer14.04にNSDを入れてサクッと権威DNSサーバを作る

Last updated at Posted at 2016-12-16

1.NSDとは

QiitaにNSDネタが少なかったので書くことにしました。
コンテンツサーバの機能のみを持ったオープンソースのDNSサーバで、シンプルかつ高速に動作することが特徴のようです。
キャッシュサーバが欲しければ、同じ開発元であるUnboundが吉でしょう。
当然権威DNSサーバなので、フルリゾルバとしては動きません。クライアントからの再帰問い合わせは受け付けてくれないので、digしてレコードを確かめる時は +norec を付けないと怒られます。
NSDとUnbound、BINDとの比較はこのSlideshareを参考にしてみて下さい。
とりあえず example.com が正引きできるところまでを構築してゆきます。

2.構築する環境

サーバはさくらのクラウドを利用しますが、既にサーバを持っている場合にでもOSがUbuntu Server 14.04であれば同じように導入可能と思われます。

サーバ構成
・CPU : 1Core
・Mem : 1GByte
・Storage : 20GB SSD
・OS : Ubuntu Server 14.04 LTS

3.サーバの事前準備

3.1 パッケージのアップデート

さくらのクラウドではサーバを通常作成するとグローバルIPアドレスが割り当てられるので、自身の端末からTeraTermなりでSSHします。
とりあえず

・sudo apt update
・sudo apt upgrade

はやっておきましょう。
後は自分が欲しいパッケージを入れます。(僕はvimが好きなのでvimを入れます。nanoでもいいですよ!)

・sudo apt install vim
・sudo apt install dnsutils ※

※さくらのUbuntu14.04アーカイブではdigが最初から利用できるのですが、入っていない方は dnsutils で入ります。

3.2 NSDのインストール

sudo apt install nsd3 で入ります。

4.NSDの設定

NSDは、ubuntuだと /etc/nsd/nsd.conf が設定ファイルとなるので、ここでサーバの動作やゾーンファイルを指定してあげます。

NSD_Setting
$ sudo vim /etc/nsd/nsd.conf

# NSD configuration file for Debian.
#
# See the nsd.conf(5) man page.
#
# See /usr/share/doc/nsd/examples/nsd.conf for a commented
# reference config file.
#
# The following line includes additional configuration files from the
# /etc/nsd/nsd.conf.d directory.
# WARNING: The glob style doesn't work yet...
# include: "/etc/nsd/nsd.conf.d/*.conf"

デフォルトだとコメント文だけが書かれたファイルですが、最終行から追記してゆきます。

NSD_Setting
$ sudo vim /etc/nsd/nsd.conf

# 上のコメント文は省略
server:

logfile: "/var/log/nsd.log"
zonesdir: "/etc/nsd/zones"

zone:
    name: "example.com"
    zonefile: "example.com.zone"

ログファイルのディレクトリ、ゾーンファイルが格納されているディレクトリを指定します。
DNSサーバで管理したいゾーンは、ゾーンディレクトリ内に hoge.zone 形式でゾーンファイルを作ります。
そのゾーンファイルを読み込ませるために、 nsd.conf にもゾーンの追記が必要です。
nameとzonefileを同じにしておくと管理しやすくてGood

5.ゾーンファイルの設定

4でNSDの基礎設定が完了したので、ゾーンファイルの設定を行います。
そのまえに、nsd.confで設定したゾーンファイル格納用ディレクトリを作ります。

mkdir
$ sudo mkdir /etc/nsd/zones/
open_zonefile
$ sudo vim /etc/nsd/zones/example.com.zone

 

とりあえずガーッと一気にレコードを書きます。

example.com.zone
$TTL    1
$ORIGIN example.com.
@ IN  SOA ns.example.com. root.example.com. (
        2016121601      ; serial number
        10800           ; Refresh
        3600            ; Retry
        604800          ; Expire
        1               ; Min TTL
)
                IN      NS      ns.example.com.
                IN      A       192.0.2.53
www             IN      A       192.0.2.80
ns              IN      A       192.0.2.53

最低限SOA/NS/Aを書きました。(普通はTTL1なんかで使わないので、実環境で利用される場合は十分注意してください)
ゾーンファイルの書き方詳細は以下を参照
http://www.obenri.com/_dnsserver/zone_form.html

6.設定の反映・NSDの起動

NSDはデータベースで動くため、ゾーンを編集するとDBの作り直しが必要になります。.dbファイルは /var/lib/nsd にあります。
DBと言っても、PostgresやMySQLで作るわけではありません。

nsd_rebuild_reload
$ sudo service nsd rebuild
$ sudo service nsd reload

ゾーンファイルを更新したら、毎度rebuildしてDB作り直すこと。
これで動きます。

7.試す

自分自身に www.example.org のAレコードを聞いてみましょう

dns_query
$ dig @localhost www.example.com +norec

すると

dns_answer
; <<>> DiG 9.9.5-3ubuntu0.10-Ubuntu <<>> @localhost www.example.com +norec
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4919
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.example.com.               IN      A

;; ANSWER SECTION:
www.example.com.        1       IN      A       192.0.2.80

;; AUTHORITY SECTION:
example.com.            1       IN      NS      ns.example.com.

;; ADDITIONAL SECTION:
ns.example.com.         1       IN      A       192.0.2.53

;; Query time: 2 msec
;; SERVER: ::1#53(::1)
;; WHEN: Fri Dec 16 20:07:20 JST 2016
;; MSG SIZE  rcvd: 93

おお、ちゃんと設定した192.0.2.80が返ってきた。authority/glueもきちんと動作している。

10
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
2