Steadfast Systems

djbdnsのインストール・設定

Last Update: 2003-08-11

※注意※
このページの情報により、障害・損害が発生しても弊社では責任を負いませんのでご了承ください。このページに関するご意見・ご質問などがあれば、 info@steadfast.co.jpまでお願いします。


 このページではDJB(D. J. Bernstein)氏が作成したdjbdnsのプログラムを使用したDNSシステム構築について説明します。DJB氏については以下を参照してください。

http://cr.yp.to/
http://cr.yp.to/djb.html

DJB氏のツール類についての日本語約は以下のページが詳しいです。

http://qmail.jp/

 

Contents

  1. daemontoolsインストール
  2. ucspi-tcpのインストール
  3. djbdnsのインストール
  4. キャッシュサーバ設定
  5. DNSサーバ設定

1.daemontoolsインストール

 まずはdaemontoolsをインストールします。daemontoolsとはDJB氏が作成したツールでサービスの監視などを行います。ここではdjbdnsのサービス監視のために使用します。daemontoolsについての詳細は以下のURLを参照してください。

http://cr.yp.to/daemontools.html
http://tools.qmail.jp/daemontools/

 以下にインストール手順を説明します。

# mkdir -p /package
# chmod 1755 /package
# cd /package
# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
# tar -zxvf daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
# ./package/install

 インストールすると/commandと/serviceディレクトリが作成されます。inittabに以下が追加されます。

SV:123456:respawn:/command/svscanboot

2.ucspi-tcpのインストール

 ucspi-tcpもDJB氏が作成したものです。ucspi-tcpによりポート監視・アクセス制御などが可能です。詳細は以下のURL参照。

http://cr.yp.to/ucspi-tcp.html
http://tools.qmail.jp/ucspi-tcp.html

 以下、インストール手順を記します。

# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
# tar zxvf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
# make
# make setup check

3.djbdnsのインストール

 djbdnsのインストールを行います。djbdnsはDNS(Domain Name System)サービスのためのプログラムです。一般にDNSサービスにはBINDが使用されますが、BINDは頻繁にセキュリティホールが発見され大騒ぎになる場合があります。DJB氏作のプログラムは今までかつてセキュリティホールが見つかったことはないそうなので、安心して運用できるメリットがあります。しかしながら今ままでBINDを使用していた人はdjbdnsに慣れるまでは少し苦労するかもしれません(筆者は苦労しました・・・が、DNSの概念を根本から理解することが出来ました)。djbdnsに関する詳細な情報は以下を参照して下さい。

http://cr.yp.to/djbdns.html
http://djbdns.qmail.jp/djbdns.html

 まず、djbdns用グループとユーザを作成します。ここではuserIDは512〜515、groupIDは512を割り当てていますが、これは環境によって変更する必要があるかもしれません。

# groupadd -g 512 djbdns
# useradd -u 512 -g djbdns -d /dev/null -s /bin/false tinydns
# useradd -u 513 -g djbdns -d /dev/null -s /bin/false dnscache
# useradd -u 514 -g djbdns -d /dev/null -s /bin/false dnslog
# useradd -u 515 -g djbdns -d /dev/null -s /bin/false axfrdns

 以下、インストール手順を記します。

# wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
# tar zxvf djbdns-1.05.tar.gz
# cd djbdns-1.05
# make
# make setup check

4.キャッシュサーバ設定

 キャッシュサーバはインターネット上のホストの名前検索を行います。検索結果をキャッシングしておくことからこの名称がついているのだと思います。本来、ドメインのゾーン情報を提供するサービス(DNSサービス)と、インターネット上のホストの名前検索を行うサービス(キャッシュサービス)はまったく別物です。BINDを使用している人はこれらのサービスを混同しがちです。djbdnsの場合、キャッシュサービスとDNSサービスはまったく別物として扱われます。さらにキャッシュサービスはローカルキャッシュサーバと外部用キャッシュサーバに分けられます。違いは以下のとおり。

ローカルキャッシュサーバ:
ローカルホスト(127.0.0.1)からの問い合わせに答える。
 
外部用キャッシュサーバ  :
外部ホスト(名前解決の手段をもたないクライアントなど)からの問い合わせに答える。

 外部からの問い合わせに答える必要が無い場合は、ローカルキャッシュサーバとして設定しましょう。以下にローカルキャッシュサーバの設定方法を記述します。まず、dnscache-confを実行します。dnscache-confはDNS キャッシュサービスのための環境を設定します。

# /usr/local/bin/dnscache-conf dnscache dnslog /var/dnscache

/var/dnscache/log/runの内容は以下のとおり。

#!/bin/sh
exec /usr/local/bin/setuidgid dnslog /usr/local/bin/multilog t s1000000 n10 /var/log/dnscache

ログの設定・dnscacheの起動を行います。

# mkdir /var/log/dnscache
# chown dnslog:djbdns /var/log/dnscache
# chmod 700 /var/log/dnscache
# ln -s /var/dnscache /service

 正常に起動しているか確認します。

#svstat /service/dnscache
#svstat /service/dnscache/log

 外部からの問い合わせに答える必要がある場合は、外部用キャッシュサーバとして設定しましょう。以下に外部用キャッシュサーバの設定方法を記述します。dnscache-confを実行しますが、最後のIPアドレスはキャッシュサーバのIPアドレスです。環境に合わせて変更してください。

# /usr/local/bin/dnscache-conf dnscache dnslog /var/dnscachex 192.168.0.1

/var/dnscachex/log/runの内容は以下のとおり。

