djbdnsのセットアップ資料(下記環境で確認)

  • RedHat Linux 9
  • RedHat Professional Workstation(RHEL3)
  • CentOS 4.2〜4.5

RedHat Linux 8では問題なかったが、RedHat Linux 9に移行した時にmakeでエラーが出たのでその作業記録。

参考情報

Steadfast Systems
djbdnsのインストール・設定
http://moin.qmail.jp/DNS
DNS 入門 - DNS (Domain Name System) の基礎知識
http://qmailsolutions.com/djbdns/
djbdns qmail系サイト
http://groups.yahoo.co.jp/group/djb-jp/
djb-jp 「DJB softwares ML」
http://network.station.ez-net.jp/special/djbdns/
EZ-NET 特集: DNS サーバ djbdns
http://quox.org
Tips Collectionにdjbtool関連の情報あり
http://www.fefe.de/djbdns/
fefeのFAQ
http://www.h5.dion.ne.jp/~pc_spot/dns/djbdns/djbdns.html
DNSゾーン転送の設定等。
http://www.nslabs.jp/djbdns.rhtml
IPv6の設定方法の解説。
http://www.marronkun.net/linux/other/
daemontoolsのセットアップ等。

関連書籍

ASIN:4797321741
本ページはdnscache/tinydns/axfrdnsに環境構築ついての解説なので、設定に関する部分についてはこの本を買って読むべし。
ASIN:4774135666
daemontoolsの運用解説。

前準備

※DNSサーバの動作確認用にdjbdnsのツールを導入する場合は、daemontoolsのインストールは不要であるし、
「djbdnsのコンパイル/インストール」まで行えば良い。

  • 「/package」ディレクトリの作成及びアトリビュートの設定
    ※「/root」等の特殊なフォルダ配下やそこからのシンボリックリンクにした場合、daemontoolsがパーミッションでエラーになり正常動作しないので注意!
    # mkdir /package
    # chmod 1755 /package

daemontools

ソフト名称インストール先
daemontools/package/admin/daemontools-0.76

daemontoolsの展開

# cd /package
# tar zxf daemontools-0.76.tar.gz
# cd admin/daemontools-0.76

daemontoolsのglibc2.3対応パッチの適用

# patch -p1 < /package/daemontools-0.76.errno.patch

daemontoolsのインストール

※この手順の場合、daemontoolsは「/package/admin」で動作する事になる。

# package/install

ucspi-tcp

axfrdnsを動作させるのに必要となる。「うくすぱい」と発音するらしい・・・。
ucspi-tcp:UNIX Client-Server Program Interface - Transmission Control Protocol

ソフト名称インストール先
ucspi-tcp/usr/local/bin

ucspi-tcpの展開

# cd /package
# tar zxf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88

ucspi-tcpのglibc2.3対応パッチの適用

# patch -p1 < /package/ucspi-tcp-0.88.errno.patch
# patch -p1 < /package/ucspi-tcp-0.88.a_record.patch
# patch -p1 < /package/ucspi-tcp-0.88.nobase.patch

ucspi-tcpのコンパイル/インストール

バイナリは /usr/local/bin にコピーされる

# make
# make setup check

djbdns

ソフト名称インストール先
djbdns/usr/local/bin

djbdnsの展開

# cd /package
# tar zxf djbdns-1.05.tar.gz
# cd djbdns-1.05

djbdnsのglibc2.3対応パッチの適用

# patch -p1 < /package/djbdns-1.05.errno.patch
# patch -p0 < /package/djbdns-1.05.dempsky-response_len.patch

djbdnsのコンパイル/インストール(/usr/local/binにコピーされる)

# make
# make setup check

セットアップ概略

ソフト名称インストール先実行ユーザ(UID)ログユーザ(UID)動作IPアドレス用途
dnscache/var/dnscachednscache(534)dnslog(531)127.0.0.1ローカルキャッシュサーバ
tinydns/var/tinydnstinydns(532)dnslog(531)XXX.XXX.XXX.XXXネームサーバ
axfrdns/var/axfrdnsaxfrdns(533)dnslog(531)tinydnsと同じゾーン転送
※dnslog/dnscache/tinydns/axfrdns ユーザは djbdns グループに所属させる。

