djbdns を導入してみた

October 13th, 2008 by naoya | Filed under day.

前々から気になっていた djbdns を家のネットワークに導入してみた。

環境は、FreeBSD 7.0-RELEASE。すでに、FreeBSD 付属の bind を使っていたが差し替えてみた。

インストールは、次のコマンドで一発で OK。

$ sudo portinstall dbjdns

設定方法は、おもに Cocelo Style の記事を参考にした。daemontools を ports の依存関係でインストールしてくれるので別途インストールする必要はない。

djbdns に必要なユーザは、なぜか自動的に作ってくれないので手動で作成する必要がある。自動的にユーザを作らない理由は、設定するときにユーザを自分で指定する必要があるためだと思うけれども。


% sudo pw groupadd -n dns
% sudo pw useradd -n dnscache -c "djbdns dnscache" -d /nonexistent -g dns -h - -s /sbin/nologin
% sudo pw useradd -n tinydns -c "djbdns tinydns" -d /nonexistent -g dns -h - -s /sbin/nologin
% sudo pw useradd -n dnslog -c "djbdns dnslog" -d /nonexistent -g dns -h - -s /sbin/nologin

こんな感じでユーザを作る。

djbdns を起動するために、/etc/rc.conf に次の行を追加する。

svscan_enable="YES"
svscan_servicedir="/home/hoge/namedb"

svscan_servicedir に djbdns の設定ファイルやログファイルなどが入るので自分で指定した。指定しないときは、/var/service が使われるが自動的には作成しないので注意。svscan_servicedir は起動しない。

まず、起動する。

$ sudo /usr/local/etc/rc.d/svscan.sh start

.sh になっているとはめずらしい。

無事起動できたら、さっそく設定する。djbdns は、複数のプログラムから構成されている。詳しくは、wikipedia に書かれている。

今回設定したのは、dnscache (キャッシュサーバ)と tinydns (コンテンツサーバ)の二つ。dnscache は外からアクセスできる IP アドレス(192.168.1.1)、tinydns はサーバ内部からアクセス IP アドレス (127.0.0.1) を指定した。同じ IP アドレスを割り当てることはできないので注意。

まずは、dnscache の設定をする。具体的には example.com というドメインを内部ネットワークからの設定をする。

$ sudo dnscache-conf dnscache dnslog /home/hoge/namedb/dnscache 192.168.1.1
$ sudo touch /home/hoge/namedb/dnscache/root/ip/192.168.1
$ echo 127.0.0.1 | sudo tee /home/hoge/namedb/dnscache/root/servers/example.com
$ echo 127.0.0.1 | sudo tee /home/hoge/namedb/dnscache/root/servers/1.168.192.in-addr.arpa
$ echo 127.0.0.1 | sudo tee /home/hoge/namedb/dnscache/root/servers/1.0.0.127.in-addr.arpa

tee というコマンドを初めてしったが、man してみるとファイルに書き込みつつ、標準出力に表示するコマンドらしい。


% echo 1 | sudo tee /home/hoge/namedb/dnscache/env/FORWARDONLY
% printf "X.X.X.X\n" | sudo tee /home/hoge/namedb/dnscache/root/servers/@

二行目の X.X.X.X は上位のプロバイダから提供されている DNS を指定する。もちろん、プライマリ、セカンダリの二つを指定する。

再起動する必要はないので、起動しているか確認する。

$ sudo svstat /home/hoge/namedb/dnscache
dnscache: up (pid X) Y seconds

Y は起動経過時間っぽい。あわせて、ログも確認しておくといい。僕の環境の場合、なぜか bind がちゃんと停止していないくて Port に binding できないというエラーが出ていた。

$ sudo tail /home/hoge/namedb/dnscache/log/mail/current

次にコンテンツサーバの設定をする。

$ sudo tinydns-conf tinydns dnslog /home/hoge/namedb/tinydns 127.0.0.1
$ cd /home/hoge/namedb/tinydns/root
$ sudo vi data

data というファイルに具体的な DNS の設定をする。設定をしたら、sudo make で反映させる。

あとは、dig コマンドで動作確認するだけで OK。

ここですこしはまったが、DNS のリゾルバ /etc/resolv.conf に 127.0.0.1 と指定すると動作しないで注意。僕の場合、次のように resolv.conf を書いていて、なぜか外の DNS の解決に 5 秒くらいかかってはまった。これは、127.0.0.1 に接続できずに次の行の DNS に切り替わったため。

domain example.com
nameserver 127.0.0.1
nameserver < 上位の DNS プライマリ>
nameserver < 上位の DNS セカンダリ>

これを次のようにちゃんと設定する。

domain example.com
nameserver 192.168.0.1

Leave a Reply

Get Adobe Flash playerPlugin by wpburn.com wordpress themes