流行りにのって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: "slavezone" zonefile: "%s.zone" allow-notify: (プライマリーDNSサーバーのIPアドレス) NOKEY request-xfr: (プライマリーDNSサーバーのIPアドレス) NOKEY allow-axfr-fallback: yes
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はドメイン名に置き換わる(セカンダリー運用だと使わない?)
- allow-notify
- 指定されたIPアドレスからの更新通知の許可設定、ここではプライマリーDNSサーバーのIPアドレスを許可する
- request-xfr
- 指定されたIPアドレスにゾーン転送要求する
- allow-axfr-fallback
- yesの場合、ゾーン転送時プライマリーサーバーがIXFR(差分転送)に対応してなければAXFR(全文転送)にフォールバックすることを許可する
細かい設定は日本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
起動
# vi /etc/rc.conf --- nsd_enable="YES" --- # service nsd start
ドメイン追加
# nsd-control addzone (ドメイン名) slavezone
以下ドメイン分繰り返し。