DJBDNS

djb 氏の作成した堅牢なDNSサーバーです。シンプルでバグが無いからアップデートも必要ないという思想がハッキリと 現れた作品です。
更新日 2016-02-13

tinydns の概要

DJBDNS の中の一つであり、コンテンツサーバーと言われるメイン機能です。要するにDNS そのものです。BIND と違って、 キャッシュ機能を持ちませんし、自分の管理するゾーン以外には全く対応しません。シンプルそのものです。

インストール

daemontoolsを使いますのでインストールを先にやっておいてください。
cd /package
wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
tar zxvf djbdns-1.05.tar.gz
cd djbdns-1.05

echo gcc -O2 -include /usr/include/errno.h > conf-cc
make
make setup check

設定

cd /package/djbdns-1.05

groupadd tinydns
useradd  -M -g tinydns -s /sbin/nologin tinydns

groupadd dnslog
useradd  -M -g dnslog -s /sbin/nologin dnslog

// 設定用バッチで初期化(ローカルIP)
tinydns-conf tinydns dnslog /etc/tinydns 192.168.23.5

レコードの設定

ファイル /etc/tinydns/root/data にホスト名とIPアドレスの対応レコードを1行づつ書き込みます。make コマンドでバイナリファイル(data.cdb) が生成され、tinydns からランタイムの参照されます。更新時も tinydns の再起動は必要ありません。
vi /etc/tinydns/root/data
 .mydomain.com:192.168.1.2:ns1.mydomain.com
 @mydomain.com:192.168.1.2:mail.mydomain.com
 =www.mydomain.com:192.168.1.2

// バイナリファイルに変換
/etc/tinydns/root/make

ネームサーバーを設定

.ドメイン名:IPアドレス:ネームサーバー名 と記述します。ネームサーバーという事でns1 といったサブドメインを 付けています(もちろんサブドメイン名は任意)。make 後、SOA レコードとNS レコード、A レコードに展開されます。
ここで設定されたドメイン名のみtinydns は応答します。つまり必須です。

メールサーバーを設定

@ドメイン名:IPアドレス:メールサーバー名 と記述します。メールサーバーという事でmail といったサブドメインを 付けています(ここももちろんサブドメイン名は任意)。make 後、MX レコードとA レコードに展開されます。

その他のサーバーを設定

=サブドメイン名:IPアドレス と記述します。サブドメイン名をここで自由に定義できます。make 後、A レコードと PTR レコードに展開されます。同じサブドメイン名に異なるIP を複数適用したい場合は、複数行に分けて書きます。

起動

daemontools にリンクを張って起動させます。
ln -s /etc/tinydns /service/tinydns

// 数秒待って起動時間をチェック
svstat /service/tinydns 
起動時間が1 seconds 以上なら成功です。
// dig のパッケージ
yum -y install bind-utils

// テストする(@ tinydns IP) 
dig @192.168.1.5 ast.qt-space.com

dnscache の概要

DNS のキャッシュサーバーです。tinydns と同じくポート53 UDP で待機し問い合わせに応答しますが、自身ではレコードを保有しません。実にシンプルです。

dnscache 設定と起動

dnscache 本体とログ記録が動作するのグループとユーザを専用に作成。dnscache-conf で動作フォルダ、ユーザー、待ち受け用IP を設定する。 /etc/nameserver を編集してnameserver に待ち受け用IP を指定。svscan にリンクを張って勝手にブートさせる。

インストール

tinydns の概要 をご覧ください。tinydns がインストール済みなら不要です。

設定

// dnschache が動くグループとユーザーを作成
groupadd -g 530 dnscache
groupadd -g 531 dnslog
useradd -u 530 -g dnscache -d /noexsistent -s /sbin/nologin dnscache
useradd -u 531 -g dnslog -d /noexsistent -s /sbin/nologin dnslog

// 設定バッチで初期設定
/package/djbdns-1.05/dnscache-conf dnscache dnslog /etc/dnscache 127.0.0.1

ln -s /etc/dnscache /service/dnscache
nameserver の設定
vi /etc/sysconfig/network-scripts/ifcfg-eth0
 
 // 以下を追加
 DNS1=127.0.0.1
動作の確認
svstat /service/dnscache
起動時間が1 seconds 以上なら正常

dnsip www.yahoo.com
less /etc/dnscache/log/main/current
↓ query とあってwww.yahoo.com とあればOK
@400000003feda365355a5d04 query 1 7f000001:3262:da7d 1 www.yahoo.com

動作確認とトラブル対処

設定を確認してみましょう。

ルーティング

/etc/sysconfig/network でGATEWAY にルーターのアドレス(例えば192.168.1.1) になってないといけません。

dnscache 内の設定

/etc/dnscache/root/ip/127.0.0.1 というファイルが無いといけません。

Windows のDNS キャッシュサービスの弊害

Windows OS にはDNS Client というDNS キャッシュの為のサービスが動いています。Windows からテストする際にこのキャッシュがかえって面倒になるかも しれません。止めておきましょう。
// DNS cache clear
ipconfig /flushdns

// DNS 情報の表示
ipconfig /displaydns

// DNC client の停止(サービス)
net stop dnscache

PR-S300NE でローカルDNS を使えるようにする

NTT 西日本のフレッツ光Next にするとルーター(CTU)がPR-S300NE という品になるのですが、これでLAN 内にDNS サーバーを使う為に設定をします。
PR-S300NE の管理画面を開いて「詳細設定」→「DNS設定」→「LAN側DNSサーバアドレス」のプライマリDNS にローカルにあるDNS サーバーのIP アドレス(IPv4) を設定します。

注意

「※ローカルドメインの問合せテーブル設定を行う場合は、ローカルドメイン設定で可能です。」と書かれていますが、実はこれIPv6 専用です。使えません・・・。
次に「詳細設定」→「静的ルーティング設定」→「静的ルーティングエントリ」に進みます。ここではローカルのDNS サーバーで名前解決を行いたいドメイン名(例えば*.localservers とか)を登録します。 編集をクリックして「静的ルーティング設定 エントリ編集」画面より、
指定方法 → 宛先ドメイン名指定
宛先ドメイン名 → *.localservers
インターフェイス → LAN側
ゲートウェイ → PR-S300NE のローカルIPアドレス
という感じで登録します。登録したエントリにチェックを入れて設定し、保存すると有効になります。