1. FreeBSD 11.1 RELEASE - DNS サーバ - nsd

 
1.1 ports
1.2 前提条件
1.3 証明書とキーの生成
1.4 正引きファイル作成
1.5 逆引きファイル作成
1.6 nsd.conf 設定
1.7 その他のディレクトリ作成
1.8 /etc/rc.conf 設定

1.1 ports


プロンプト略
cd /usr/ports/dns/nsd
make
make install

1.2 前提条件

 以下の環境で設定を行うものとします。
実際にはもちろん数字ですのでご注意ください
項 目 設定値 備考
ネットワークアドレス xxx.yyy.zzz.0/29 xxx.yyy.zzz は実際にはもちろん数字ですのでご注意ください
ルータアドレス xxx.yyy.zzz.1
サーバアドレス xxx.yyy.zzz.2
その他ホストアドレス xxx.yyy.zzz.3~6
ブロードキャストアドレス xxx.yyy.zzz.7
ドメイン名 hogehoge.ne.jp
サーバ名 ns.hogehoge.ne.jp
プロバイダネームサーバ名 ns.プロバイダ.jp
プロバイダネームサーバアドレス p.r.o.v

1.3 証明書とキーの生成

 nsd-control のために証明書とキーを生成します。

> nsd-control-setup
 以下のファイルが生成されます。

/usr/local/etc/nsd/nsd_control.key    クライアントキー
/usr/local/etc/nsd/nsd_control.pem    クライアント証明書
/usr/local/etc/nsd/nsd_server.key     サーバキー
/usr/local/etc/nsd/nsd_server.pem     サーバ証明書

1.4 正引きファイル作成

 正引き・逆引きのゾーンファイルの形式は bind9 と同じになります。  ゾーンファイル用のディレクトリを生成して (ここでは /var/nsdchroot する設定で記述しています)

プロンプト略
mkdir -pv /var/nsd/zone
 正引きファイルと逆引きファイルを作成します。

正引きファイル	/var/nsd/zone/hogehoge.zone

;

$TTL	3600

@	IN	SOA	ns.hogehoge.ne.jp. root.hogehoge.ne.jp. (
		2018022701	; Serial
		3600		; Refresh
		900			; Retry
		3600000		; Expire
		3600 )		; Minimum
	IN	NS	ns.hogehoge.ne.jp.
	IN	NS	ns.プロバイダ.jp.
	IN	MX	10 ns.hogehoge.ne.jp.

ns		IN	A	xxx.yyy.zzz.2
www		IN	CNAME	ns

rt		IN	A	xxx.yyy.zzz.1
pc01	IN	A	xxx.yyy.zzz.3
pc02	IN	A	xxx.yyy.zzz.4
pc03	IN	A	xxx.yyy.zzz.5
pc04	IN	A	xxx.yyy.zzz.6
 解説

;
 ; 以降はコメントになります。

$TTL	3600
 キャッシュの有効期限を秒単位で指定します。

@	IN	SOA	ns.hogehoge.ne.jp. root.hogehoge.ne.jp. (
		2018022701	; Serial
		3600		; Refresh
		900			; Retry
		3600000		; Expire
		3600 )		; Minimum
 @ IN SOA でドメイン情報を記載するという意味です。  続いて、コンテンツサーバ名、管理者のメールアドレスになります。  Serial シリアル番号、なんでもいいのですが、伝統的に年月日サフィックスという番号をいれます。  記述を更新した場合、この値を更新しておけばリロードした際にゾーンの書き換えを行います。  Refresh ゾーン転送間隔を秒で指定。  Retry 転送の再試行時間を秒で指定。  Expire ゾーン情報を最新と確認できない場合の有効時間を秒で指定する。  Minimum キャッシュの有効期限を秒単位で指定します。最初のものとは違うらしい。

	IN	NS	ns.hogehoge.ne.jp.
	IN	NS	ns.プロバイダ.jp.
 IN NS で自分のネームサーバ名とプロバイダが提供するネームサーバ名を記述します。  名称の後ろに .(ドット)がつくものは、絶対名称を示します。  以降の行で、ns のみ書いてある名称は、. がついていません。これは相対名称で、その絶対名称は、後ろにそのゾーン名がつくことになります。  もともと、このファイルは、hogehoge.ne.jp を定義してあるものですから ns は、ns.hogehoge.ne.jp という絶対名称を持つということになります。

	IN	MX	10 ns.hogehoge.ne.jp.
 IN MXmail server exchanger)と書いてある行は、メールサーバとして、ns.hogehoge.ne.jp を使用することを定義しています。  10 と記述してあるのは、メールサーバの優先順位であり、複数のメールサーバを使用する場合は、10 とか 20 とか複数行書いてその優先順位を分けます。  この例では、メールサーバは1台しか使用しません。その場合は、10 を入れます。

ns		IN	A	xxx.yyy.zzz.2
 IN A の行は、ns の アドレスが xxx.yyy.zzz.2 であると定義しています。  前に述べているように、ns の後ろが略されていて、実際には ns.hogehoge.ne.jp のことを定義しています。

www		IN	CNAME	ns
 IN CNAMEcanonical namemail.hogehoge.ne.jp は、ns.hogehoge.ne.jp の別名ですよという定義を行っています。  別名を定義した場合、CNAME の他の行に別名を出現させてはいけません。  現在は、別名を使うことは極力避けるようになっています。

rt		IN	A	xxx.yyy.zzz.1
pc01	IN	A	xxx.yyy.zzz.3
pc02	IN	A	xxx.yyy.zzz.4
pc03	IN	A	xxx.yyy.zzz.5
pc04	IN	A	xxx.yyy.zzz.6
 その他のホストの定義です。  プロバイダから与えられたアドレスを全部定義しておきましょう。与えられたアドレスの空間は全部定義する義務があります。

