FreeBSD 12.3 RELEASE - DNS サーバ - nsd 設定

 クラウディア
1. 前提条件
2. 証明書とキーの生成
3. 正引きファイル作成
4. 逆引きファイル作成
5. nsd.conf 設定
6. その他のディレクトリ作成
7. /etc/rc.conf 設定

1. 前提条件

 以下の環境で設定を行うものとします。  (使っている、アドレスは、実際はプライベートネットワークなのでご注意!)
 項目   設定値   備考 
ネットワークアドレス 192.168.100.0/24
ルータアドレス 192.168.100.1
サーバアドレス 192.168.100.171
その他ホストアドレス 192.168.100.172~6
ブロードキャストアドレス 192.168.100.0
ドメイン名 vm.sing.ne.jp
サーバ名 ns.vm.sing.ne.jp
プロバイダネームサーバ名 ns.sing.ne.jp
プロバイダネームサーバアドレス p.r.o.v 実際にはもちろん数字ですのでご注意ください

2. 証明書とキーの生成

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

nsd-control-setup
 下記のメッセージが表示されました。

Generating RSA private key, 3072 bit long modulus (2 primes)
................................++++
..................................................................................++++
e is 65537 (0x010001)
Generating RSA private key, 3072 bit long modulus (2 primes)
.......++++
...................................................................................++++
e is 65537 (0x010001)
Signature ok
subject=CN = nsd-control
Getting CA Private Key
removing artifacts
Setup success. Certificates created. Enable in nsd.conf file to use
 初期のころより、メッセージが短くなりました。  以下のファイルが生成されます。

/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	サーバ証明書

3. 正引きファイル作成

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

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

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

;

$TTL	3600

@	IN	SOA	ns.vm.sing.ne.jp. root.vm.sing.ne.jp. (
		2020111701	; Serial
		3600		; Refresh
		900			; Retry
		3600000		; Expire
		3600 )		; Minimum
	IN	NS	ns.vm.sing.ne.jp.
	IN	NS	ns.sing.ne.jp.
	IN	MX	10 ns.vm.sing.ne.jp.

ns		IN	A	192.168.100.171
www		IN	CNAME	ns

rt		IN	A	192.168.100.1
pc01	IN	A	192.168.100.3
pc02	IN	A	192.168.100.4
pc03	IN	A	192.168.100.5
pc04	IN	A	192.168.100.6
 解説

;
 ;(セミコロン)以降はコメントになります。

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

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

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

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

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

www		IN	CNAME	ns
 「IN CNAME(canonical name)mail.vm.sing.ne.jp」は、「ns.vm.sing.ne.jp」の別名ですよという定義を行っています。  別名を定義した場合、「CNAME」の他の行に別名を出現させてはいけません。  現在は、別名を使うことは極力避けるようになっています。

rt		IN	A	192.168.100.1
pc01	IN	A	192.168.100.3
pc02	IN	A	192.168.100.4
pc03	IN	A	192.168.100.5
pc04	IN	A	192.168.100.6
 その他のホストの定義です。  プロバイダから与えられたアドレスを全部定義しておきましょう。与えられたアドレスの空間は全部定義する義務があります。

4. 逆引きファイル作成


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

;

$TTL	3600

@	IN	SOA	ns.vm.sing.ne.jp. root.vm.sing.ne.jp. (
		2020111701	; Serial
		3600		; Refresh
		900			; Retry
		3600000		; Expire
		3600 )		; Minimum
	IN	NS	ns.vm.sing.ne.jp.
	IN	NS	ns.sing.ne.jp.

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

chown -R nsd:nsd /var/nsd/zone
chmod 600 /var/nsd/zone/*

5. nsd.conf 設定

 コンフィグレーションファイルを編集します。

vi /usr/local/etc/nsd/nsd.conf
 主なところのみ抜き書きしていますので、検索してください。

server:
	ip-address: 192.168.100.171            			←	ポートを待ち受ける IP アドレス
                                               			IP アドレスが1つで
                                               			unbound と共存しないのであれば不要
	verbosity: 2									←	ログの出力をいささか冗長にしています
                                               			不要であればコメントアウトします
	chroot: "/var/nsd/"                 			←	/var/nsd に chroot します
	zonesdir: "/var/nsd/zone"           			←	ゾーンファイルを配置するディレクトリ名
	zonelistfile: "/var/nsd/var/db/nsd/zone.list"	←	ゾーンリストファイル名
	database: "/var/nsd/var/db/nsd/nsd.db"			←	データベースファイル名
	logfile: "/var/log/nsd/nsd.log"					←	ログファイルの出力先
	pidfile: "/var/nsd/var/run/nsd/nsd.pid"			←	pid ファイル名
	xfrdfile: "/var/nsd/var/db/nsd/xfrd.state"		←	よくわかりません
	xfrdir: "/var/nsd/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: "vm.sing.ne.jp"							←	定義しているゾーン名
	zonefile: "hogehoge.zone"						←	ゾーンの定義ファイル

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

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

zone:
	name: "32/24.100.168.192.in-addr.arpa"
	zonefile: "hogehoge.rev"

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

	provide-xfr: p.r.o.v NOKEY
	outgoing-interface: 192.168.100.171
 「p.r.o.v」の個所、実際には、転送を許可する「IP」アドレスを入力しますので、ご注意ください。  「nsd」の設定紹介サイトではゾーン名やゾーンファイル名をダブルコーテーションで囲んでいない例が多々ありますが。  「sample」ではダブルコーテーションで囲んでいるので、それを使用しています。  なお、ここでは使用していませんが、自分に対してゾーン転送を行うコンテンツサーバが存在して、そのサーバからのゾーン転送を許可するには、以下のような記述が必要になります。

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

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

	allow-axfr-fallback: yes
	outgoing-interface:192.168.100.2	←	待ち受けするアドレス

6. その他のディレクトリ作成

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

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

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

7. /etc/rc.conf 設定


/etc/rc.conf
 で、「nsd_enable="YES"」を設定します。

service nsd enable
 「nsd」を起動します。

service nsd start
スポンサーリンクハイスピードプラン