djbdns(tinydns, dnscache) を使う
(2003.11.03新規作成。2004.12.19 加筆。2004.12.31 更新。)
djbdns (tinydns, dnscache) は、小さく、信頼性の高いDNSサーバーです。bindのような複雑怪奇で脆弱なものは使うべきではありません。私は、LAN内の機械のためのDNSキャッシュサーバー、DNSサーバーとして使っています。
- 下準備
- インストール
- dnscacheの設定
- 起動する
- LAN内の機械から使えるようにする
- tinydns の設定 (IPv6)
- 起動する
- LAN内のホスト名解決をさせる
- /etc/hostsファイル
- 外部リンク
@ 下準備
事前にdaemontoolsをインストールします。daemontoolsはパッチを当てないと最近のLinuxではコンパイルできません。ファイルの入手、インストール方法はdaemontools を使う を参照してください。
@ インストール
まずdjbdnsのファイルを入手します; djbdns そのままではコンパイルできないのと、IPv6対応にするために、パッチを入手し、それを当てます;Fefe's patches for IPv6 with djbdns
djbdnsは,インストール先をconf-homeファイルで設定します。<このファイルで設定したディレクトリ> + /bin にインストールされので、/usr/local、あるいは /usr/djb などとします。その後、コンパイル、インストールします。
$ make $ su # make setup
@ dnscacheの設定
まずDNSキャッシュサーバであるdnscacheのほうから設定していきます。
グループdjbdns、ユーザーdnscache、dnslogを作成します。いずれもホームディレクトリは必要ないので削除します。
# groupadd djbdns # useradd dnscache -g djbdns -s /sbin/nologin # useradd dnslog -g djbdns -s /sbin/nologin # rm -rf /home/dnscache /home/dnslog
dnscache-confコマンドを実行します。このコマンドで、/var/djbdns/dnscacheというディレクトリが作成され、設定ファイルがそれ以下に作られます。192.168.0.9は、キャッシュサーバを動かす機械のIPアドレスです。
# /usr/djb/bin/dnscache-conf dnscache dnslog /var/djbdns/dnscache 192.168.0.9
djbdnsの設定の仕方を他のソフトウェアの設定ファイルと対比すると、ディレクトリ名がセクションに、ファイルが項目名に、その内容が値になります。
初期設定では、ルートサーバーのIPアドレスがひとつ誤っている(古い?)ので、root/servers/@ファイルを修正します。198.41.0.10 を192.58.128.30 に修正します。
念のため、テストしておきます。この時点ではまだdnscacheを起動していないので、DNSサーバが何も使えないときは、いったんパスして後で確認します。
# /usr/djb/bin/dnsname `cat \@ ` a.root-servers.net b.root-servers.net c.root-servers.net d.root-servers.net e.root-servers.net f.root-servers.net g.root-servers.net h.root-servers.net i.root-servers.net j.root-servers.net k.root-servers.net l.root-servers.net m.root-servers.net
起動する
daemontoolsで自動的に起動するようにします。runファイルはとりあえず触らなくても大丈夫だと思います。
# ln -s /var/djbdns/dnscache /service
少し待って、動いていることを確認します。
# svstat /service/dnscache /service/dnscache: up (pid 989) 437 seconds
/etc/nsswitch.conf, /etc/resolv.confファイルを必要に応じて書き換えます。/etc/nsswitch.confは、普通はそのままでも大丈夫なはずです。/etc/resolv.confファイルを、192.168.0.9(キャッシュサーバのIPアドレス)でホスト名を引くようにします。
nameserver 192.168.0.9
/etc/host.confも書き換えます。hosts, bindは、それぞれ/etc/hostsファイルで引く、DNSで引くという意味です。
order hosts,bind
LAN内の機械から使えるようにする
私の家では、各機に192.168.0.xというIPアドレスを振っています。root/ipディレクトリにあるファイルがdnscacheにアクセスできる機械を表します。ファイルの内容はなくても構いません。次のようにします。
# touch /var/djbdns/dnscache/root/ip/192.168.0 # ls /var/djbdns/dnscache/root/ip 127.0.0.1 192.168.0
この後、ほかの機械で、DNSサーバのアドレスを変更して、ホスト名が引けるかどうか確認します。
@ tinydnsの設定(IPv6)
(2004.12.31更新)
IPv4だけのときは各機械の/etc/hostsファイルにIPアドレスとホスト名の対応表を書いても大したことはありません。しかし、IPv6だとIPアドレスの桁数が多いので、DNSサーバを使ったほうがいいです。
設定する手順ですが、IPv6パッチを当てたtinydnsでLAN内の機械のホスト名を解決し、その後dnscacheの設定を変更して、LAN内のもののときにtinydnsを見に行くようにします。
私はIPv6のグローバルアドレスを持っていないので、リンクローカルアドレスを使います。
まず、ユーザーtinydnsを作成します。
# useradd tinydns -g djbdns -s /sbin/nologin # rm -rf /home/tinydns
tinydns-confコマンドで環境を作成します。listenするIPアドレスは、dnscacheと同じであってはなりません。そこで、tinydnsのほうは127.0.0.1にして、他の機械からはdnscacheを経由してアクセスします。
# tinydns-conf tinydns dnslog /var/djbdns/tinydns 127.0.0.1
tinydnsが扱うホストとIPアドレスの設定は、root/data ファイルを修正して行います。
1行1エントリで記述します。行頭の文字で、意味が決まります。行頭文字、書き方、意味は次のとおりです。
| 行頭 | 書き方 | 意味 |
|---|---|---|
| . | .ドメイン:ネームサーバのIPアドレス:ネームサーバ名 | ドメインのネームサーバを指定する。 |
| = | =ホスト名:IPアドレス | IPv4ホストのIPアドレスを指定する。 |
| + | +ホスト名:IPアドレス | 別名であるIPv4ホストを指定する。 |
| 6 | 6ホスト名:IPアドレス | IPv6ホストのIPアドレスを指定する。IPv6アドレスは、0を省略せずに書き、:は省く。 |
| 3 | 3ホスト名:IPアドレス | 別名であるIPv6ホストを指定する。 |
例えば、次のようになります。グローバルアドレスは割り振られていないので、リンクローカルアドレス(link-local address; fe80::/64)を使います。xxxx....、yyyy....は、インターフェイスIDで、16進数です。
.fruits:192.168.0.9:a .0.168.192.in-addr.arpa::a .0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa::a .0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.int::a =orange.fruits:192.168.0.9 +d.orange.fruits:192.168.0.9 6orange.fruits:fe80000000000000xxxxxxxxxxxxxxxx 3d.orange.fruits:fe80000000000000xxxxxxxxxxxxxxxx =grape.fruits:192.168.0.3 6grape.fruits:fe80000000000000yyyyyyyyyyyyyyyy
dataファイルを修正したら、makeします。これでdata.cdbが更新されます。
Note.
|
起動する
再び、daemontoolsで自動的に起動するようにします。
# ln -s /var/djbdns/tinydns /service
しばらくして、動いていることを確認します。
# svstat /service/tinydns /service/tinydns/: up (pid 2067) 84619 seconds
LAN内のホスト名解決をさせる
dnscacheの設定を変更します。dnscacheのroot/serversディレクトリに、tinydnsで引くドメイン名、IPアドレスをファイル名とするファイルを作ります。このファイルの内容は、127.0.0.1(tinydnsがlistenしているIPアドレス)とします。
# ls /var/djbdns/dnscache/root/servers 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa 0.168.192.in-addr.arpa fruits 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.int @
ファイルを作ったら、dnscacheを再起動します。
@ /etc/hostsファイル
(2004.12.31 この節追加。)
localhostなどの解決は、/etc/hostsファイルに書いておきます。他の解説ページでは、ip6-localhostなどとしているものもありますが、djbdnsの流儀では、vを入れます。
127.0.0.1 localhost # for IPv6 ::1 ipv6-localhost ipv6-loopback fe00::0 ipv6-localnet ff00::0 ipv6-mcastprefix ff02::1 ipv6-allnodes ff02::2 ipv6-allrouters
Note.
|
@ 外部リンク
IPv6 DNSの仕様は、IETF RFCで定められています。
- 3596 DNS Extensions to Support IP Version 6. S. Thomson, C. Huitema, V. Ksinant, M. Souissi. October 2003. (Format: TXT=14093 bytes) (Obsoletes RFC3152, RFC1886) (Status: DRAFT STANDARD)
正引き(ホスト名→IPv6アドレス)はAAAAレコードを、逆引きはIP6.ARPA(またはIP6.INT)ドメインを使います。
Note.