BIND9の設定

投稿者: | 2010年8月11日
Pocket

対象サーバについて

製品名 OpenBlockS 600
OS(kernel ver) Debian lenny(2.6.29)
CPU 600MHz(AMCC PowerPC 405EX)
メモリ 1GB(DDR2 SDRAM)
ストレージ 8GB(Compact Flash)

RNDCの設定

Bind9のインストール

# aptitude install bind9

/etc/bind/rndc.confの作成

www:~# cd /etc/bind
www:/etc/bind# ls
db.0    db.255    db.local  named.conf        named.conf.options  zones.rfc1918
db.127  db.empty  db.root   named.conf.local  rndc.key

→bind9の設定ファイルは/etc/bindにあります。

www:/etc/bind# rndc-confgen -b 512

OpenBlockS600(当サイトで使用しているサーバ)では/dev/randomだと長時間かかるため/dev/urandomで代替します。

www:/etc/bind# rndc-confgen -b 512 -r /dev/urandom > rndc.conf
www:/etc/bind# ls -al rndc.conf
-rw-r--r-- 1 root bind 607 2010-01-03 15:40 rndc.conf

→/etc/rndc.confが作成されました。

www:/etc/bind# chown root:root rndc.conf
www:/etc/bind# chmod 600 rndc.conf
www:/etc/bind# ls -al rndc.conf
-rw------- 1 root root 607 2010-01-03 15:40 rndc.conf

→rndcはrootで動作するため権限を修正します。

rndc.confの初期設定の確認

確認するファイル:/etc/bind/rndc.conf

# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#       algorithm hmac-md5;
#       secret "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
# };
#
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

→コメントアウトされている部分の#を削除してnamed.confにコピーします。

named.confの設定

修正するファイル:/etc/bind/named.conf

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";

# Use with the following in named.conf, adjusting the allow list as needed:
key "rndc-key" {
      algorithm hmac-md5;
      secret "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
};

controls {
      inet 127.0.0.1 port 953
              allow { 127.0.0.1; } keys { "rndc-key"; };
};
# End of named.conf

