djbdns axfrdns を使ってゾーン転送を使う すでに pkgsrc で djbdns-run ( tinydns, axfrdns, dnscache ) をインストールしていることを前提にする。 ref. * djbdns by DJB - TCP 問合せに答える http://djbdns.qmail.jp/djbdns/tcp.html !! axfrdns/tcp 手順どおり。 ただし pkgsrc してインストールすると /usr/pkg/etc/axfrdns が作られているので、あらかじめ rm しておく。 % sudo axfrdns-conf axfrdns dnslog /usr/pkg/etc/axfrdns /usr/pkg/etc/tinydns 192.168.0.5 axfrdns-conf: fatal: unable to create /usr/pkg/etc/axfrdns: file already exists % sudo rm -rf /usr/pkg/etc/axfrdns % sudo axfrdns-conf axfrdns dnslog /usr/pkg/etc/axfrdns /usr/pkg/etc/tinydns 192.168.0.5 % sudo echo 'xxx.xxx.xxx.xxx:allow' >> /usr/pkg/etc/axfrdns/tcp zsh: permission denied: /usr/pkg/etc/axfrdns/tcp 怒られた。 % ls -l /usr/pkg/etc/axfrdns/tcp -rw-r--r-- 1 root wheel 59 Jan 2 15:50:28 2006 /usr/pkg/etc/axfrdns/tcp root で作業する。 % su # echo '218.44.240.163:allow' >> /usr/pkg/etc/axfrdns/tcp make する。 # cd /usr/pkg/etc/axfrdns/ # make make: no target to make. make: stopped in /usr/pkg/etc/axfrdns あれ。 Makefile はたしかに無い。 /etc/rc.d/axfrdns を実行する。 # /etc/rc.d/axfrdns cdb 起動 # /etc/rc.d/axfrdns start Starting axfrdns. 起動しない。 # grep axfrdns /var/log/messages Aug 3 19:36:58 satomi nbaxfrdns: tcpserver: fatal: unable to figure out port number for /usr/pkg/bin/axfrdns tcp:53 が使われてる? !!コードリーディング ucspi-tcp/tcpserver.c からメッセージを探す。 ここか。 else { se = getservbyname(x,"tcp"); if (!se) strerr_die3x(111,FATAL,"unable to figure out port number for ",x); localport = ntohs(se->s_port); } messages から判断すると x に "/usr/pkg/bin/axfrdns" が入ってる。 x には "domain" とか "53" とかが必要なはずだ。 /etc/rc.d/axfrdns を読んでみる。 axfrdns_precmd() の tcpserver のところ。 変数の値はこう。 /usr/pkg/bin/tcpserver ${name} <= axfrdns ${axfrdns_tcpflags} <= -vDRHl0 -x /usr/pkg/etc/axfrdns/tcp.cdb -- ${tinydns_ip} <= ? ${axfrdns_tcpport} <= "53" /usr/pkg/bin/axfrdns /etc/rc.d/axfrdns のなかで ${tinydns_ip} を echo させてみたら( printf デバッグというやつだ ) 「""」 だった。なにも入っていなかった。 !! tinydns_ip ${tinydns_ip} は /etc/rc.d/tinydns で設定している。これ。 : ${tinydns_ip:="192.168.0.5"} /etc/rc.d/axfrdns では /etc/rc.d/tinydns require してるので ${tinydns_ip} が設定されていそうなのだけど、されてない。 とりあえず /etc/rc.conf に追加した。 tinydns_ip="192.168.0.5" !! 起動 起動。 % sudo /etc/rc.d/axfrdns start % ps auxw | grep axfrdns dnslog 6982 0.0 0.2 60 332 ttyp6 I 12:02PM 0:00.03 logger -t nbaxfrdns -p daemon.info root 17429 0.0 0.1 52 244 ttyp6 I 12:02PM 0:00.02 axfrdns -vDRHl0 -x /usr/pkg/etc/axfrdns/tcp.cdb -- 192.168.0.5 53 あとはセカンダリをおねがいしたホストのひとにゾーン転送されているかを確認してもらう。