内向き DNS サーバの構築
ここではローカルネットワーク向けに DNS サーバを提供する、コンテツサーバ、キャッシュ ( リゾルバ ) サーバを構築します。
ネットワーク構成
構成としては下記のように、ルーター配下にサーバが存在する、もっともスタンダードだと思われるネットワーク構成です。
+---------+ +----------+ +---------------+------+---------------+
| | | | | | | |
--- Internet ---+ ONU +---+ Router +--- LAN | | | tinydns |
| | | | | | | | 192.168.0.100 |
+---------+ +----------+ | | | | |
+-----+ 192.168.0.2 + jail +---------------+
| | | | |
| | | | dnscache |
| | | | 192.168.0.101 |
| | | | |
| +---------------+------+---------------+
|
| +---------------+
| | |
+-----+ Client |
| |
+---------------+
名前解決に至るまでの大まかな流れ
名前解決の流れとしては下記のような形になります。
- 全てのクエリはまず dnscache に対して行われる
- キャッシュを保持している場合は名前解決
- キャッシュを保持していない場合で、ゾーン情報を tinydns が保持しているなら tinydns にクエリを渡して名前解決
- キャッシュを保持していない場合で、ゾーン情報を tinydns が保持していないならプロバイダにクエリを渡して名前解決
キャッシュサーバの構築
キャッシュサーバの構築を行います。
dnscache-conf で初期設定を行う
dnscache-conf で、キャッシュサーバの初期設定を行います。
% sudo dnscache-conf dnscache dnslog /usr/local/etc/namedb/dnscache 192.168.0.101
アクセス制御の設定
デフォルトの状態だとローカルマシンだけしかアクセス出来ないので、利用するクライアントを許可する設定にしましょう。
この例では 192.168.0.0/24 からのアクセスを許可する設定になります。
% sudo touch /usr/local/etc/namedb/dnscache/root/ip/192.168.0
自ドメインの名前解決を tinydns に問い合わせ
自ドメインのゾーン情報を tinydns に問い合わせるように設定します。
この設定ですと clx.ath.cx の正引き情報と逆引き情報を tinydns に問い合わせる事になります。
% echo 192.168.0.100 | sudo tee /usr/local/etc/namedb/dnscache/root/servers/example.com
% echo 192.168.0.100 | sudo tee /usr/local/etc/namedb/dnscache/root/servers/0.168.192.in-addr.arpa
自ドメイン以外の名前解決はプロバイダに問い合わせ
自ドメイン以外のゾーン情報はプロバイダの DNS サーバに問い合わせます。
% echo 1 | sudo tee /usr/local/etc/namedb/dnscache/env/FORWARDONLY
% printf "202.224.32.1\n202.224.32.2\n" | sudo tee /usr/local/etc/namedb/dnscache/root/servers/@
シンボリックリンクを作成
シンボリックリンクを作成して dnscache を起動します。
% sudo ln -s /usr/local/etc/namedb/dnscache /var/service/.
起動しているか確認する
ちゃんと起動しているかどうか確認するため svstat を実行します。
% sudo svstat /var/service/dnscache
以下のように up と出力されていれば成功です。
/var/service/dnscache: up (pid 91984) 1 seconds
コンテンツサーバの構築
コンテンツサーバの構築を行います。
tinydns-conf で初期設定を行う
tinydns-conf でコンテンツサーバの初期設定を行います。
% sudo tinydns-conf tinydns dnslog /usr/local/etc/namedb/tinydns 192.168.0.100
自ドメインのゾーン情報の登録
自ドメインのゾーン情報の登録を行う為、下記のようなコマンドを入力します。
なお、初期設定を行った際にシェルスクリプトがいくつか作成されるが、今回はそれを使わないで登録します。
% cd /usr/local/etc/namedb/tinydns/root
% sudo vi data
# SOA + NS + A + PTR
.example.com:192.168.0.101:dns.example.com
.0.168.192.in-addr.arpa::dns.example.com
^101.0.168.192.in-addr.arpa:dns.example.com
# MX + A + PTR
@example.com:192.168.0.200:mail.example.com:10
^200.0.168.192.in-addr.arpa:mail.example.com
# A + PTR
=ns.example.com:192.168.0.100
# A
+ntp.example.com:192.168.0.100
make するとバイナリのデータベースファイルが作成されます。
% sudo make
シンボリックリンクを作成
シンボリックリンクを作成して tinydns を起動します。
% sudo ln -s /usr/local/etc/namedb/tinydns /var/service/.
起動しているか確認する
ちゃんと起動しているかどうか確認するため svstat を実行します。
% sudo svstat /var/service/tinydns
以下のように up と出力されていれば成功です。
/var/service/tinydns: up (pid 91983) 1 seconds
動作確認
dig で動作確認を行います。
% dig @192.168.0.101 example.com
% dig @192.168.0.101 -x 192.168.0.101
% dig @192.168.0.101 www.clx.ath.cx
% dig @192.168.0.101 yahoo.co.jp
% dig @192.168.0.101 google.com
名前解決に djbdns を使用する
ここまで問題無ければ名前解決に djbdns を使用します。
% sudo vi /etc/resolv.conf
domain example.com
nameserver 192.168.0.101