#!/bin/sh
exec /usr/local/bin/setuidgid dnslog /usr/local/bin/multilog t s1000000 n10 /var/log/dnscachex

 ログの設定・dnscachexの起動を行います。

# mkdir /var/log/dnscachex
# chown dnslog:djbdns /var/log/dnscachex
# chmod 700 /var/log/dnscachex
# ln -s /var/dnscachex /service

 起動を確認します。

#svstat /service/dnscachex
#svstat /service/dnscachex/log

 次に/etc/resolve.confの書き換えを行います。

・ローカルキャッシュを使う場合
nameserver 127.0.0.1

・外部用キャッシュを使う場合
nameserver 192.168.0.1

 また、外部用キャッシュサーバの場合、キャッシュサーバの使用を許可するIPアドレスを記述することが出来ます。192.168.0.0/255.255.255.0のアドレス範囲を許可する場合以下のようにします。

# touch /var/dnscachex/root/ip/192.168.0

digコマンドなどで他サイトの名前引きを実行してみます。

ローカルキャッシュサーバとして設定した場合。

# dig www.yahoo.co.jp @127.0.0.1

外部用キャッシュサーバとして設定した場合。

# dig www.yahoo.co.jp @192.168.0.1

 正常に名前引きが出来れば設定完了です。外部用キャッシュサーバとした場合、他のマシン(Wndows等)でこのサーバをDNSサーバとして指定すると名前引きが出来るかと思います。

 その他Tipsを以下に記述します。

・特定ドメインのDNSサーバの明示的指定方法。

# echo 192.168.100.90 > /var/dnscachex/root/servers/steadfast.co.jp

・forwardの設定方法

以下のようにFORWARDを有効にします。

# echo 1 > /service/dnscachex/env/FORWARDONLY

/service/dnscachex/root/servers/@ にある IP アドレス表を外部キャッシュの IP アドレスで置き換えます。@ファイルは@.oldとして保存しておいた方が良いでしょう。解除する場合は、FORWARDONLYを削除し@の内容を元に戻して下さい。

・Cacheサイズ変更
以下の値を変更する。

/var/dnscache/env/CACHESIZE
/var/dnscachex/env/CACHESIZE

設定変更後はキャッシュサーバの再起動を忘れずに行ってください。

ローカルキャッシュサーバとして設定した場合。

# svc -h /service/dnscache

外部用キャッシュサーバとして設定した場合。

# svc -h /service/dnscachex

5.DNSサーバ設定

 4.キャッシュサーバ設定のところでも説明しましたが、djbdnsはキャッシュサーバとDNSサーバはまったく別物として扱われます。ここではDNSサーバの設定について記述します。まず、tinydns-confを用いて環境を構築します。djbdnsはキャッシュサーバとDNSサーバで同じIPアドレスを使用することが出来ませんBIND使いにはちょっとショックかもしれません(はショックでした)。

 キャッシュサーバは192.168.0.1で立ち上げていたので、今度は192.168.0.2でDNSサービスを立ち上げます(サーバにはこの2つのIPが割りあたっているものとします)。

# /usr/local/bin/tinydns-conf tinydns dnslog /var/tinydns 192.168.0.2

/var/tinydns/log/runの内容

#!/bin/sh
exec /usr/local/bin/setuidgid dnslog /usr/local/bin/multilog t s1000000 n10 /var/log/tinydns

 ログの設定・tinydnsの起動を行います。

# mkdir /var/log/tinydns
# chown dnslog:djbdns /var/log/tinydns
# chmod 700 /var/log/tinydns
# ln -s /var/tinydns /service

 起動を確認します。

#svstat /service/tinydns
#svstat /service/tinydns/log

 セカンダリDNSサーバなどにゾーン情報を提供するためのサーバを構築します(セカンダリDNSが無い場合はこの作業は必要ありません)。割り当てるIPアドレスはDNSサーバと同じです。なぜ、今度は同じIPを使用できるのでしょう?それは、DNSサービスがUDPを使用するのに対して、ゾーン転送サービスはTCPを使用するからです。

# /usr/local/bin/axfrdns-conf axfrdns dnslog /var/axfrdns /var/tinydns 192.168.0.2

/var/axfrdns/log/runの内容

#!/bin/sh
exec /usr/local/bin/setuidgid dnslog /usr/local/bin/multilog t s1000000 n10 /var/log/axfrdns

 ログの設定・axfrdnsの起動を行います。

# mkdir /var/log/axfrdns
# chown dnslog:djbdns /var/log/axfrdns
# chmod 700 /var/log/axfrdns
# ln -s /var/axfrdns /service

 起動を確認します。

# svstat /service/axfrdns
# svstat /service/axfrdns/log

 次にゾーン転送先指定方法について以下に記述します。axfrdns は $AXFR 環境変数に書かれたゾーンの転送を認めます。$AXFR に は 斜線で区切られたドメイン名のリストを記述します。$AXFR がなければ、 axfrdnsは すべてのゾーンの転送を許します。ゾーン転送の許可は決められたところだけに制限しましょう。 

/var/axfrdns/tcpの内容

S192.168.100.10:allow,AXFR="steadfast.co.jp"

 内容を変更後はmakeを行いましょう。

# make

 上記はゾーン情報を提供するサービスでしたが、今度はゾーン情報を取得する方法を記述します。

# tcpclient 192.168.100.30 53 axfr-get steadfast.jp steadfast.jp tmpfile

 BINDの場合、SOAレコードによりゾーン情報に関するExpireの制御などを行いますがdjbdnsの場合、このような処理は一切おこなわれません。djbdnsをセカンダリDNSとして動作させる場合はcronなどで定期的にゾーン情報を取得する必要があるでしょう。


このページのトップへ戻る