djbdnsのグループ及びログ出力用ユーザの作成

# groupadd -g 530 djbdns
# useradd -u 531 -g djbdns -d /noexsistent -s /sbin/nologin dnslog

dnscacheのセットアップ

tinydnsと同一のIPアドレスでは実行出来ないようになっている。dnscacheは特に入れなくてもDNSとしての機能に支障はない。

  1. dnscacheの実行ユーザ作成
    # useradd -u 534 -g djbdns -d /noexsistent -s /sbin/nologin dnscache
  2. dnscacheのインストール(この場合「/var/dnscache」にインストール)
    # dnscache-conf dnscache dnslog /var/dnscache 127.0.0.1
  3. daemontoolsにdnscacheを登録
    # ln -s /var/dnscache /service/dnscache
  4. 正常起動しているか/エラーメッセージが出ていないかチェックする
    # ps aux | grep -v grep | grep dnscache
  5. ルートサーバのIPアドレス一覧を取得する。(方法1)
    # dnsq ns . l.root-servers.net | grep A | sort > /tmp/root-servers.txt

    取得結果(2007/11/03 時点)

    Lルートネームサーバ(L.root-servers.net)のIPアドレス変更について(2007/11/01〜)

    # cat /tmp/root-servers.txt
    additional: a.root-servers.net 3600000 A 198.41.0.4
    additional: b.root-servers.net 3600000 A 192.228.79.201
    additional: c.root-servers.net 3600000 A 192.33.4.12
    additional: d.root-servers.net 3600000 A 128.8.10.90
    additional: e.root-servers.net 3600000 A 192.203.230.10
    additional: f.root-servers.net 3600000 A 192.5.5.241
    additional: g.root-servers.net 3600000 A 192.112.36.4
    additional: h.root-servers.net 3600000 A 128.63.2.53
    additional: i.root-servers.net 3600000 A 192.36.148.17
    additional: j.root-servers.net 3600000 A 192.58.128.30
    additional: k.root-servers.net 3600000 A 193.0.14.129
    additional: l.root-servers.net 3600000 A 199.7.83.42
    additional: m.root-servers.net 3600000 A 202.12.27.33
  6. ルートサーバのIPアドレス一覧を取得する。(方法2)
    # dnsq ns . l.root-servers.net \
      | awk '/^additional/ {print $NF}' \
      | sort > /tmp/root-servers.txt

    取得結果(2007/11/03 時点)

    # cat /tmp/root-servers.txt
    128.63.2.53
    128.8.10.90
    192.112.36.4
    192.203.230.10
    192.228.79.201
    192.33.4.12
    192.36.148.17
    192.5.5.241
    192.58.128.30
    193.0.14.129
    198.41.0.4
    199.7.83.42
    202.12.27.33
  7. dnscacheのルートサーバ情報を上記で取得したIPアドレスに書き換える
    # vi /service/dnscache/root/servers/@
  8. dnscacheの再起動を行い、ルートサーバ情報を反映する
    # svc -t /service/dnscache
  9. /etc/resolv.confの修正(一番上に「nameserver 127.0.0.1」を追加)
    # vi /etc/resolv.conf
    nameserver 127.0.0.1  ←この行を追加する
    nameserver ・・・
    domain ・・・
  10. ネットワークの再起動を行い、resolv.confの内容を反映する
    # /etc/init.d/network restart
  11. djbdnsのクライアントツールの「dnsip」コマンドで動作確認する
    # dnsip ドメイン名
  12. 動作ログは以下のファイルに出力される。標準では約98,000byte単位でローテーションされる。
    /service/dnscache/log/main/current
  13. dnscacheのキャッシュサイズの調整(djbdns本 P.118)

    dnscacheのキャッシュサイズは以下のファイルで定義される。

    /service/dnscache/env/CASHESIZE (初期値:1000000)
    /service/dnscache/env/DATALIMIT (初期値:3000000)

    一日置きにdnscacheのログのstatsの値を調べて適切な値を設定する。

    # echo 適切な値 > /service/dnscache/env/CASHESIZE
    # echo 適切な値 > /service/dnscache/env/DATALIMIT

    設定を変更したらdnscacheを再起動する。

    # svc -t /service/dnscache

    filednscache_log_convert.sh.tar.bz2 をCronに登録しておくと便利かも知れない。

