c/fe

http://d.hatena.ne.jp/uzulla から移行しました。

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を指定してあげないと、別のホストからのリクエストに応えられない場合が有る。