2009/02/10(火)nsd (Name Service Daemon)
CPI VPSスケールプランの一番安いやつでbindを起動したらメモリが140MB近くまで消費されてしまい悩ましい、という話を書いた。
そもそも自由に使えるDNS Contents Serverが欲しくてVPSを契約しようとしていたので、これは何とか解決しないといけない。
そのときにも書いたけど、bind以外のDNSサーバとしてnsdという選択肢がある。動くかどうか実験してみた。
ネタ元はこのあたり
- NSD 3.xによるネームサーバの構築
- 必要な情報が日本語で提供されている...が、ちゃんと添付のマニュアルも読もう
- DNS サーバパフォーマンス評価 (PDF)
- JPRSの方がENUMの件に関連して各DNSサーバの実装を評価したときの話 (2005年の資料)
個人用途なのでzone数もレコード数もたかがしれてます。
query数も極小であると思われるので、パフォーマンスについては資料を読んで「ふーん、結構良さそうですね」と言う以上は考えないことにします。
今回の実験の条件は以下の通り。(個人向けだよ)
- primary DNSサーバにしてみる
- secondary DNSサーバにしてみる
- 適当なところにchrootする
- /service/nds あたりに入れる
- syslogはsocketとかめんどくさいので直説logを書く
- DNSSECとか考えない。
# ./configure --prefix=/service/nsd/service/nsd/etc/nsd/nsd.conf
# make
# make install
# mkdir -p /service/nsd/etc/nsd/p ← primary zone置き場所
# mkdir -p /service/nsd/etc/nsd/s ← secondary zone置き場所
# mkdir -p /service/nsd/var/db/nsd
# mkdir -p /service/nsd/var/log
# chown -R named /service/nsd ← user作るの面倒なので"named"で動かすつもり
server: chroot: /service/nsd logfile: /service/nsd/var/log/nsd.log username: named ip-address: ???.???.???.??? ← listenするアドレス ip4-only: yes zone: name: example.jp zonefile: p/example.jp.zone zone: name: example.net zonefile: s/example.net.zone allow-notify: 127.0.0.1 NOKEY ← これを書かないと自分でコントロールできないようだ allow-notify: ???.???.???.??? NOKEY request-xfr: ???.???.???.??? NOKEY ← 転送元primaryであるexample.jpのzoneは用意しておこう。(基本的にbindと同じ書式でOK)
準備ができたら、zoneをbuild*1してdaemonを起動させる。
# sudo -u named /service/nsd/sbin/nsdc rebuildなんか動いたっぽい。応答には答える。
# /service/nsd/sbin/nsdc start
secondary側はちょっと変わった挙動をするので一瞬悩む。
詳しい話はこのあたりに頼りましょう。
注意する点は、zoneをbuildしたりする場合は必ずnsdが動作するユーザ権限(ここではnamed)で行うこと。sudoでもsuでもよいけど。
rebuildを実行すると/service/nsd/var/db/nsd/nsd.dbなんかが作られるけど、これはnsdcを起動した権限で作られる。なので、rootのまま作業をするとrootの持ち物になってしまう。*2
ただし、nsdを起動するときはrootで行う必要がある。
同じコマンドだけど実行する内容によって使い方が違うので注意という話ですね。ちょっとわかりにくい。
肝心のメモリ占有率の話ですが、nsdとhttpdが起動した状態でこれぐらい。
privvmpages usage: 32 MB (18% of 175)nsdを止めるとこのぐらいなので
privvmpages usage: 23 MB (13% of 175)十分実用になりそうです。
よかったよかった。