// prime the server with knowledge of the root servers
zone "." {
        type hint;
        file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

include "/etc/bind/named.conf.local";

→ピンク色の部分を追加しました。

bind9の再起動を実施します。

# /etc/init.d/bind9 start
Starting domain name service...: bind9/etc/init.d/bind9: line 44: 22152 セグメンテーション違反です
start-stop-daemon --start --oknodo --quiet --exec /usr/sbin/named --pidfile ${PIDFILE} -- $OPTIONS failed!

# /usr/sbin/named
セグメンテーション違反です

→通常は正常起動するのですが、OpenBlockS600(当サイトで使用しているサーバ)の場合はここでbinaryファイル(/usr/sbin/named)の入れ替えが必要となります。

その方法についてはOpenblocks600用bind9のbinary入れ替えにまとめていますので参考にしてみて下さい。

ここでは起動に成功したものとして先に進みます。

named.confの修正

修正するファイル:/etc/bind/named.conf

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/rndc.key";

# Use with the following in named.conf, adjusting the allow list as needed:
key "rndc-key" {
      algorithm hmac-md5;
      secret "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
};


controls {
      inet 127.0.0.1 port 953
              allow { 127.0.0.1; } keys { "rndc-key"; };
};
# End of named.conf

// prime the server with knowledge of the root servers
zone "." {

以下、省略

→ピンク色の部分を追加して横線部分をrndc.keyファイルに切り出します。

rndc.keyの作成とnamed.confでの指定

新規作成するファイル:/etc/bind/rndc.key

# Use with the following in named.conf, adjusting the allow list as needed:
key "rndc-key" {
      algorithm hmac-md5;
      secret "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
};

→named.confからkey部分を切り出しました。

次に、このファイルの権限を修正します。

# chmod 600 /etc/bind/rndc.key
# chown bind:bind /etc/bind/rndc.key
# ls -al /etc/bind/rndc*
-rw------- 1 root root 607 2010-01-03 15:40 rndc.conf
-rw------- 1 bind bind 227 2010-01-03 16:49 rndc.key

→ rndc.confはrndcコマンドが使用するため、rootのみが読める必要があります。

一方、rndc.keyはnamed.confにてincludeされているため、bindが読める必要があります(namedは-u bindしているため、ユーザbindにて動作します。)

bind9の再起動

# /etc/init.d/bind9 restart
Stopping domain name service...: bind9 waiting for pid 2577 to die.
Starting domain name service...: bind9.

# rndc status
number of zones: 14
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

→動作確認OK

ここまでで、rndc.confの作成、named.confからrndc.keyの切り出し、起動確認まで終了しました。

ルートゾーンの設定

内部LANの端末は本サーバをDNSサーバとして設定するため、内部端末からのqueryに対して外部DNSに再帰問い合わせできるようにする必要があります。

db.rootの必要性

内部端末がwww.abc.jpのwebサイトを閲覧する際、①のwww.abc.jpの正引きのqueryに対して②~⑦の再帰問い合わせが実施されることになります。

この動きを実現するためには以下の作業が必要になります。

  1. db.rootの作成
  2. named.confにdb.rootファイルの指定
  3. named.conf にRecursion yes; の指定

上記、2,3については別途zoneファイルの項で説明するので、まずはdb.rootの作成を行い、その後、常にdb.rootを最新状態に保つためのcron用のスクリプトを作成します。

digのインストール

ルートゾーンファイルを作成する際に使用するdigをインストールします。

# dig
-su: dig: command not found

→digが入っていません(digはdnsutilsのパッケージに含まれています。)

# aptitude install dnsutils
以下の新規パッケージがインストールされます:
  bind9-host{a} dnsutils

# dig

; <<>> DiG 9.5.1-P3 <<>>
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62314
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 14

→インストール完了

# cp /etc/bind/db.root /etc/bind/db.root.original.20100103
# dig @a.root-servers.net . ns > /etc/bind/db.root

→ルートゾーンファイルが作成されました。

ルートゾーン自動更新cronの作成

こちらを参考にさせて頂きました。

作成したファイル:/etc/cron.monthly/named.root_update

#!/bin/bash

new=`mktemp`
errors=`mktemp`

dig . ns @198.41.0.4 > $new 2> $errors

if [ $? -eq 0 ]; then
    sort_new=`mktemp`
    sort_old=`mktemp`
    diff_out=`mktemp`
    sort $new > $sort_new
    sort /etc/bind/db.root > $sort_old
    diff --ignore-matching-lines=^\; $sort_new $sort_old > $diff_out
    if [ $? -ne 0 ]; then
        (
         echo '-------------------- old named.root --------------------'
         cat /etc/bind/db.root
         echo
         echo '-------------------- new named.root --------------------'
         cat $new
         echo '---------------------- difference ----------------------'
         cat $diff_out
        ) | mail -s 'named.root updated' root
        cp -f $new /etc/bind/db.root
        chmod 644 /etc/bind/db.root
        /etc/init.d/bind9 restart > /dev/null
    fi
    rm -f $sort_new $sort_old $diff_out
else
    cat $errors | mail -s 'named.root update check error' root
fi
rm -f $new $errors

→db.rootとdig . ns @198.41.0.4の実施結果が異なった場合はroot宛に差分のメールを送信し、bind9をrestartします。

# chmod 755 /etc/cron.monthly/named.root_update
# vi /etc/bind/db.root
→アドレスを修正して動作確認

# /etc/cron.monthly/named.root_update
# tail -300 /var/mail/user001

→差分がメールで飛んでいることを確認

JPのネームサーバとセカンダリDNSの設定

JPのネームサーバについて

外部から本サイトへたどり着くためには、本サイトの上位のJPのネームサーバにて、本サイトのドメイン(example.jp)を管理するネームサーバのIPアドレス(本サイトの場合はWAN側グローバルIPアドレス)が登録されている必要があります。

外部からのアクセスの流れ

外部端末がwww.example.jpのwebサイトを閲覧する際、①~⑥の再帰問い合わせが実施されることになります。

これを実現するには以下の2つの設定が必要となります。

  1. JPのネームサーバにexample.jpのネームサーバ名(ns.example.jp) とIPアドレス(WAN側グローバルIPアドレス)の括り付け
  2. example.jpドメインを管理するns.example.jpにてゾーンファイル(db.XXX)の作成

上記、2については後述します。

上記、1については、ご自身のドメインを取得された事業者のwebサイトにて設定可能だと思われますので、設定して下さい。

セカンダリDNSサーバについて

外部にSecondary DNSを登録しておき、通常時にZoneファイルを転送しておくと、Primary DNSサーバ障害時においても外部から名前解決が可能になります。

ただし、DNSサーバとWWWサーバが同じ場合には効果が小さいので注意が必要です。

外部からのアクセスの流れ

Zone転送のためには以下が必要となります。

  1. セカンダリDNSサービスを行っているサイトにて自身のネームサーバ名とIPアドレスを登録
  2. ルータやサーバのフィルタ開放(TCP:53番)
  3. ZoneファイルにSOAレコード追加
  4. named.conf(wan view)にallow-transfer設定

上記、2については忘れがちなのでご注意下さい。

上記3,4については後述します。

上記1について、無料のセカンダリDNSサービスを紹介します。本サイトでも使用しています。

URL: http://www.maihama-net.com/

セカンダリDNS その1: ns1.maihama-net.com / 123.50.202.226 (国内設置)

セカンダリDNS その2:ns2.maihama-net.com / 38.110.146.192 (米国設置)

named.conf、named.conf.options、named.conf.localの設定

前置きが長くなりましたが、ここからが本番です。

まずはこれから解説していく設定の前提条件であるネットワーク構成を図示します。

パターン1

1サーバ構成

パターン1は内向け、外向けDNSサーバを一台で兼ねる構成です。

パターン2

2サーバ構成

パターン2は外部サーバ(DMZに設置)と内部サーバ(LAN内部に設置)に機能を分ける構成です。

こちらについては複雑なため、内向けDNSサーバと外向けDNSサーバに役割を分割する設定に別途まとめています。

named.confとnamed.conf.localの設定

パターン1の図の通り、以下の条件で設定していきます。

LAN内IPアドレス 192.168.0.0/24,172.0.0.0/24
グローバルIPアドレス 111.111.111.111/32
ドメイン1 example.jp
ドメイン2(マルチドメインの場合) example2.jp

view "lan"とview "wan"に分け、LAN内IPアドレスからのqueryに対してはview lan、その他のアドレスからのqueryに関してはview wanの設定に従って処理します。

view は、match-clientsにて送信元のアドレスを指定することでlanとwanを見分けています。match-clientsで当てはまった時点で以降のviewは実施されないため、先にview lanにてLANアドレスで絞り込み、view wanではmatch-clients anyにてその他のアドレスからの通信をマッチさせます。

view "lan"に関してはnamed.conf.localという別ファイルにまとめ、named.confからincludeします。

view "wan"に関してはnamed.confにそのまま定義しています。

編集するファイル:/etc/bind/named.conf

# LAN内のNWアドレス
acl localnet{
        127.0.0.1;
        192.168.0.0/24;
        172.0.0.0/24;
};

include "/etc/bind/named.conf.options";
include "/etc/bind/rndc.key";

controls {
      inet 127.0.0.1 port 953
              allow { 127.0.0.1; } keys { "rndc-key"; };
};

# LAN内端末からのquery用
include "/etc/bind/named.conf.local";

# 外部の端末からのquery用
view "wan" {

        match-clients { any; }; # localnetは既にlan viewでmatchさせているためany設定とする

        allow-query { any; }; # 外部からの問い合わせ用viewのため絞らない

        recursion no; # 外部からの再帰問い合わせを拒否

        notify yes; # DNS情報の変更をSecondary DNSに通知する

        also-notify {
                123.50.202.226; # Secondary DNSのアドレス その1
                38.110.146.192; # Secondary DNSのアドレス その2
        };

        # zoneの定義(逆引きはISPにて設定されており不可)
        zone "example.jp" IN {
                type master;
                file "/etc/bind/db.example.jp"; # zoneファイルの指定
                allow-transfer  {
                        123.50.202.226;
                        38.110.146.192;
                };
        };

// --- マルチドメインを使用する場合はここから追加 ---//

        zone "example2.jp" IN {
                type master;
                file "/etc/bind/db.example2.jp";
                allow-transfer  {
                        123.50.202.226;
                        38.110.146.192;
                };
        };

// ---------------- ここまで追加 --------------------//

};

# syslogとquerylogの設定
logging {

        # syslogの設定
        channel "default-log" {
                syslog local7; # local7.infoにてsyslog出力
                severity info;
                print-time yes;
                print-severity yes;
                print-category yes;
        };

        # rndcコマンド実行時に出力されるQuerylog
        channel "default_debug" {
                file "named.run"; # rndcコマンドで出力させるログファイル名
                severity dynamic;
        };

        # 上記で設定したsyslogとquerylogの有効化(channelだけでは有効にならないため要注意)
        category default {
                "default-log";
                "default_debug";
        };

        category "lame-servers" {
                "null";
        };

};

編集するファイル:/etc/bind/named.conf.local

view "lan" {

        match-clients { localnet; }; # acl localnet(LAN内IPアドレス)に当てはまった場合は本viewを適用

        notify no; # DNS情報の変更をSecondary DNSに通知しない

        allow-query {localnet; }; # 問い合わせを受け付けるホストを指定する

        recursion yes; # LAN端末から外部ドメインの名前解決のための再帰検索を許可する

        allow-recursion { localnet; }; # 再帰的な問い合わせを受け付けるホストを指定する。

        # 内部端末からドメイン名でアクセスできるようにする
        zone "exapmle.jp" IN {
                type master;
                file "/etc/bind/db.example.jp.lan";
                allow-update { none; };
        };

        zone "localhost" {
                type master;
                file "/etc/bind/db.local";
        };

        zone "0.0.127.in-addr.arpa" {
                type master;
                file "/etc/bind/db.127";
        };

// --- マルチドメインを使用する場合はここから追加 ---//

        zone "exapmle2.jp" IN {
                type master;
                file "/etc/bind/db.example2.jp.lan";
                allow-update { none; };
        };

// ---------------- ここまで追加 --------------------//

        # 外部ドメインを再帰検索するため、先ほど作成したルートゾーンファイルを指定
        zone "." {
                type hint;
                file "/etc/bind/db.root";
        };

        # 内部LANからqueryが来た時にインターネットへ逆引きしに行かないようにする設定
        zone "0.168.192.in-addr.arpa" {
                type master;
                file "/etc/bind/db.empty";
                allow-update { none; };
        };

        # DMZ上の設備の名前解決用
        zone "0.0.172.in-addr.arpa" {
                type master;
                file "/etc/bind/db.172";
                allow-update { none; };
        };
};

named.conf.optionsの設定

編集するファイル:/etc/bind/named.conf.options

options {

        # rndc querylogやrndc trace時のログ保存先を指定
        directory       "/var/cache/bind";

        # bindのバージョンを非表示(セキュリティ対応)
        version "unknown";

        # ダンプファイル(現在のDBとキャッシュの内容)の出力先パスを指定する。
        # rndc dumpdbにて出力される。
        dump-file       "/dump/named_dump.db";

        # 問い合わせの統計情報を出力するファイル名を指定
        # rndc statsにて出力される。
        statistics-file "/dump/named.stats";

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { none; };
        pid-file "/var/run/bind/run/named.pid";
};

rndcコマンドによる各種調査を実施した際のログ保存先を指定します。

www:/# mkdir dump
www:/# chown bind:bind dump/
www:/# chmod 777 dump/

→dumpや統計情報を保存するためのディレクトリを作成します。

rsyslogの設定

修正するファイル名: /etc/rsyslog.conf

local7.*                        /var/log/named.log

named 起動時は /var/log/syslogと/var/log/daemon.log に、起動途中から /var/log/named.log にログが出力されますが、BIND9 では named.conf が読み込まれた後に logging ステートメントが有効となることから、起動時のログはデフォルトの宛先に送られているためです。

※logrotateについても必要に応じて設定して下さい(ここでは割愛します)

zoneファイルの設定

# ls /etc/bind/*db*
db.0    db.172  db.example.jp      db.empty  db.root
db.127  db.255  db.example.jp.lan  db.local

※db.0とdb.255は0と255から始まるアドレスの逆引き設定で、ファイルには特に何も設定が無いため意味は無いですが、デフォルトのままのこしておくことにします。

※マルチドメインの場合、二つ目のドメイン(example2.jp)については逆引き設定しないことにします(逆引きはローカルで使用しているだけなので問題ありません。)

編集するファイル:/etc/bind/db.127

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
       IN      NS      localhost.
1      IN      PTR     localhost.
1      IN      PTR     www.example.jp.
1      IN      PTR     www.example2.jp.

→マルチドメインを使用する場合は一番下の行を追加する

編集するファイル:/etc/bind/db.empty

; BIND reverse data file for empty rfc1918 zone
;
; DO NOT EDIT THIS FILE - it is used for multiple zones.
; Instead, copy it, edit named.conf, and use that copy.
;
$TTL    86400
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      localhost.

編集するファイル:/etc/bind/db.local

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1
@       IN      AAAA    ::1

編集するファイル:/etc/bind/db.example.jp

$TTL    86400
@       IN      SOA     ns.example.jp.  user001.example.jp.(
                                      2010012401 ; Serial
                                      3600       ; secondaryがゾーン情報の更新をチェックする間隔
                                      7200       ; secondaryがゾーン転送を失敗した場合に待機する間隔
                                      604800     ; secondaryがゾーンファイルを無効とみなすまでの時間
                                      3600 )     ; 問い合わせレコードが存在しなかった場合に「存在しない」という情報の生存時間
        IN NS    ns.example.jp.
        IN NS    ns1.maihama-net.com.
        IN NS    ns2.maihama-net.com.
        IN MX 10 mail.example.jp.

@       IN A    111.111.111.111
ns      IN A    111.111.111.111
www     IN A    111.111.111.111
mail    IN A    111.111.111.111

編集するファイル:/etc/bind/db.example.jp.lan

$TTL    86400
@       IN      SOA     ns.example.jp.  user001.example.jp.(
                                      2010012401 ; Serial
                                      3600       ; secondaryがゾーン情報の更新をチェックする間隔
                                      7200       ; secondaryがゾーン転送を失敗した場合に待機する間隔
                                      604800     ; secondaryがゾーンファイルを無効とみなすまでの時間
                                      100 )     ; 問い合わせレコードが存在しなかった場合に「存在しない」という情報の生存時間

        IN NS    ns.example.jp.
        IN MX 10 mail.example.jp.

@        IN A     172.0.0.2
ns       IN A     172.0.0.2
www      IN A     172.0.0.2
mail     IN A     172.0.0.2
router  IN A     172.0.0.1

編集するファイル:/etc/bind/db.172

$TTL    86400
@       IN      SOA     ns.example.jp.  user001.example.jp.(
                                      2010012402 ; Serial
                                      3600       ; secondaryがゾーン情報の更新をチェックする間隔
                                      7200       ; secondaryがゾーン転送を失敗した場合に待機する間隔
                                      604800     ; secondaryがゾーンファイルを無効とみなすまでの時間
                                      3600 )     ; 問い合わせレコードが存在しなかった場合に「存在しない」という情報の生存時間
          IN    NS    ns.example.jp.
2         IN    PTR    ns.example.jp.
2         IN    PTR    www.example.jp.
2         IN    PTR    mail.example.jp.
1         IN    PTR    router.example.jp.

以降はマルチドメインの場合のみ設定

編集するファイル:/etc/bind/db.example2.jp

$TTL    86400
@       IN      SOA     ns.example2.jp.  user001.example2.jp.(
                                      2010012401 ; Serial
                                      3600       ; secondaryがゾーン情報の更新をチェックする間隔
                                      7200       ; secondaryがゾーン転送を失敗した場合に待機する間隔
                                      604800     ; secondaryがゾーンファイルを無効とみなすまでの時間
                                      3600 )     ; 問い合わせレコードが存在しなかった場合に「存在しない」という情報の生存時間
        IN NS    ns.example2.jp.
        IN NS    ns1.maihama-net.com.
        IN NS    ns2.maihama-net.com.
        IN MX 10 mail.example2.jp.

@       IN A    111.111.111.111
ns      IN A    111.111.111.111
www     IN A    111.111.111.111
mail    IN A    111.111.111.111

編集するファイル:/etc/bind/db.example2.jp.lan

$TTL    86400
@       IN      SOA     ns.example2.jp.  user001.example2.jp.(
                                      2010012401 ; Serial
                                      3600       ; secondaryがゾーン情報の更新をチェックする間隔
                                      7200       ; secondaryがゾーン転送を失敗した場合に待機する間隔
                                      604800     ; secondaryがゾーンファイルを無効とみなすまでの時間
                                      100 )     ; 問い合わせレコードが存在しなかった場合に「存在しない」という情報の生存時間

        IN NS    ns.example2.jp.
        IN MX 10 mail.example2.jp.

@        IN A     172.0.0.2
ns       IN A     172.0.0.2
www      IN A     172.0.0.2
mail     IN A     172.0.0.2
router  IN A     172.0.0.1

/etc/resolv.confの設定

編集するファイル:/etc/resolv.conf

nameserver 127.0.0.1
search example.jp example2.jp

rndcによるdebugの方法

queryログの取得方法

# rndc querylog

→querylogをonにします。

# rndc status
number of zones: 1
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is ON
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

→ロギングがonになりました。

デバッグの出力方法

# rndc trace デバッグレベル

→デバッグレベルには0~99の整数を指定します。

デバッグレベルが大きい(高い)ほど、表示されるメッセージが詳細になります。

デバッグレベルを付加せずにtraceとだけすると、デバッグレベルが1段上がります。

デバッグ出力の停止はrndcコマンドでnotraceまたはtrace 0を指定します。

ログはnamed.conf.optionsの「directory」で指定したディレクトリに、named.confのchannel "default_debug"で指定したファイル名で出力されます。

当サイトの設定の場合は「/var/cache/bind/named.run」になります。

querylogのファイルの中身を確認してみます。

# tail -f /var/cache/bind/named.run

no longer listening on 127.0.0.1#53
no longer listening on 192.168.0.2#53
exiting
zone 0.in-addr.arpa/IN/lan: loaded serial 1
zone 127.in-addr.arpa/IN/lan: loaded serial 1
zone 0.168.192.in-addr.arpa/IN/lan: loaded serial 2009123001
zone 255.in-addr.arpa/IN/lan: loaded serial 1
zone example.jp/IN/lan: loaded serial 2009123001
zone localhost/IN/lan: loaded serial 2
running
createfetch: www.ocn.ne.jp A
createfetch: . NS
createfetch: K.ROOT-SERVERS.NET A
createfetch: K.ROOT-SERVERS.NET AAAA
createfetch: L.ROOT-SERVERS.NET A
createfetch: L.ROOT-SERVERS.NET AAAA
createfetch: M.ROOT-SERVERS.NET A
createfetch: M.ROOT-SERVERS.NET AAAA
network unreachable resolving 'www.ocn.ne.jp/A/IN': 2001:dc4::1#53
network unreachable resolving 'www.ocn.ne.jp/A/IN': 2001:2f8:0:100::153#53

→rndc trace 1を投入して内部LANからnslookupしたところ、IPv6のエラーらしき結果が出ていました。

named.conf.optionsでIPv6を無効にしているはずですが、効いていないように思われます。

namedの起動スクリプトの中でオプションに-4を付けてみたところ回復しました。

# vi /etc/init.d/bind9

        if start-stop-daemon --start --oknodo --quiet --exec /usr/sbin/named \
                --pidfile ${PIDFILE} -- $OPTIONS -4; then

# /etc/init.d/bind9 restart
Stopping domain name service...: bind9 waiting for pid 22770 to die.
Starting domain name service...: bind9.

rndc statsとrndc dumpdbについて

rndc stats

→/dump/named.statsに利用状況を表示します。cronで定期実行してmrtgなどでグラフ化すると有効です。

rndc dumpdb

→/dump/namedにキャッシュされているメモリ内のデータを出力します。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です