nsd4 と nsd3 でマスター、スレーブサーバを設定した備忘録

以下のような環境で設定した備忘録である。なお、IP アドレスは例である。

■環境

・マスター (Debian GNU/Linux Stretch) / nsd4

IPv4 アドレス: 192.0.2.1
IPv6 アドレス: 2001:0DB8::1

・スレーブ (Debian GNU/Linux Wheezy) / nsd3

IPv4 アドレス: 192.0.2.2
IPv6 アドレス: 2001:0DB8::2

■マスターサーバの設定

・ nsd と bind9utils をインストールする

# apt-get instal nsd bind9utils

「bind9utils」は TSIG キーを生成するための dnssec-keygen コマンドを入れたいだけである。
スレーブが nsd3 なのだけれど、アルゴリズムに sha256 を指定したがダメだったため。

・TSIG キーを /etc/nsd/keys 以下に作成する

# mkdir /etc/nsd/keys
# chown root:root /etc/nsd/keys
# chmod 700 /etc/nsd/keys
# cd /etc/nsd/keys
# /usr/sbin/dnssec-keygen -a HMAC-MD5 -b 512 -n HOST example.com

生成された「Kexample.com.+157+*.key」の

example.com. IN KEY 512 3 157 ほにゃらら

の「ほにゃらら」部分を /etc/nsd/keys/example.com.key (root:root 400) で以下のように保存。

algorithm: hmac-md5
secret: "ほにゃらら"

・ゾーンファイルを /etc/nsd/zones 以下に作成する

# mkdir /etc/nsd/zones
# chown root:root /etc/nsd/zones

/etc/nsd/zones/example.com のようなファイル名でゾーンファイルを作成する。ゾーンファイルの内容は BIND などで利用されるものと全く同じ書式で OK 。

・/etc/nsd/nsd.conf を編集する

server:
	# 自サーバの外向けの IP アドレス
	ip-address: 192.0.2.1
	ip-address: 2001:0DB8::1
	
	# IPv4 を使用する
	do-ip4: yes
	
	# IPv6 も使用する
	do-ip6: yes
	
	# 実行時ユーザ名
	username: nsd
	
	# ゾーンファイルがあるディレクトリ
	zonesdir: "/etc/nsd/zones"
	
	# コンパイルされたゾーン情報を保存するファイル
	database: "/var/lib/nsd/nsd.db"
	
	# PID ファイル
	pidfile: "/run/nsd/nsd.pid"
	
	# SOA タイムアウトの情報を保存 (マスターでは必要ないのかも)
	xfrdfile: "/var/lib/nsd/xfrd.state"
	
	# 一時ディレクトリ
	xfrdir: "/tmp"
	
	#「vserion.bind txt ch」と「hostname.bind txt ch」などへの応答を許可
	hide-version: no
	
	#「dig @example.com version.bind txt ch」した時に表示される文字列
	version: "DNS"
	
	#「dig @example.com hostname.bind txt ch」した時に表示される文字列
	identity: "Master"
	
	# 統計情報を 1 時間毎にログに出力
	statistics: 3600
	
	# ゾーン転送後の再読込待ち時間を 10 秒 (マスターでは必要ないのかも)
	xfrd-reload-timeout: 10
	
	# 起動時にゾーンファイルの更新時刻をチェック
	zonefiles-check: yes

remote-control:
	# リモートコントロールを有効
	control-enable: yes
	
	# リモートコントロールは localhost からのみ可能
	control-interface: 127.0.0.1
	control-interface: ::1
	
	# nsd サーバ側の秘密鍵と自己証明書
	server-key-file: "/etc/nsd/nsd_server.key"
	server-cert-file: "/etc/nsd/nsd_server.pem"
	
	# nsd-control 側の秘密鍵と自己署名証明書
	control-key-file: "/etc/nsd/nsd_control.key"
	control-cert-file: "/etc/nsd/nsd_control.pem"

key:
	# TSIG キーの名前と読み込み
	name: "example.com-key"
	include: "/etc/nsd/keys/example.com.key"

