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 は応答します。つまり必須です。
ここで設定されたドメイン名のみ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アドレス
という感じで登録します。登録したエントリにチェックを入れて設定し、保存すると有効になります。