1.5 逆引きファイル作成


逆引きファイル	/var/nsd/zone/hogehoge.rev

;

$TTL	3600

@	IN	SOA	ns.hogehoge.ne.jp. root.hogehoge.ne.jp. (
		2018022701	; Serial
		3600		; Refresh
		900			; Retry
		3600000		; Expire
		3600 )		; Minimum
	IN	NS	ns.hogehoge.ne.jp.
	IN	NS	ns.プロバイダ.jp.

1	IN	PTR	rt.hogehoge.ne.jp.
2	IN	PTR	ns.hogehoge.ne.jp.
3	IN	PTR	pc01.hogehoge.ne.jp.
4	IN	PTR	pc02.hogehoge.ne.jp.
5	IN	PTR	pc03.hogehoge.ne.jp.
6	IN	PTR	pc04.hogehoge.ne.jp.
 IN PTRpointer) は、アドレスを名称に変換するための記述です。  アドレスが省略形(相対アドレス)で記述されています。  1、2、3 ・・・というのは、行番号ではありません。正引きファイルのときがそうであったように、このファイルは、xxx.yyy.zzz.0/29 を定義するものですから、2 のアドレスは、xxx.yyy.zzz.2 を意味し、 ns.hogehoge.ne.jp であることを定義しています。  ゾーンファイルのチェックを行うコマンドとして nsd-checkzone というコマンドが用意されていますが、今のところ、文法的な間違いがあってもエラーが出力されないので、コマンドの機能に不備があるのか、使い方が悪いのか、現在調査中です。  すべて編集し終わったら、権限を設定します。

プロンプト略
chown -R nsd:nsd /var/nsd/zone
chmod 600 /var/nsd/zone/*

1.6 nsd.conf 設定

/usr/local/etc/nsd/nsd.conf
 というファイルが作成されていますので、これを編集します。  主なところのみ抜き書きしていますので、検索してください。

server:
        ip-address: xxx.yyy.zzz.2             	←	ポートを待ち受ける IP アドレス
                                               		IP アドレスが1つで
                                               		unbound と共存しないのであれば不要
        chroot: "/var/nsd/"                 	←	/var/nsd に chroot します
        zonesdir: "/var/nsd/zone"           	←	ゾーンファイルを配置するディレクトリ名
        zonelistfile: "/var/db/nsd/zone.list"   ←	ゾーンリストファイル名
        database: "/var/db/nsd/nsd.db"          ←	データベースファイル名
        logfile: "/var/log/nsd.log"             ←	ログファイルの出力先
        pidfile: "/var/run/nsd/nsd.pid"         ←	pid ファイル名
        xfrdfile: "/var/db/nsd/xfrd.state"      ←	まだよくわかりません
        xfrdir: "/tmp"                          ←	まだよくわかりません

remote-control:
        control-enable: yes

        server-key-file: "/usr/local/etc/nsd/nsd_server.key"
        server-cert-file: "/usr/local/etc/nsd/nsd_server.pem"
        control-key-file: "/usr/local/etc/nsd/nsd_control.key"
        control-cert-file: "/usr/local/etc/nsd/nsd_control.pem"

zone:
        name: "hogehoge.ne.jp"					←	定義しているゾーン名
        zonefile: "hogehoge.zone"				←	ゾーンの定義ファイル

        notify: p.r.o.v NOKEY					←	更新が発生した場合、このアドレスに通知する
        notify-retry: 5							←	通知送信時のリトライ回数

        provide-xfr: p.r.o.v NOKEY				←	ゾーンデータをこのアドレスに提供する
        outgoing-interface: xxx.yyy.zzz.2		←	通知の送信にこのアドレスを使用する

zone:
        name: "32/29.zzz.yyy.xxx.in-addr.arpa"
        zonefile: "hogehoge.rev"

        notify: p.r.o.v NOKEY
        notify-retry: 5

        provide-xfr: p.r.o.v NOKEY
        outgoing-interface: xxx.yyy.zzz.2
 nsd の設定紹介サイトではゾーン名やゾーンファイル名をダブルコーテーションで囲んでいない例が多々ありますが、sample ではダブルコーテーションで囲んでいるので、それを使用しています。  なお、ここでは使用していませんが、自分に対してゾーン転送を行うコンテンツサーバが存在して、そのサーバからのゾーン転送を許可するには、以下のような記述が必要になります。

zone:
	name: "ゾーン名"
	zonefile: "ゾーンの定義ファイル(なくていいような気がする)"

	allow-notify: IPアドレス NOKEY	←	自分に対して転送するサーバのアドレスです。
	request-xfr: IPアドレス NOKEY

	allow-axfr-fallback: yes
	outgoing-interface:xxx.yyy.zzz.2	←	待ち受けするアドレス

1.7 その他のディレクトリ作成

 その他のディレクトリを作成します。

プロンプト略
mkdir -pv /var/nsd/var/db
mkdir -pv /var/nsd/var/run/nsd
chown -R nsd:nsd /var/nsd
 /var/nsd/var/db は、データベース用ディレクトリです。  /var/nsd/var/run/nsd は、pid ファイル用ディレクトリです。  ここまで終わったら

> nsd-checkconf /usr/local/etc/nsd/nsd.conf
 でエラーが出力されないことを確認します。

1.8 /etc/rc.conf 設定


/etc/rc.conf
 に下記の行を追加します。

nsd_enable="YES"
 nsd を起動します。

> service nsd start