tinydnsのセットアップ

  1. tinydnsの実行ユーザ作成
    # useradd -u 532 -g djbdns -d /noexsistent -s /sbin/nologin tinydns
  2. tinydnsのインストール(この場合「/var/tinydns」にインストール)
    # tinydns-conf tinydns dnslog /var/tinydns XXX.XXX.XXX.XXX
  3. daemontoolsにtinydnsを登録
    # ln -s /var/tinydns /service/tinydns
  4. 正常起動しているか/エラーメッセージが出ていないかチェックする
    # ps aux | grep -v grep | grep tinydns
  5. tinydnsの設定ファイルの編集
    # vi /service/tinydns/root/data
  6. 編集したtinydnsの設定ファイルの反映
    # cd /service/tinydns/root
    # make
  7. djbdnsのクライアントツールの「dnsq」コマンドでDNSサーバを指定して動作確認
    ※「nslookup」コマンドで確認してはいけない
    FQDN:www.example.com
    レコード:A
    DNS鯖:ns.example.com
    # dnsq a www.example.com ns.example.com
  8. 動作ログ以下のファイルに出力される。標準では約98,000byte単位でローテーションされる。
    /service/tinydns/log/main/current
  9. DNSサーバの連絡先E-Mailアドレスの作成

    SOAレコードで別途指定を行わない限り、hostmaster@ドメイン名 となるので、MTA側で hostmaster 宛のメールが受け取れるようにしておく。

axfrdnsのセットアップ

  1. tinydnsの実行ユーザ作成
    # useradd -u 533 -g djbdns -d /noexsistent -s /sbin/nologin axfrdns
  2. axfrdnsのインストール(この場合「/var/tinydns」にインストール)
    # axfrdns-conf axfrdns dnslog /var/axfrdns /var/tinydns/root XXX.XXX.XXX.XXX
  3. daemontoolsにaxfrdnsを登録
    # ln -s /var/axfrdns /service/axfrdns
  4. 正常起動しているか/エラーメッセージが出ていないかチェックする
    # ps aux | grep -v grep | grep axfrdns
  5. axfrdnsの設定ファイルの編集
    # vi /service/axfrdns/tcp
  6. 編集したaxfrdnsの設定ファイルの反映
    # cd /service/axfrdns
    # make

daemontools管理下のサービス制御

状態確認(個々のサービス及びログ状態の確認)
※起動時間(秒)に注意する。「0 seconds」や「1 seconds」となる場合は、異常終了→daemontoolsが再度起動させる を繰り返している状態である。

# svstat /service/* /service/*/log

特定サービスの停止

# svc -d /service/サービス名称

特定サービスの起動

# svc -u /service/サービス名称

サービスを止めた場合にゾンビプロセスが残る場合があるので、プロセスの状態をチェックする。

# ps aux | grep -v grep | grep サービス名称
root  31346  0.0  0.0  1368  280 ?     S   18:20  0:00 supervise サービス名称

「31346」がサービス名称のpid。ゾンビプロセスを殺す。

# kill -9 31346

Tips

目的別コマンド一覧
いちいちdjbdns本(P.86〜)を開くのも面倒なので使用頻度の高いものをまとめてみる。
コマンド名称用途書式
dnstrace引数で指定したDNSサーバを基点に再帰的に
レコードタイプを取得
dnstrace RECORD FQDN IP/HOSTNAME
dnsqr再帰的にレコードタイプを取得dnsqr RECORD FQDN
dnsqDNSサーバを指定して各種レコードタイプを取得
tinydnsの動作確認では一番使用するコマンド
dnsq RECORD FQDN IP/HOSTNAME
dnsname逆引き(IP => HostName)の確認コマンドdnsname IP
dnsip正引き(HostName => IP)の確認コマンドdnsip FQDN
tai64n形式の日時で出力されるログファイルを見易くする
multlogで出力されるログファイルはtai64n形式であり直感的ではないので、ISO形式に変換するには tai64nlocal コマンドを利用する。
以下の例は、tinydnsの最新ログをISO形式に変換し別ファイル(/tmp/current_iso.txt)に保存する。
# /usr/local/bin/tai64nlocal \
  < /service/tinydns/log/main/current \
  > /tmp/current_iso.txt