zone:
	# ゾーン名
	name: "example.com"
	# ゾーンファイル名
	zonefile: "example.com"
	# 通知送信のリトライ回数
	notify-retry: 5
	# 通知をスレーブサーバ (2001:0DB8::2) に TSIG (example.com-key) で送信 (それ以外は不許可)
	notify: 2001:0DB8::2 example.com-key
	# ゾーン転送をスレーブサーバ (2001:0DB8::2) に TSIG (example.com-key) で許可 (それ以外は不許可)
	provide-xfr: 2001:0DB8::2 example.com-key
	# 通知やゾーン転送の送信元アドレス
	outgoing-interface: 2001:0DB8::1

・ゾーンファイルのチェック

# nsd-checkzone example.com /etc/nsd/zones/example.com

・設定のチェック

# nsd-checkconf /etc/nsd/nsd.conf

・起動

# /etc/init.d/nsd start

■スレーブサーバの設定

・ nsd をインストールする

# apt-get instal nsd

・TSIG キーを /etc/nsd3/keys 以下に作成する

# mkdir /etc/nsd3/keys
# chown nsd:nsd /etc/nsd3/keys
# chmod 700 /etc/nsd3/keys
# cd /etc3/nsd/keys

マスターサーバの /etc/nsd/keys/example.com.key と同じ内容を /etc/nsd3/keys/example.com.key (nsd:nsd 400) で保存。

・ゾーンファイルのディレクトリを作成する

# mkdir /etc/nsd3/zones
# chown nsd:nsd /etc/nsd3/zones

なお、ここにゾーンファイルが保存されることはない模様。
nsd3 の場合は、なぜかスレーブの場合でも zonefile 指定が必要で、ディレクトリがないとエラーとなり起動できなかった。
nsd4 の場合は、スレーブでもゾーンファイルを書き出すことは出来る模様。(未検証)

2017/04/23 訂正
nsd3 においても、ゾーンファイルがアップデートされている状態で、「nsdc patch」を実行することで、「zonefile」で指定されたファイルに、テキストファイルとしてゾーン情報が出力された。

・/etc/nsd3/nsd.conf を編集する

server:
	# 自サーバの外向けの IP アドレス
	ip-address: 192.0.2.2
	ip-address: 2001:0DB8::2
	
	#「version.bind txt ch」への応答を不許可
	hide-version: yes
	
	# IPv4 を使用する
	ip4-only: no
	
	# IPv6 も使用する
	ip6-only: no
	
	# コンパイルされたゾーン情報を保存するファイル
	database: "/var/lib/nsd3/nsd.db"
	
	#「dig @example.com hostname.bind txt ch」した時に表示される文字列
	identity: "Slave"
	
	# PID ファイル
	pidfile: "/var/run/nsd3/nsd.pid"
	
	# 統計情報を 1 時間毎にログに出力
	statistics: 3600
	
	# 実行時ユーザ名
	username: nsd
	
	# ゾーンファイルがあるディレクトリ (nsdc patch で出力されるゾーンファイルのディレクトリ)
	zonesdir: "/etc/nsd3/zones"
	
	# IXFR 通知を受け取ったときの差分を保存するファイル
	difffile: "/var/lib/nsd3/ixfr.db"
	
	# SOA タイムアウトの情報を保存
	xfrdfile: "/var/lib/nsd3/xfrd.state"

key:
	# TSIG キーの名前と読み込み
	name: "example.com-key"
	include: "/etc/nsd/keys/example.com.key"

zone:
	# ゾーン名
	name: "example.com"
	# ゾーンファイル名 (nsdc patch で出力される)
	zonefile: "example.com"
	# 通知をマスターサーバ (2001:0DB8::1) から TSIG (example.com-key) で受け取る (それ以外は不許可)
	allow-notify: 2001:0DB8::1 example.com-key
	# ゾーン転送を AXFR 、マスターサーバ (2001:0DB8::1) から TSIG (example.com-key) で許可 (それ以外は不許可)
	request-xfr: AXFR 22001:0DB8::1 example.com-key
	# 通知の受け取りやゾーン転送の要求元アドレス
	outgoing-interface: 22001:0DB8::2

・設定のチェック

# nsd-checkconf /etc/nsd3/nsd.conf

・起動

# /etc/init.d/nsd3 start

■確認

マスター側で、ゾーンファイルの SOA のシリアル値を 1 上げてみて、「# /etc/init.d/nsd reload」して、スレーブ側のシリアル値が同じになっている確認する。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です