named (bind4) を設定する

named (bind4) をローカルドメイン管理用とキャッシュサーバとしてセットアップする手順を紹介します。 キャッシュサーバを運用することにより、 DNSの問い合わせで外部と通信する頻度を減らすことができ、 様々な処理のレスポンスを向上することができます。

このメモは OpenBSD 3.2版に基づいていますが、それ以前の各版に適用できると思われます。 bind9に移行した3.3版以降には適用できません。

設定ファイルの作成

  1. /var/named/named.boot
    設定の中心となるファイルです。
    directory       /namedb
    options         forward-only
    forwarders      202.224.32.1 202.224.32.2
    ; type          domain                  source host/file        backup file
    primary         localhost               localhost
    primary         127.in-addr.arpa        rev.127
    primary         local                   local
    primary         0.168.192.in-addr.arpa  rev.192.168.0
    
    directory には他の設定ファイルやデータを置くディレクトリを指定します。 OpenBSD では /var/named に chroot して named を動かす関係で、 /var/named/namedb なら /namedb と指定します。
    options に forward-only を指定すると、自分自身では問い合わせの解決をしないで、 forwarders に指定されたDNSサーバに問い合わせを転送するようになります。 forwarders にはプロバイダのDNSサーバを指定します。 こうすることにより、 プロバイダのDNSサーバが持つ多くのキャッシュ情報を利用することができ、 自分自身で解決するより高速に処理できると期待できます。
    primary には独自に管理するゾーンについて指定します。 各ゾーンの情報はここで指定したファイルに設定することになります。
  2. /var/named/namedb/localhost
    localhost の正引きの情報を指定します。
    @               IN SOA  ns.local. root.ns.local. (
                            2002113000      ; Serial (YYYYMMDDNN)
                            43200           ; Refresh (12H)
                            3600            ; Retry (1H)
                            3600000         ; Expire (1000H)
                            86400 )         ; Default TTL (24H)
                    IN NS   localhost.
                    IN A    127.0.0.1
    
  3. /var/named/namedb/rev.127
    127.XX.XX.XX の逆引きの情報を指定します。
    @               IN SOA  ns.local. root.ns.local. (
                            2002113000      ; Serial (YYYYMMDDNN)
                            43200           ; Refresh (12H)
                            3600            ; Retry (1H)
                            3600000         ; Expire (1000H)
                            86400 )         ; Default TTL (24H)
                    IN NS   localhost.
    1.0.0           IN PTR  localhost.
    
  4. /var/named/namedb/local
    ローカルドメイン(ここでは、"local")の正引きの情報を指定します。
    @               IN SOA  ns.local. root.ns.local. (
                            2002113000      ; Serial (YYYYMMDDNN)
                            43200           ; Refresh (12H)
                            3600            ; Retry (1H)
                            3600000         ; Expire (1000H)
                            86400 )         ; Default TTL (24H)
                    IN NS   ns
    router          IN A    192.168.0.1
    ns              IN A    192.168.0.101
    hostname1       IN A    192.168.0.101
    hostname2       IN A    192.168.0.102
    hostname3       IN A    192.168.0.103
    
    hostname1 でDNSサーバを動かしているという想定の設定例です。
  5. /var/named/namedb/rev.192.168.0
    192.168.0.XX の逆引きの情報を指定します。
    @               IN SOA  ns.local. root.ns.local. (
                            2002113000      ; Serial (YYYYMMDDNN)
                            43200           ; Refresh (12H)
                            3600            ; Retry (1H)
                            3600000         ; Expire (1000H)
                            86400 )         ; Default TTL (24H)
                    IN NS   ns.local.
    1               IN PTR  router.local.
    101             IN PTR  hostname1.local.
    102             IN PTR  hostname2.local.
    103             IN PTR  hostname3.local.
    

起動と利用の設定、動作確認

  1. /etc/rc.conf を編集して起動の設定をします。
    named_flags の設定値を NO から "" に変更します。 named_user と named_chroot の設定値は変更の必要はありません。
    named_flags=""          # for normal use: ""
            ・・・
    named_user=named                # Named should not run as root unless necessary
    named_chroot=/var/named         # Where to chroot named if not empty
    
  2. /etc/resolv.conf を編集して参照の設定をします。
    以下のように設定します。
    domain local
    nameserver 192.168.0.101
    
  3. named を起動するために、OSをリブートします。
    OSをリブートしなくても named を単独で起動することは可能ですが、 syslogd との関係で少し複雑になります。 OSをリブートしたくない場合には /etc/rc を参考にして起動してください。
  4. dig を使って動作確認をします。
    % dig hostname1.local
    
    ; <<>> DiG 2.2 <<>> hostname1.local 
    ;; res options: init recurs defnam dnsrch
    ;; got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
    ;; flags: qr aa rd ra; Ques: 1, Ans: 1, Auth: 1, Addit: 1
    ;; QUESTIONS:
    ;;      hostname1.local, type = A, class = IN
    
    ;; ANSWERS:
    hostname1.local.        86400   A       192.168.0.101
    
    ;; AUTHORITY RECORDS:
    local.  86400   NS      ns.local.
    
    ;; ADDITIONAL RECORDS:
    ns.local.       86400   A       192.168.0.101
    
    ;; Total query time: 2 msec
    ;; FROM: taurus to SERVER: default -- 192.168.0.101
    ;; WHEN: Sat Nov 30 12:34:56 2002
    ;; MSG SIZE  sent: 33  rcvd: 87
    
    %