流行りにのって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サーバー(セカンダリーサーバー編) | funi2.jp