セカンダリDNSをNSDにしてみた
DNS
Published: 2011-11-23

 Bindの脆弱性祭を受けて、「プライマリとセカンダリの両方をBindで運用する事が脆弱性なんじゃね?」と思いつき、セカンダリDNSサーバをNSDで再構築してみました。以下諸々メモ。

 yumにはパッケージが存在しなかったので、公式からダウンロードしてきて、何も考えず./configure ⇒ make installを実施。無事インストール完了。

 /etc/nsdディレクトリ配下にnsd.conf.sampleがあったので、これをnsd.confにコピーして設定ファイルを作成。

 デフォルトではchrootが無効となっていたので、chroot: “/etc/nsd”のコメントアウトを削除してとりあえず起動してみる。⇒エラーが出て起動せず

 「設定ファイル上のファイルパスがchroot環境とは異なっているからかな?」と判断し、nsd.conf上のファイルパスを/etc/nsd/・・・に書き換えて起動してみる⇒「nsdユーザがないよ」エラーが出て起動せず。

 nsdユーザが無いと言われたのでuseraddして再度起動⇒エラーなし。しかし、プロセス上にnsdなし。。。DBを作成してないからかな?ということでrebuildコマンドを試す⇒エラー

「確かにないな」ということで、/var/dbをchrootである/etc/nsd/にまるまる移動。さらに/etc/nsd/var配下の権限をnsdに変更してrebuild⇒いけたっぽい。

 起動時のログを確認すべく/var/log/messagesにみてみるが何も出ていない。nsd.confにログの出力場所を追記する。⇒空のログファイルを作成し、権限をnsdユーザに変更する。⇒無事ログの出力を確認。

 無事出力されるものの、時刻がUNIXTIMEで表示されてしまう。。。unboundのlog-time-asciiオプションを試してみるも、エラーが出て起動しない。残課題なので何とかしたい。

 「よし停止してみるべ」とnsdc stopを試すも、nsdが停止しない。nsdのプロセスは上がっているのに、nsdc stopの結果がnsd is not runningとなる。「なぜだ」とログを見てみると、複数のエラーが

 「確かに作ってないな」ということでpidファイルを作成し、/etc/nsd/var配下の権限をnsdユーザに変更する。⇒nsdc start/stopが出来るようになった。

 プライマリDNSのBindをRestartした所、セカンダリDNSも問題なくゾーンの問い合わせに応答するようになった。bind⇒nsd間のゾーン転送って問題なくできるのか。すごいな。。。。

 DNSの設定チェックで動作確認をしたところ、IPv4は問題なく動くのだがIPv6が応答しない。HEのトンネルを疑うも、外部からのPingとTracerouteは問題なし。「なんでだろー」ととりあえずnsd.confにIPアドレスを明記し、デフォルトでnoなはずのonlyオプションを両方とも明記してみたところ、IPv4/IPv6両方で応答するようになった。デフォルトのワイルドカードだとIPv6が動かないのだろうか。

 現在のnsd.confは下記の通りです。とりあえず動くNSDなセカンダリDNSサーバが出来たので、Bindに超致命的な脆弱性が見つかった場合にはプライマリDNS自体を落とせばいいですね。