NSD 2.3.0を入れた
DNSを立てる事になった。BINDでもいいのだが、有る程度メンテフリーにもしたいので他の物を捜した。
今回はBINDの替わりにNSDというDNSデーモンを入れた、キャッシュサーバー機能もいらないので。
JPNICのニュースでも取り上げられているので良い物なのだろう。しかしgoogleで検索しても誰も使っていないね。
http://www.nlnetlabs.nl/nsd/
から落としてきてconfigure --prefix=path/to/nsd --with-libwrap=/usr/lib して make all して make install した。
設定をする、path/to/nsdsrc/READMEを読めば分かる、けれどそれだと書くことがないので書く。
まずnsdというユーザーを作る。
path/to/etc/nsd/nsdc.conf.sample を nsdc.confにコピーする
path/to/etc/nsd/nsd.zone.sample を nsd.zoneにコピーする
中を開いて
zone example.co.jp primary/example.co.jp.zone notify 111.111.111.111
とかいう行を適当に作る。
ファイルの中に色々あるので設定をマネる。
path/to/etc/nsd/primary というディレクトリをつくり、
中に example.co.jp.zone とzoneファイルを置く。
ちなみにこのzoneファイル、bindと互換性有ります(RFC1035フォーマットって奴か)。
/etc/hosts.allowに
axfr: ALL : allow
と記述する(後述するが、こうREADMEに書くのはどうなんだ?)
設定終わり
path/to/sbin/nsdc update
を実行し、エラーが無いことを確認する
path/to/sbin/nsdc rebuild
path/to/sbin/nsdc start
とする。
nslookup www.example.co.jp localhost
とかやって引ける事を確認する。
引けなかったらnsdが立ち上がっていないかもしれない。psなどを確認し、動いていない様ならば
/var/logs/messagesを確認する。
nsd[29934]: can't create a socket: Address family not supported by protocol
とか言われた場合には、IPv6でコケているかもしれない(俺はコケていた)
nsd のオプションに-4 (IPv4 Only) があるので、nsdc.confのFlagの行に-4と指定しておく
以上。
後はREADMEのStep13(自動起動)をやっておくと良いだろう。
slave動作の場合、SOAレコードを見ないらしいので14(自動更新)を適切に設定せんといかんらしい。
http://www.himoo.iri.co.jp/~kohi/jus-2004-08/nsd.pdf
まあ、俺はmasterのみの動作なので、不必要だが。
で、実際にはzone transferの制御をおこなわなければならない。
別にやらなくたってイイよって話かもしれないが、普通やるだろう。
ゾーン転送ができるかどうかはこんなコマンドラインで確認する
dig @localhost example.co.jp AXFR
ズラーっと出てきたら転送出来ている、transefer fail等と出ていれば転送ブロックが出来ている。
(勿論AXFR外して普通に引けなかったらそれ以前の問題)
nsdはゾーン転送をtcpwrapで制御する、/etc/hosts.allowで設定するアレだ。
以下のように書いて制御する
hosts.allow
- -
axfr: all : deny
axfr-example.co.jp.: 192.168.0.1 : allow
; ^このドットを忘れない様に
ALL:ALL:deny
上の書き方は正しく動作する。
ここに見落としやすい罠が存在する。
俺はまずは全部をBlockして試そうと、こうだろう、という設定を行った。
(ちなみに、hosts.allowもhosts.denyもRH9のデフォルトでは空だった)
hosts.allow (incorrect)
- -
axfr: all : deny
しかし、これではまったくブロック出来ない。
hosts.allow (incorrect)
- -
axfr: all : deny
axfr-example.co.jp.: 192.168.0.1 : deny
これでも実はブロック出来ない。
ALL: ALL: deny
この行が無いとどうしても貫通してしまうのだ。
普通上でdenyしてあるからこれで良いはずじゃない?と思うんだけど、libwrapはそう言う物である。
(また、上から順に評価される)
hosts.allow (correct)
- -
axfr: ALL : deny
axfr-example.co.jp.: 127.0.0.1 : allow
ALL:ALL:deny
最近すっかり忘れていた(libwrap使うプログラムも減ってきたし)、自戒も込めてメモしておく。
これで本当に以上。
- -
追加
IpAliasなどでIPアドレスを複数持たせている場合には
nsdc.confにflags="-a192.168.0.2"などと利用するIPを指定してあげないと、別のホストからのリクエストに応えられない場合が有る。