djbdns に付属の dnscache を使う

SERVER

djbdns に付属の tinydns は、自分に登録されていないドメイン名を解決しようとしないことが判明。

その役割を担うのは dnscache というサービスでした。


djbdns 1.05

djbdns とは、qmail の作者、D.J.Bernstein さんが作成したネームサーバです。

http://djbdns.jp.qmail.org/djbdns/ に掲げられていますけど、「安全、確実、高速、簡潔、設定も簡単な DNS ツール群」 が売り文句になっているようです。

 

この djbdns の中に付属している tinydns というサービスプログラムは、要求に対して、自分の知りうる情報のみを忠実に返します。なので BIND を使用していた人が乗り換えたとき、次のような思わぬトラブル (?) に見舞われる可能性があります。

BIND や Microsoft DNS のように、普通に DNS サーバを構築して、それだけをクライアントコンピュータの参照 DNS として登録すれば、どんなドメイン名でも参照可能になると思っていると、そうではないため慌てます(自分のこと)。

 

djbdns のセットを使って、クライアントがドメイン名を解決するのに使うのが、dnscache です。なので、名前解決用のサーバを構築する場合には、この dnscache をインストールしてキャッシュサーバを構築しなくてはなりません。

ここで注意しなくてはならないのが、djbdns では、tinydns と dnscache を同一の IP アドレスでは実行できないということです。ただし異なる IP アドレスでさえあれば、同一のコンピュータ上で稼動することが出来ます。

通常は DNS キャッシュは内部サーバが利用するものだと思いますので豊富な(?)プライベートアドレスから割り当てればいいでしょう。ただ、もしグローバルアドレスから割り当てなくてはならないときは、IP がないと困るかもしれませんね。

自分だけで使用するのならば 127.0.0.1 で大丈夫ですけど。

 

インストールと起動

まずは djbdns のインストールを済ませます。細かいお話は EZ-NET 特集: ネームサーバ djbdns 1.05 のインストール の中の djbdns の項目を見てみてください。tinydns のお話とは無縁なので、そちらのほうは必要に応じてみてみてください。

以下は、djbdns の導入が終わって、svscan が正常に稼動しているものとして話を進めていきます。

 

まずは dnscache が必要とするユーザアカウントの登録です。

groupadd djbdns

useradd -d /dev/null -g djbdns -s /bin/true dnscache
useradd -d /dev/null -g djbdns -s /bin/true dnslog

上記のようにして dnscache と dnslog という2つのアカウントを登録します。

 

そして dnscache の設定を行います。

/usr/local/bin/dnscache-conf dnscache dnslog /etc/dnscache 192.168.0.1

ここでは /etc/dnscache というディレクトリを自動生成してもらっています。このとき、設定に関する情報が自動的にそのディレクトリに保存されます。最後の 192.168.0.1 というのは、dnscache が使用する IP アドレスです。省略した場合は 127.0.0.1 として処理されるようです。

これでインストールは完了です。

 

次のようにして dnscache を起動させます。

ln -s /etc/dnscache /service

こうすることで、Linux 起動のたびに svscan が自動で dnscache を起動してくれるので、rc.local などに何かを追記する必要はありません。なお、dnscache を意図的に再起動したい場合には svc -t /etc/dnscache というコマンドを使用すればいいようです。

 

dnscache の設定

dnscache を動かす上で、設定することは1つだけです。

ディフォルトの状態では、dnscache が受け付けるのは自分自身が稼動しているコンピュータからの要求だけです。なので、ネットワーク内のほかのコンピュータからの要求を処理する場合には、それを dnscache に登録しておかなくてはいけません。

今回は 192.168.0.0/24 からの要求を受け付けるようにしようと思います。その場合はコマンドラインから次のようにして登録します。

touch /etc/dnscache/root/ip/192.168.0

これで登録完了です。

ここまで設定すれば、名前解決用の DNS として利用することが出来るようになっています。なので参照する DNS サーバとして dnscache が稼動している IP アドレス、今回のお話では 192.168.0.1 を指定すれば、いろいろなドメイン名を参照することが出来ます。

 

関連ページ

EZ-NET 特集: DNS サーバ djbdns

djbdns に関するお話を、上記のページにまとめてみました。このページの内容を含め、ほかにもいろいろなことに触れてみました。