また、link集/サーバ管理#DNS にはログ整形ツールへのリンク有り。

/etc/resolv.conf の編集

dnscache の導入による /etc/resolv.conf の設定
基本的に /etc/resolv.conf の nameserver項 で指定するのは、dnscache のようなrecursiveサービスを提供するDNSサーバのIPアドレスである。
/etc/resolv.conf に dnscache が動作しているIPアドレスの記述を一番上に追加する。
# vi /etc/resolv.conf
(追加)nameserver 127.0.0.1
tinydns の導入による /etc/resolv.conf の設定
特に必要ないと思われるが、domain項 で自分の属するドメイン名を追加する。間違ってもtinydnsが動作しているIPアドレスを nameserver項 で追加してはならない。
# vi /etc/resolv.conf
(追加)domain example.com

TroubleShoot

djbtool動作させているPCのIPアドレスを変更した場合の注意
tinydns/axfrdnsを導入した際に、tinydns-conf/axfrdns-confの引数にIPアドレスを指定している筈だが、ここで指定したIPアドレスは、
/service/tinydns/env/IP
/service/axfrdns/env/IP
に記録されており、このファイルに記録されているIPアドレスも変更する必要があるので注意。
うまく動作せず原因が分からない場合
各アプリケーションの run スクリプトを直叩きする。起動時のエラー内容がログファイルではなく、標準出力に出力される。
パーミッションの絡みでログ出力が出来ていない場合等には有用な方法。
# /service/dnscache/run
# /service/tinydns/run
# /service/axfrdns/run
AMD64(x64/x86_64)環境でコンパイル
GCC 3.4 でビルドは出来たが出来上がったバイナリは、どうもぁゃιぃ。
幸いi386版のバイナリも実行出来るので、とりあえずi386環境でi386版としてビルドしたバイナリをインストールして使用する・・・。
daemontools/djbdns/ucspi-tcpのsrcフォルダには「conf-cc」「conf-ld」というファイルがあり、コンパイラのオプションをここで変更出来るのでビルドを実行する前に「-m32」という32bit版ビルドオプションを追加する。
  1. gccのオプション確認
    # gcc -v --help 2>&1 | grep m32
    -m32                      Generate 32bit i386 code
  2. daemontools
    conf-cc
    # vi /package/admin/daemontools-0.76/src/conf-cc
    (修正前)
    gcc -O2 -Wimplicit -Wunused ・・・
    (修正後)
    gcc -m32 -include /usr/local/errono.h -O2 -Wimplicit -Wunused ・・・

    conf-ld
    # vi /package/admin/daemontools-0.76/src/conf-ld
    (修正前)
    gcc -s
    (修正後)
    gcc -s -m32
  3. ucspi-tcp
    conf-cc
    # vi /package/ucspi-tcp-0.88/conf-cc
    (修正前)
    gcc
    (修正後)
    gcc -m32

    conf-ld
    # vi /package/ucspi-tcp-0.88/conf-ld
    (修正前)
    gcc -s
    (修正後)
    gcc -s -m32
  4. djbdns
    conf-cc
    # vi /package/djbdns-1.05/conf-cc
    (修正前)
    gcc -O2 -Wimplicit -Wunused ・・・
    (修正後)
    gcc -m32 -O2 -Wimplicit -Wunused ・・・

    conf-ld
    # vi /package/djbdns-1.05/conf-ld
    (修正前)
    gcc -s
    (修正後)
    gcc -s -m32


ページ先頭へ   最終更新のRDF 最終更新のRSS
Last-modified: 2010-09-21 (火) 06:32:58 (3106d)
Valid XHTML 1.1 Valid CSS! [Valid RSS]