nsdでDNSサーバー(プライマリーサーバー編)

(セカンダリーサーバー編)

流行りにのってbindを捨ててみた記録。例によってこの記録は個人的なものであり、本記録を真似・参考にされるなどした際に問題が起きても当方はいかなる責任も負わない。

環境

  • FreeBSD 9.2-STABLE r258412
  • nsd-4.0.0
  • /usr/local/etc/nsd 以下に設定ファイルやゾーンファイルを設置し、/usr/local/etc/nsdにchrootして利用する。(ログだけは/var/log)
  • 各ドメイン(ゾーン)は動的に追加する。(静的にconfigファイル内に記述は行わない)

nsdのインストール

portsを利用する

# portinstall dns/nsd

nsdユーザー / nsdグループ作成

nsdを動作させるユーザーにする。uidとgidは、sendmail(25)に対してFreeBSD portsからpostfixをインストールした際に作成されるユーザー:postfixが125という感じで、bind(53)に対して153を指定した。(既にuid, gidで153を使っている場合は変更すること)

# pw groupadd -g 153 -n nsd
# pw useradd -u 153 -n nsd -g nsd -c "nsd Sandbox" -d / -s /usr/sbin/nologin

nsd-controlを使うための準備

rndcのnsd版の様なもの。鍵の作成などが行われる様だ。

# nsd-control-setup

nsdの設定

/usr/local/etc/nsd/nsd.conf

server:
	username: nsd
	chroot: "/usr/local/etc/nsd"
	zonesdir: "/usr/local/etc/nsd/zones"
	zonelistfile: "/usr/local/etc/nsd/zone.list"
	database: "/usr/local/etc/nsd/nsd.db"
	logfile: "/var/log/nsd.log"
	pidfile: "/usr/local/etc/nsd/nsd.pid"
	xfrdfile: "/usr/local/etc/nsd/xfrd.state"
	xfrdir: "/usr/local/etc/nsd/tmp"
	hide-version: yes

remote-control:
	control-enable: yes
	control-interface: 127.0.0.1
	control-port: 8952
	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"

pattern:
	name: "masterzone"
	zonefile: "%s.zone"
	notify: (セカンダリーDNSサーバーのIPアドレス) NOKEY
	notify-retry: 5
	provide-xfr: (セカンダリーDNSサーバーのIPアドレス) NOKEY

serverセクション:主に全体の設定

username
nsdを動作させるユーザー名。最初に作ったnsdユーザーを利用
chroot
chrootするディレクトリを指定する。chroot指定の場合、pidfile, database で指定した項目はchroot先ディレクトリ配下に設置の事。
zonesdir
zoneファイルの保存場所
zonelistfile
動的に追加されたゾーン情報リスト
database
データベース、どうやらzoneファイル等の内容はDB化されてnsdから利用される模様、chrootする場合はchroot先配下を指定の事
logfile
ログファイル
pidfile
プロセスIDが記録されたファイル、chrootする場合はchroot先配下を指定の事
xfrdfile
ゾーン転送に必要なファイル、らしい
xfrdir
ゾーン転送処理に使われるディレクトリ、らしい
hide-version
バージョン情報の応答を行わない様にする(隠す)場合はyes

remote-controlセクション:nsd-controlによるリモートコントロールの設定

control-enable
リモートコントロールを有効にする場合はyes
control-interface
リモートコントロールを待ち受けるためにnsdが待ち受けるIPアドレスを指定する、ここでは127.0.0.1を指定しているが、デフォルト値も127.0.0.1。
control-port
リモートコントロールを待ち受けるためにnsdが待ち受けるポート番号を指定する、ここでは8952を指定しているが、デフォルト値も8952。
server-key-file
server-cert-file
nsd-control-setupによって生成される、サーバーのプライベート鍵と自己署名証明書のパス
control-key-file
control-cert-file
nsd-control-setupによって生成される、リモートコントロールクライアントのプライベート鍵と自己署名証明書のパス

patternセクション:パターンマッチしたゾーンに一括でオプション設定する

name
パターン名、ここで指定したパターン名に対してダイナミックにドメイン追加や削除ができる
zonefile
ゾーンファイルのパス指定、%sはドメイン名に置き換わる
notify
ゾーン情報の更新を通知するサーバーのIPアドレスを指定する。ここではセカンダリーDNSサーバーのIPアドレスを指定する。セカンダリーサーバーを使わない場合は不要
notify-retry
更新通知のリトライ回数指定
provide-xfr
指定したIPアドレスへのゾーン転送の可否を指定するリスト。ここではセカンダリーDNSサーバーのIPアドレスを指定する

細かい設定は日本Unboundユーザー会が提供しているnsd.conf(5)の日本語マニュアルも参照の事。
nsd.conf(5) | 日本Unboundユーザー会

必要なディレクトリ、ファイルの作成とchown

# cd /usr/local/etc/nsd
# mkdir zones tmp
# chown -R nsd:nsd /usr/local/etc/nsd
# touch /var/log/nsd.log
# chown nsd:nsd /var/log/nsd.log

ゾーンファイルの準備

zonesdirで指定した/usr/local/etc/nsd/zones 以下に「ドメイン名.zone」(例:example.jpの場合 example.jp.zone)を用意する。bindのゾーンファイルがそのまま利用できた。

起動

# vi /etc/rc.conf
---
nsd_enable="YES"
---
# service nsd start

ドメイン追加

# nsd-control addzone (ドメイン名) masterzone

以下ドメイン分繰り返し。

ゾーンファイルを更新した場合

SOAレコード等も更新した上で

# nsd-control reload (ドメイン名)

nsdでDNSサーバー(プライマリーサーバー編)” に1件のフィードバックがあります

  1. ピンバック: nsdでDNSサーバー(セカンダリーサーバー編) | funi2.jp

コメントを残す

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