FreeBSD 14.0 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.150
その他ホストアドレス 192.168.100.2~6
ブロードキャストアドレス 192.168.100.255
ドメイン名 vm.sing.ne.jp
サーバ名 ns.vm.sing.ne.jp
プロバイダネームサーバ名 ns.sing.ne.jp
プロバイダネームサーバアドレス 122.215.121.34

 ご存知の方は、いらっしゃるかと思いますが、「192.168...」は、もちろんローカルエリアネットワークですので、実際にこのようなアドレッシングを行うことはありませんので、悪しからず。
 以下、すべて、「root」ユーザ権限で。

2. 証明書とキーの生成

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

nsd-control-setup
 前回、それまでと違うメッセージが出力されて、ドキドキしたのですが、今回、またメッセージが変わりました。

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	サーバ証明書
/usr/local/etc/nsd/nsd.conf			コンフィグレーションファイル
/usr/local/etc/nsd/nsd.conf.sample	コンフィグレーションファイル サンプル
 下の2行分は、セットアップ時でなく、インストール時に生成されています。

3. 正引きファイル作成

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

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

vi /var/nsd/zone/vmsingnet.zone

;
$TTL	3600

@	IN	SOA	ns.vm.sing.ne.jp. root.vm.sing.ne.jp. (
		2023052601	; 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.150
www		IN	CNAME	ns

rt		IN	A	192.168.100.1
pc02	IN	A	192.168.100.2
pc03	IN	A	192.168.100.3
pc04	IN	A	192.168.100.4
pc05	IN	A	192.168.100.5
pc06	IN	A	192.168.100.6
 解説

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

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

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

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

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

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

4. 逆引きファイル作成

 次に、逆引きファイルを作成します。

vi /var/nsd/zone/vmsingnet.rev

;

$TTL	3600

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

137	IN	PTR	ns.vm.sing.ne.jp.
1	IN	PTR	rt.vm.sing.ne.jp.
2	IN	PTR	pc02.vm.sing.ne.jp.
3	IN	PTR	pc03.vm.sing.ne.jp.
4	IN	PTR	pc04.vm.sing.ne.jp.
5	IN	PTR	pc05.vm.sing.ne.jp.
6	IN	PTR	pc06.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.150
	verbosity: 2
	chroot: "/var/nsd/"
	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"
	xfrdfile: "/var/nsd/var/db/nsd/xfrd.state"
	xfrdir: "/var/nsd/tmp"
 「server:」の設定は、下記を意味します。
 項目   意味   備考 
ip-address ポートを待ち受ける IP アドレスを記述しています。 IP アドレスが1つで、「unbound」と共存しないのであれば不要
verbosity ログの出力をいささか冗長にしています 不要であればコメントアウトします
chroot /var/nsd に chroot します
zonesdir ゾーンファイルを配置するディレクトリ名
zonelistfile ゾーンリストファイル名
database データベースファイル名
logfile ログファイルの出力先
pidfile pid ファイル名
xfrdfile これとひとつ下は、よくわかりません
xfrdir


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"
 「remote-control:」の個所は、リモートコントロールを行うことと、本ページ2番目の項目で作成した、キーや証明書の定義です。

zone:
	name: "vm.sing.ne.jp"
	zonefile: "vm.sing.zone"

	notify: 122.215.121.34 NOKEY
	notify-retry: 5

	provide-xfr: 122.215.121.34 NOKEY
	outgoing-interface: 192.168.100.150

zone:
	name: "32/0.100.168.192.in-addr.arpa"
	zonefile: "vm.sing.rev"

	notify: 122.215.121.34 NOKEY
	notify-retry: 5

	provide-xfr: 122.215.121.34 NOKEY
	outgoing-interface: 192.168.100.150
 「zone:」の設定は、下記を意味します。
 項目   意味   備考 
name 定義しているゾーン名
zonefile ゾーンの定義ファイル
notify 更新が発生した場合、このアドレスに通知する
notify-retry 通知送信時のリトライ回数
provide-xfr ゾーンデータをこのアドレスに提供する
outgoing-interface 通知の送信にこのアドレスを使用する

 「122.215.121.34」の個所は、本来、実際転送を許可する「IP」アドレスを入力しますので、ご注意ください。

 「nsd」の設定紹介サイトではゾーン名やゾーンファイル名をダブルコーテーションで囲んでいない例が多々ありますが。
 「sample」ではダブルコーテーションで囲んでいるので、それを使用しています。

 なお、ここでは使用していませんが、自分に対してゾーン転送を行うコンテンツサーバが存在して、そのサーバからのゾーン転送を許可するには、以下のような記述が必要になります。


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

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

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

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 設定

 「nsd」の軌道を有効にします。

service nsd enable
 起動します。

service nsd start
ハイスピードプランStar Naming Giftマイニングベース損保との違い