bind9 の動作確認

$Id: bind9test.html,v 1.4 2002/08/22 01:48:59 candy Exp $
このページの内容は無保証です。
まずbind9 の設定方法を読むこと。
  1. 基本設定

    動作確認では、インターネットに IP 接続していることが必要である。
    1. デバッグモードで起動

      named を -g 付きで起動する。
      # /usr/local/sbin/named -u bind -t /usr/local/etc/namedb -c /named.conf [-g] # chroot する場合
      # /usr/local/sbin/named -u bind -c /usr/local/etc/namedb/named.conf [-g] # chroot しない場合
      (-g を付けるとデバッグモード)
      Aug 21 00:37:40.933 starting BIND 9.2.1 -u bind -t /usr/local/etc/namedb -c /named.conf -g
      Aug 21 00:37:40.935 using 1 CPU
      Aug 21 00:37:40.938 loading configuration from '/named.conf'
      Aug 21 00:37:40.939 listening on IPv6 interfaces, port 53
      Aug 21 00:37:40.940 listening on IPv4 interface fxp0, 172.30.2.3#53
      Aug 21 00:37:40.940 listening on IPv4 interface lo0, 127.0.0.1#53
      Aug 21 00:37:40.945 command channel listening on 127.0.0.1#953
      Aug 21 00:37:40.945 command channel listening on ::1#953
      Aug 21 00:37:40.945 ignoring config file logging statement due to -g option
      Aug 21 00:37:40.947 zone 0.0.127.in-addr.arpa/IN: loaded serial 20020821
      Aug 21 00:37:40.948 zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int/IN: loaded serial 20020821
      Aug 21 00:37:40.948 running
      
      うまく行くとこんな感じになる。 Control-C で終了する。
    2. rndc の動作確認

      • named を起動したまま、別の端末から rndc reload してみる。
        # rndc -c /usr/local/etc/namedb/rndc.conf -s 127.0.0.1 reload
        
        すると、named の出力には下のように出るはずだ。
        Aug 21 00:43:16.024 loading configuration from '/named.conf'
        Aug 21 00:43:16.030 ignoring config file logging statement due to -g option
        
      • IPv6 でも制御できることを確認する。
        # rndc -c /usr/local/etc/namedb/rndc.conf -s ::1 reload
        
      • /etc/rndc.conf からシンボリックリンクしておくと -c の指定が不要になる。
        # ln -s ../usr/local/etc/namedb/rndc.conf /etc
        
    3. dig の動作確認

      named を起動したまま、別の端末から dig してみる。
      • 1.0.0.127.in-addr.arpa を引く
        $ /usr/local/bin/dig @127.0.0.1 -x 127.0.0.1
        ; <<>> DiG 9.2.1 <<>> @127.0.0.1 -x 127.0.0.1
        ;; global options:  printcmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46472
        ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
        
        ;; QUESTION SECTION:
        ;1.0.0.127.in-addr.arpa.                IN      PTR
        
        ;; ANSWER SECTION:
        1.0.0.127.in-addr.arpa. 3600    IN      PTR     localhost.example.com.
        
        ;; AUTHORITY SECTION:
        0.0.127.in-addr.arpa.   3600    IN      NS      ns.example.com.
        
        ;; Query time: 3 msec
        ;; SERVER: 127.0.0.1#53(127.0.0.1)
        ;; WHEN: Wed Aug 21 10:04:19 2002
        ;; MSG SIZE  rcvd: 91
        
      • IPv6 での問い合わせも動くことを確認する。
        $ /usr/local/bin/dig @::1 -x 127.0.0.1
        
      • ip6.int ドメインの確認。
        $ /usr/local/bin/dig @127.0.0.1 -n -x ::1
        
        ; <<>> DiG 9.2.1 <<>> @127.0.0.1 -n -x ::1
        ;; global options:  printcmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18455
        ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
        
        ;; QUESTION SECTION:
        ;1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int. IN PTR
        
        ;; ANSWER SECTION:
        1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int. 3600 IN PTR localhost.example.com.
        
        ;; AUTHORITY SECTION:
        1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int. 3600 IN NS ns.example.com.
        
        ;; Query time: 3 msec
        ;; SERVER: 127.0.0.1#53(127.0.0.1)
        ;; WHEN: Wed Aug 21 10:08:16 2002
        ;; MSG SIZE  rcvd: 140
        
      • 外の世界が引けることを確認する。
        $ /usr/local/bin/dig @127.0.0.1 www.freebsd.org
        
        ; <<>> DiG 9.2.1 <<>> @127.0.0.1 www.freebsd.org
        ;; global options:  printcmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2293
        ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 1
        
        ;; QUESTION SECTION:
        ;www.freebsd.org.               IN      A
        
        ;; ANSWER SECTION:
        www.freebsd.org.        3594    IN      A       216.136.204.117
        
        ;; AUTHORITY SECTION:
        freebsd.org.            3594    IN      NS      ns1.root.com.
        freebsd.org.            3594    IN      NS      ns1.iafrica.com.
        freebsd.org.            3594    IN      NS      ns2.iafrica.com.
        freebsd.org.            3594    IN      NS      ns0.freebsd.org.
        
        ;; ADDITIONAL SECTION:
        ns2.iafrica.com.        172795  IN      A       196.7.142.133
        
        ;; Query time: 3 msec
        ;; SERVER: 127.0.0.1#53(127.0.0.1)
        ;; WHEN: Wed Aug 21 10:17:17 2002
        ;; MSG SIZE  rcvd: 153
        

  2. 外向けと内向けの DNS を一台で

    1. デバッグモードで起動

      named を -g 付きで起動する。
      # /usr/local/sbin/named -u bind -t /usr/local/etc/namedb -c /named.conf [-g] # chroot する場合
      # /usr/local/sbin/named -u bind -c /usr/local/etc/namedb/named.conf [-g] # chroot しない場合
      
    2. dig の動作確認

      1. まず 127.0.0.1 に問い合わせ、view "internal" が使用されることを確認する。
        • www.example.com の A が 192.168.0.1 であることを確認。
          $ /usr/local/bin/dig @127.0.0.1 www.example.com | egrep -v '^;|^$'
          www.example.com.        3600    IN      A       192.168.0.1
          example.com.            3600    IN      NS      ns.example.com.
          ns.example.com.         3600    IN      A       192.168.0.1
          
        • 192.168.0.1 の逆引きが ns.example.com であることを確認。
          $ /usr/local/bin/dig @127.0.0.1 -x 192.168.0.1 | egrep -v '^;|^$'
          1.0.168.192.in-addr.arpa. 3600  IN      PTR     ns.example.com.
          0.168.192.in-addr.arpa. 3600    IN      NS      ns.example.com.
          ns.example.com.         3600    IN      A       192.168.0.1
          
        • 1.0.0.127.in-addr.arpa が引けることを確認。
          $ /usr/local/bin/dig @127.0.0.1 -x 127.0.0.1 | egrep -v '^;|^$'
          1.0.0.127.in-addr.arpa. 3600    IN      PTR     localhost.example.com.
          0.0.127.in-addr.arpa.   3600    IN      NS      ns.example.com.
          ns.example.com.         3600    IN      A       192.168.0.1
          
        • example.com のゾーン転送が可能であることを確認。
          $ /usr/local/bin/dig @127.0.0.1 example.com axfr | egrep -v '^;|^$'
          example.com.            3600    IN      SOA     ns.example.com. root.ns.example.com. 1 3600 900 3600000 3600
          example.com.            3600    IN      NS      ns.example.com.
          example.com.            3600    IN      MX      10 mail.example.com.
          localhost.example.com.  3600    IN      A       127.0.0.1
          mail.example.com.       3600    IN      A       192.168.0.1
          ns.example.com.         3600    IN      A       192.168.0.1
          www.example.com.        3600    IN      A       192.168.0.1
          example.com.            3600    IN      SOA     ns.example.com. root.ns.example.com. 1 3600 900 3600000 3600
          
        • 外の世界が引けることを確認。
          $ /usr/local/bin/dig @127.0.0.1 www.freebsd.org | egrep -v '^;|^$'
          www.freebsd.org.        3600    IN      A       216.136.204.117
          freebsd.org.            3600    IN      NS      ns0.freebsd.org.
          freebsd.org.            3600    IN      NS      ns1.root.com.
          freebsd.org.            3600    IN      NS      ns1.iafrica.com.
          freebsd.org.            3600    IN      NS      ns2.iafrica.com.
          
      2. アドレスを ::1 に変えて、上記 1 のテストを繰り返す。
        $ /usr/local/bin/dig @::1 www.example.com | egrep -v '^;|^$'
        $ /usr/local/bin/dig @::1 -x 192.168.0.1 | egrep -v '^;|^$'
        $ /usr/local/bin/dig @::1 -x 127.0.0.1 | egrep -v '^;|^$'
        $ /usr/local/bin/dig @::1 example.com axfr | egrep -v '^;|^$' 
        $ /usr/local/bin/dig @::1 www.freebsd.org | egrep -v '^;|^$'
        
      3. 10.0.0.1 に問い合わせ、view "external" が使用されることを確認する。
        • www.example.com の A が 10.0.0.1 であることを確認。
          $ /usr/local/bin/dig @10.0.0.1 www.example.com | egrep -v '^;|^$'
          www.example.com.        3600    IN      A       10.0.0.1
          example.com.            3600    IN      NS      ns2.example.com.
          example.com.            3600    IN      NS      ns.example.com.
          ns.example.com.         3600    IN      A       10.0.0.1
          ns2.example.com.        3600    IN      A       172.16.0.1
          
        • 10.0.0.1 の逆引きが ns.example.com であることを確認。 このサーバは直接 1.0.0.10.in-addr.arpa は引けないので、 明示的に 1.0.0.0.10.in-addr.arpa を引く。
          $ /usr/local/bin/dig @10.0.0.1 1.0.0.0.10.in-addr.arpa ptr | egrep -v '^;|^$'
          1.0.0.0.10.in-addr.arpa. 3600   IN      PTR     ns.example.com.
          0.0.0.10.in-addr.arpa.  3600    IN      NS      ns2.example.com.
          0.0.0.10.in-addr.arpa.  3600    IN      NS      ns.example.com.
          ns.example.com.         3600    IN      A       10.0.0.1
          ns2.example.com.        3600    IN      A       172.16.0.1
          
        • 1.0.0.127.in-addr.arpa が引けることを確認。
          $ /usr/local/bin/dig @10.0.0.1 -x 127.0.0.1 | egrep -v '^;|^$'
          1.0.0.127.in-addr.arpa. 3600    IN      PTR     localhost.example.com.
          0.0.127.in-addr.arpa.   3600    IN      NS      ns.example.com.
          ns.example.com.         3600    IN      A       10.0.0.1
          
        • example.com のゾーン転送が可能であることを確認。
          $ /usr/local/bin/dig @10.0.0.1 example.com axfr | egrep -v '^;|^$'
          example.com.            3600    IN      SOA     ns.example.com. root.ns.example.com. 1 3600 900 3600000 3600
          example.com.            3600    IN      NS      ns.example.com.
          example.com.            3600    IN      NS      ns2.example.com.
          example.com.            3600    IN      MX      10 mail.example.com.
          localhost.example.com.  3600    IN      A       127.0.0.1
          mail.example.com.       3600    IN      A       10.0.0.1
          ns.example.com.         3600    IN      A       10.0.0.1
          ns2.example.com.        3600    IN      A       172.16.0.1
          www.example.com.        3600    IN      A       10.0.0.1
          example.com.            3600    IN      SOA     ns.example.com. root.ns.example.com. 1 3600 900 3600000 3600
          
        • 外の世界が引けない(再帰検索しない)ことを確認。
          $ /usr/local/bin/dig @10.0.0.1 www.freebsd.org | egrep -v '^;|^$'
          .                       3600000 IN      NS      H.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      I.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      J.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      K.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      L.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      M.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      A.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      B.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      C.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      D.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      E.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      F.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      G.ROOT-SERVERS.NET.
          
      4. 外部からの確認
        外部からのテストをするには、 実際に外部からグローバルアドレスを指定して試せば良い。 もし、そういう環境にないのであれば、 インターフェースに仮の IP アドレスを追加設定してテストする。
        # ifconfig fxp0 172.30.2.3 alias # 設定
        # ifconfig fxp0 172.30.2.3 -alias # 解除
        
        "fxp0" は適宜読み変えること。
        • example.com のゾーン転送が不可能であることを確認。
          $ /usr/local/bin/dig @172.30.2.3 www.freebsd.org axfr
          
          ; <<>> DiG 9.2.1 <<>> @172.30.2.3 www.freebsd.org axfr
          ;; global options:  printcmd
          ; Transfer failed.
          
        • 外の世界が引けない(再帰検索しない)ことを確認。
          $ /usr/local/bin/dig @10.0.0.1 www.freebsd.org | egrep -v '^;|^$'
          .                       3600000 IN      NS      B.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      C.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      D.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      E.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      F.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      G.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      H.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      I.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      J.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      K.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      L.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      M.ROOT-SERVERS.NET.
          .                       3600000 IN      NS      A.ROOT-SERVERS.NET.
          

  3. ダイナミックアップデート

    1. デバッグモードで起動

      named を -g 付きで起動する。
      # /usr/local/sbin/named -u bind -t /usr/local/etc/namedb -c /named.conf [-g] # chroot する場合
      # /usr/local/sbin/named -u bind -c /usr/local/etc/namedb/named.conf [-g] # chroot しない場合
      
    2. nsupdate の動作確認

      1. pc1.example.com の A レコードを 192.168.0.2 に設定する。
        # /usr/local/bin/nsupdate -d -k /usr/local/etc/namedb/key/Kddns.*.private
        Creating key...
        > server 127.0.0.1
        > update add pc1.example.com 86400 IN A 192.168.0.2
        > [エンターキーを押す]
        Reply from SOA query:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:  38261
        ;; flags: qr aa rd ra ; QUESTION: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
        ;; QUESTION SECTION:
        ;pc1.example.com.               IN      SOA
        
        ;; AUTHORITY SECTION:
        example.com.            3600    IN      SOA     ns.example.com. root.ns.example.com. 5 3600 900 3600000 3600
        
        Found zone name: example.com
        The master is: ns.example.com
        before getaddrinfo()
        
        Reply from update query:
        ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id:  39853
        ;; flags: qr ra ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 1
        ;; TSIG PSEUDOSECTION:
        ddns.                   0       ANY     TSIG    hmac-md5.sig-alg.reg.int. 1029914821 300 16 Mjb0QmIm+Ns5MYxMw3LBbA== 39853 NOERROR 0 
        
        > [control-D で終了]
        
      2. pc1.example.com が引けることを確認する。
        # dig @127.0.0.1 pc1.example.com | egrep -v '^;|^$'
        pc1.example.com.        1D IN A         192.168.0.2
        example.com.            1H IN NS        ns.example.com.
        ns.example.com.         1H IN A         192.168.0.1
        
      3. pc1.example.com の A レコードを削除する。
        # /usr/local/bin/nsupdate -d -k /usr/local/etc/namedb/key/Kddns.*.private
        > server 127.0.0.1
        > update delete pc1.example.com IN A
        > [エンターキーを押す]
        
      4. pc1.example.com が引けないことを確認する。
        # dig @127.0.0.1 pc1.example.com | egrep -v '^;|^$'
        example.com.            1H IN SOA       ns.example.com. root.ns.example.com. (
                                                6               ; serial
                                                1H              ; refresh
                                                15M             ; retry
                                                5w6d16h         ; expiry
                                                1H )            ; minimum
        
      5. 2.0.168.192.in-addr.arpa. の PTR を pc1.example.com. に設定する。
        # /usr/local/bin/nsupdate -d -k /usr/local/etc/namedb/key/Kddns.*.private
        > server 127.0.0.1
        > update add 2.0.168.192.in-addr.arpa. 86400 IN PTR pc1.example.com. # 最後の . を忘れないこと!!
        > [エンターキーを押す]
        
      6. 192.168.0.2 が逆引きできることを確認する。
        # dig @127.0.0.1 -x 192.168.0.2 | egrep -v '^;|^$'
        2.0.168.192.in-addr.arpa.  1D IN PTR  pc1.example.com.
        0.168.192.in-addr.arpa.  1H IN NS  ns.example.com.
        ns.example.com.         1H IN A         192.168.0.1
        
      7. 2.0.168.192.in-addr.arpa. の PTR を削除する。
        # /usr/local/bin/nsupdate -d -k /usr/local/etc/namedb/key/Kddns.*.private
        > server 127.0.0.1
        > update delete 2.0.168.192.in-addr.arpa. IN PTR
        > [エンターキーを押す]
        
      8. 192.168.0.2 が逆引きできないことを確認する。
        # dig @127.0.0.1 -x 192.168.0.2 | egrep -v '^;|^$'-d
        0.168.192.in-addr.arpa.  1H IN SOA  ns.example.com. root.ns.example.com. (
                                                8               ; serial
                                                1H              ; refresh
                                                15M             ; retry
                                                5w6d16h         ; expiry
                                                1H )            ; minimum
        
      9. この時、named のログには、
        Aug 21 07:28:42.069 client 127.0.0.1#2096: updating zone 'example.com/IN': adding an RR
        Aug 21 07:30:46.934 client 127.0.0.1#2096: updating zone 'example.com/IN': deleting an rrset
        
        などと出る。
      10. named を終了させ、
        /usr/local/etc/namedb/s/example.com-priv
        /usr/local/etc/namedb/s/0.168.192.in-addr.arpa
        
        が変化していることを確認する。
      以上で nsupdate の確認は終り。
    3. DHCP での更新確認

      named と dhcpd の連動のテスト。
      1. dhcpd を起動し、DHCP クライアントを立ち上げる。
        # /usr/local/sbin/dhcpd [-d]
        [中略]
        Added new forward map from pc1.example.com to 192.168.0.15
        added reverse map from 15.0.168.192.in-addr.arpa. to pc1.example.com
        DHCPREQUEST for 192.168.0.15 from 00:a0:24:a5:10:4b via fxp1
        DHCPACK on 192.168.0.15 to 00:a0:24:a5:10:4b via fxp1
        
        このとき、named のログには、
        Aug 22 01:22:55.068 client 127.0.0.1#1435: updating zone 'example.com/IN': adding an RR
        Aug 22 01:22:55.068 client 127.0.0.1#1435: updating zone 'example.com/IN': adding an RR
        Aug 22 01:22:55.074 client 127.0.0.1#1436: updating zone '0.168.192.in-addr.arpa/IN': deleting an rrset
        Aug 22 01:22:55.074 client 127.0.0.1#1436: updating zone '0.168.192.in-addr.arpa/IN': adding an RR
        
        などと出ている。
      2. pc1 の正引きと逆引きのテスト。
        $ dig @127.0.0.1 pc1.example.com. | egrep -v '^;|^$'
        pc1.example.com.        6H IN A         192.168.0.15
        example.com.            1H IN NS        ns.example.com.
        ns.example.com.         1H IN A         192.168.0.1
        
        $ dig @127.0.0.1 -x 192.168.0.15 | egrep -v '^;|^$'
        15.0.168.192.in-addr.arpa.  6H IN PTR  pc1.example.com.
        0.168.192.in-addr.arpa.  1H IN NS  ns.example.com.
        ns.example.com.         1H IN A         192.168.0.1
        
      以上