こんにちは。サイオステクノロジー OSS サポート担当 山本 です。
今回は DNS サーバのお話です。CentOS 同梱版などとして広く使用されているであろう BIND から、
NSD という OSS に乗り換えてみよう、という場合に必要な最低限の確認項目、設定項目を確認してみたいと思います。
■NSD とは?
NSD は NLnet Labs によって開発されている、DNS サーバの一種です。
zone ファイル (IP アドレスとドメイン名の対応表) を自身が持つ「権威サーバ (コンテンツサーバ)」の機能のみを持った DNS サーバを提供するツールで、
権威サーバへの問い合わせを代行するキャッシュサーバの機能は有していません。
(同機関は DNS キャッシュサーバの機能のみを持つ “Unbound” というツールも別途開発しています。)
同種のツールとしては CentOS の同梱版などで広く使用されている、BIND が有名です。
今回は CentOS で BIND の権威 DNS サーバの zone ファイルを使って、 NSD で権威 DNS サーバを動作させる場合に行う最低限の設定を確認していきます。
NSD は CentOS の標準パッケージには含まれていないので、yum からインストールする場合には epel のパッケージを使用する必要があります。
# yum -y install epel-release # yum -y --enablerepo=epel install nsd
■BIND の権威サーバを NSD に移行してみる
それでは早速、BIND で動作している DNS サーバを NSD に移行してみましょう。
…と、その前に。
今回の移行元となる BIND は、権威 DNS サーバとしてもキャッシュ DNS サーバとしても動作させることのできるツールです。
NSD は先述のとおり権威 DNS サーバの機能しか持っていないので、BIND が権威 DNS サーバとして動作していなければ NSD への移行はできません。
なので、まず BIND の設定ファイル /etc/named.conf の以下の設定を見て、BIND が権威サーバ/キャッシュサーバのどちらで動作しているのかを確認しましょう。
/etc/named.conf 例
options { : recursion no;
この “options” 内の設定項目 “recursion” が “no” である場合のみ、BIND は権威 DNS サーバとして動作しています。
“recursion yes;” だったり、”recursion” が設定されていない場合は BIND はキャッシュ DNS サーバとして動作しているため、NSD に移行することはできません。代わりに先述の Unbound などが移行先の候補になります。
上記が確認できたら、あとは zone の設定を移行します。
BIND の設定ファイル /etc/named.conf の zone ステートメントの設定を元に、
NSD の設定ファイル /etc/nsd/nsd.conf の末尾に zone 属性の設定を追加しましょう。
/etc/named.conf 例
zone "example.com" { type master; file "/etc/example.com.zone"; };
↓↓↓
/etc/nsd/nsd.conf 例
zone: name: "example.com" zonefile: "/etc/example.com.zone"
また、必要に応じて /etc/named.conf の “file” に設定されているディレクトリに存在する zone ファイルを、/etc/nsd/nsd.conf で zonefile に設定したディレクトリに移動させます。
なお、zone ファイルの書き方は BIND、NSD ともに RFC に準拠しているため、移行に際して zone ファイルの内容を変更する必要は基本的にはありません。
移行に必要な最低限の設定は以上です。
以下のコマンドで NSD を起動し、dig コマンド等で BIND を動作させていた場合と同じ結果が得られるか確認できれば一先ず移行は成功です。
# systemctl start nsd
■最後に
今回は BIND から移行する場合の NSD の導入についてお話ししました。
今回扱っている設定は移行したい場合に最低限必要な箇所のみで、NSD にも BIND にも他に多数の設定項目が存在していますので、
実際に移行を行う際には設定ファイル、マニュアル等を確認の上、動作検証なども交えて移行を行うようにしてください。
なお余談ですが、NSD はデフォルト設定ではログが出力されないようになっています。
移行や導入の確認時にはログが出ていたほうが何かと便利なことが多いと思いますので、念のため以下の設定は確認しておくこともオススメします。
server: : verbosity: 0 # ログレベル。0~3 で高いほど詳細な出力になる : logfile: "/var/log/nsd.log" # 出力先ディレクトリ