NTTのひかり電話を使うときに必要なルータ「RT-200NE」はNAPTされたあとのプライベートIPから自分のグローバルIPを参照できないので、外部に公開するDNSサーバと自宅内で使うDNSサーバを別にする必要がある。

今回の構成ではApacheの設定でネームベースのヴァーチャルドメインを使う予定だからこれは必須。
ってことで早速構築。
Fedora Core 6にはBINDがrpmで提供されてるんだけど、なんとなく設定が煩雑になりがちなBINDはあまり好きじゃないし、MTAにqmailを使うつもりなので同じ作者(D.J.Bernstein氏)が作ったdjbdnsを利用することにした。

2006/12/28日現在最新版は1.05だが、一応公式ページを確認しておく事をお勧めする。
アーカイブをダウンロードしたら解凍し、作成されたディレクトリに移動する。

$ wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
$ tar zxf djbdns-1.05.tar.gz ←アーカイブを解凍
$ cd djbdns-1.05 ←ディレクトリの移動
$ wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/djbdns-1.05.errno.patch
$ patch -s -p1 < djbdns-1.05.errno.patch ←パッチを適用
$ sed -i 's/local/djb/g' conf-home ←インストール先を変更
$ make
$ su
パスワード(P): ←パスワードを入力(なにも表示されない)
# make setup check

<

p>djbdnsは3つのプログラムに分かれている。

キャッシュサーバのプログラム、ネームサーバのプログラム、ゾーン転送サーバのプログラムの3つだ。

今回は、キャッシュサーバと、ネームサーバを設定する。

まずは、djbdnsのユーザとグループを作成する。

# groupadd djbdns
# useradd dnscache -g djbdns -s /sbin/nologin
# useradd dnslog -g djbdns -s /sbin/nologin
# rm -rf /home/dnscache /home/dnslog

dnscacheがキャッシュサーバを起動するユーザで、dnslogはログをとるためのユーザだ。

次に初期設定を行う。

192.168.1.1の部分は、キャッシュサーバを動かすサーバのIPアドレスを示している。

# mkdir /var/djbdns ←ディレクトリの作成
# /usr/djb/bin/dnscache-conf dnscache dnslog /var/djbdns/dnscache 192.168.1.1
# touch /var/djbdns/dnscache/root/ip/192.168.1 ←LANの機器からアクセスできるように設定

djbdnsのアーカイブに含まれるrootサーバのIPは古いので書き換える。

# cd /var/djbdns/dnscache/root/servers
# sed -i 's/128.9.0.107/192.228.79.201/g' @
# sed -i 's/198.41.0.10/192.58.128.30/g' @

サービスを起動する。

# ln -s /var/djbdns/dnscache /service

少し待って、動いていることを確認する。

(通常1~2秒で起動する。)

# svstat /service/dnscache
/service/dnscache: up (pid 25954) 4 seconds

ネームサーバを設定する。

最初にサービスを起動するためのユーザ(tinydns)を作成する。

# useradd tinydns -g djbdns -s /sbin/nologin
# rm -rf /home/tinydns

次に初期設定を行う。

tinydnsとdnscacheを同じIPアドレスで動かすことができないため、127.0.0.1を指定する。

# /usr/djb/bin/tinydns-conf tinydns dnslog /var/djbdns/tinydns 127.0.0.1

初期設定が完了したらゾーンファイルを作成する。

tinydnsのゾーンファイルの元は、「/var/djbdns/tinydns/root」に「data」というファイル名で保存されている。

これを編集して「make」するとデータベースファイルが作成される。

ゾーンファイルのフォーマットは以下のとおり。

また、ゾーンファイルを作った後は、dnscacheにて指定したドメインをtinydnsに聞くようにする設定を忘れずに行う。

SOAレコード

.ドメイン:ネームサーバのIPアドレス:ネームサーバ名:TTL

MXレコード

&ドメイン:メールサーバのIPアドレス:メールサーバ名:TTL

Aレコード

=ホスト名:IPアドレス:TTL

CNAMEレコード

+ホスト名:IPアドレス:TTL

# cd /var/djbdns/tinydns/root ←ディレクトリの移動
# vi data ←ゾーンファイルの編集
... ←ゾーンファイルを書き込む
# make ←データベースの作成
# echo 127.0.0.1 > /var/djbdns/dnscache/root/servers/example.com ←作成したゾーンの名前

サービスを起動する。

# ln -s /var/djbdns/tinydns /service

少し待って、動いていることを確認する。

(通常1~2秒で起動する。)

# svstat /service/tinydns
/service/tinydns: up (pid 21358) 6 seconds