実際に用いられているゾーンファイルの例
チュートリアルの例だけでなく実際に動作している例を載せて欲しい、 という意見があったので、この章を設けました。
この例は LAND-5 の David Bullock の許可の下に用いています。 これらのファイルは、 1996 年 9 月 24 日現在のものを、私が bind 8 の制限と拡張にあわせて編集したものです。 したがってここでの記述は、 実際に LAND-5 のネームサーバに問い合わせを行った結果とは多少異なります。
マスターゾーンセクションとして、
必須の逆引きゾーンが二つ書かれています。
127.0.0 のネットと LAND-5 のサブネットである
206.6.177 です。 LAND-5 の正引きゾーンである
land-5.com もプライマリとして指定されています。
ゾーンファイルは本 HOWTO のこれまでの例で用いていた pz ではなく、
zone というディレクトリに収められていることにも注意してください。
// Boot file for LAND-5 name server
options {
        directory "/var/named";
};
zone "." {
        type hint;
        file "root.hints";
};
zone "0.0.127.in-addr.arpa" {
        type master;
        file "zone/127.0.0";
};
zone "land-5.com" {
        type master;
        file "zone/land-5.com";
};
zone "177.6.206.in-addr.arpa" {
        type master;
        file "zone/206.6.177";
};
このファイルをあなたの named.conf ファイルに用いるときには、
必ず ``notify no;'' を
land-5 の二つの zone セクションに追加して、
事故が起こらないようにしてください。
このファイルは動的に変化するものですから、このリストは古いです。 dig を使って新しく作ったものを使いましょう。やり方は次のセクションで 説明しています。
; <<>> DiG 8.1 <<>> @A.ROOT-SERVERS.NET. ; (1 server found) ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10 ;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13 ;; QUERY SECTION: ;; ., type = NS, class = IN ;; ANSWER SECTION: . 6D IN NS G.ROOT-SERVERS.NET. . 6D IN NS J.ROOT-SERVERS.NET. . 6D IN NS K.ROOT-SERVERS.NET. . 6D IN NS L.ROOT-SERVERS.NET. . 6D IN NS M.ROOT-SERVERS.NET. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.ROOT-SERVERS.NET. . 6D IN NS B.ROOT-SERVERS.NET. . 6D IN NS C.ROOT-SERVERS.NET. . 6D IN NS D.ROOT-SERVERS.NET. . 6D IN NS E.ROOT-SERVERS.NET. . 6D IN NS I.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET. ;; ADDITIONAL SECTION: G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4 J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10 K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33 A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53 B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107 C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12 D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90 E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10 I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17 F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241 ;; Total query time: 215 msec ;; FROM: roke.uio.no to SERVER: A.ROOT-SERVERS.NET. 198.41.0.4 ;; WHEN: Sun Feb 15 01:22:51 1998 ;; MSG SIZE sent: 17 rcvd: 436
非常にシンプルなものです。まず絶対に必要な SOA レコード、
そして 127.0.0.1 を localhost にマップするレコードです。
これらは両方とも必須です。逆にこれ以上のものは置くべきではありません。
このファイルは、使っているネームサーバか
hostmaster のメールアドレスが変更されない限り、
更新する必要はおそらくないでしょう。
@               IN      SOA     land-5.com. root.land-5.com. (
                                199609203       ; Serial
                                28800   ; Refresh
                                7200    ; Retry
                                604800  ; Expire
                                86400)  ; Minimum TTL
                        NS      land-5.com.
        
1                       PTR     localhost.
適当にインストールされた BIND では、
ここでの例のように $TTL の行がないかもしれません。
この行は以前は用いられておらず、8.2 の BIND だけが
起動時にこの行が無い旨の警告を出します。
私のおすすめは、$TTL 行が無いゾーンファイルを見つけたら、
その度ごとに $TTL を入れる、です。
まず必須である SOA レコードと、同じく必須の NS レコードがあります。
セカンダリのネームサーバが
ns2.psi.net に用意されていることもわかりますね。
これは望ましい設定です。
必ずサイトの外にバックアップのセカンダリネームサーバを置くべきです。
マスターのホストは land-5 で、
このホストは同時に各種のインターネットサービスを提供していることもわかります。
これには (A レコードでなく) CNAME が用いられています。
SOA レコードからわかるように、このゾーンファイルは land-5.com
を origin にしており、連絡担当者は root@land-5.com です。
hostmaster も担当者のアドレスとして良く用いられます。
シリアル番号は yyyymmdd 形式で、
その日のうちのシリアル番号が追加されています。
これはきっと 1996 年 9 月 20 日の第 6 版なのでしょう。
シリアル番号は必ず増加しなければならないことを思い出してください。
ここには当日中のシリアル番号として一桁しか使うことが
できません。したがって 9 回変更を行ったら、次の変更を行うには
翌日まで待たなければなりません。二桁使う方が良いかもしれませんね。
@       IN      SOA     land-5.com. root.land-5.com. (
                        199609206       ; serial, todays date + todays serial #
                        8H              ; refresh, seconds
                        2H              ; retry, seconds
                        4W              ; expire, seconds
                        1D )            ; minimum, seconds
                NS      land-5.com.
                NS      ns2.psi.net.
                MX      10 land-5.com.  ; Primary Mail Exchanger
                TXT     "LAND-5 Corporation"
localhost       A       127.0.0.1
router          A       206.6.177.1
        
land-5.com.     A       206.6.177.2
ns              A       206.6.177.3
www             A       207.159.141.192
ftp             CNAME   land-5.com.
mail            CNAME   land-5.com.
news            CNAME   land-5.com.
funn            A       206.6.177.2
;
;       Workstations
;
ws-177200       A       206.6.177.200
                MX      10 land-5.com.   ; Primary Mail Host
ws-177201       A       206.6.177.201
                MX      10 land-5.com.   ; Primary Mail Host
ws-177202       A       206.6.177.202
                MX      10 land-5.com.   ; Primary Mail Host
ws-177203       A       206.6.177.203
                MX      10 land-5.com.   ; Primary Mail Host
ws-177204       A       206.6.177.204
                MX      10 land-5.com.   ; Primary Mail Host
ws-177205       A       206.6.177.205
                MX      10 land-5.com.   ; Primary Mail Host
; {Many repetitive definitions deleted - SNIP}
ws-177250       A       206.6.177.250
                MX      10 land-5.com.   ; Primary Mail Host
ws-177251       A       206.6.177.251
                MX      10 land-5.com.   ; Primary Mail Host
ws-177252       A       206.6.177.252
                MX      10 land-5.com.   ; Primary Mail Host
ws-177253       A       206.6.177.253
                MX      10 land-5.com.   ; Primary Mail Host
ws-177254       A       206.6.177.254
                MX      10 land-5.com.   ; Primary Mail Host
land-5 のネームサーバを試してみればわかりますが、
本当のホスト名は ws_number となっています。
最近の版の bind 4 の named では、
ホスト名に用いることのできる文字が制限されるようになりました。
したがってこの名前は bind-8 では絶対に動作しませんから、
この HOWTO に掲載する際には '_' (underline) を '-' (dash) で置き換えました。
もう一つ気がつきましたか? 各ワークステーションには固別の名前は付いておらず、 プレフィックスに IP 番号の最後の二つが付いた形式になっています。 このような命名方法を用いればメンテナンスはとても楽になりますが、 やや人間との相性は悪いので、 顧客をイライラさせる結果になってしまうかもしれません。
funn.land-5.com も land-5.com のエイリアスになっていますが、
これは CNAME レコードではなく A レコードを用いています。
先に述べたように、これは良い方針です。
このファイルについては後でコメントします。
@               IN      SOA     land-5.com. root.land-5.com. (
                                199609206       ; Serial
                                28800   ; Refresh
                                7200    ; Retry
                                604800  ; Expire
                                86400)  ; Minimum TTL
                        NS      land-5.com.
                        NS      ns2.psi.net.
;
;       Servers
;
1       PTR     router.land-5.com.
2       PTR     land-5.com.
2       PTR     funn.land-5.com.
;
;       Workstations
;
200     PTR     ws-177200.land-5.com.
201     PTR     ws-177201.land-5.com.
202     PTR     ws-177202.land-5.com.
203     PTR     ws-177203.land-5.com.
204     PTR     ws-177204.land-5.com.
205     PTR     ws-177205.land-5.com.
; {Many repetitive definitions deleted - SNIP}
250     PTR     ws-177250.land-5.com.
251     PTR     ws-177251.land-5.com.
252     PTR     ws-177252.land-5.com.
253     PTR     ws-177253.land-5.com.
254     PTR     ws-177254.land-5.com.
逆引きのゾーンは、設定の中でも多くの悲劇を引き起こす部分と言えます。
これはマシンの IP 番号がわかっている場合に、
ホスト名を取得するために用いられます。
例えば、あなたが立てている IRC サーバが
IRC クライアントから接続されたとしましょう。
しかしあなたの IRC サーバではノルウェー語が使われているので、
ノルウェーと他のスカンジナビアの国々以外からの接続はさせたくないとします。
クライアントから接続されると、
C ライブラリによって接続してきたマシンの IP 番号を知ることができます。
なぜならクライアントの IP 番号は、ネットワークを運ばれてきた
IP パケットのそれぞれに書き込まれているからです。
ここで gethostbyaddr という関数を呼べば、
IP 番号からホストの名前を引くことができます。
gethostbyaddr は DNS サーバに尋ね、
DNS サーバは DNS からそのマシンを探します。
接続してきたクライアントは ws-177200.land-5.com だったとしてみましょう。
C ライブラリが IRC サーバに渡す IP 番号は 206.6.177.200 となります。
したがって名前を引くためには
200.177.6.206.in-addr.arpa を見つける必要があります。
DNS サーバはまず arpa. のサーバに問い合わせをし、
in-addr.arpa. のサーバを教えてもらいます。
続いて 206, 6 を順次逆に辿って、最後に Land-5 のゾーンである
177.6.206.in-addr.arpa ゾーンを発見します。
最後にサーバは、そこから
200.177.6.206.in-addr.arpa に対する答えを入手します。
``PTR ws-177200.land-5.com'' レコードから、
206.6.177.200 は ws-177200.land-5.com であることがわかります。 
なお以上の説明には、
prep.ai.mit.edu の名前引きの部分と同じように
少々フィクションが入っています。
IRC サーバの例に戻りましょう。
IRC サーバはスカンジナビアの国々から、
つまり *.no, *.se, *.dk からしか接続を受け付けません。
ws-177200.land-5.com は明らかに以上のどれにもマッチしませんから、
サーバは接続を拒否します。
206.2.177.200 に対する逆引きマップがそもそも
in-addr.arpa ゾーンに存在しなければ、
サーバは決して名前を見つけることができませんから、
206.2.177.200 そのものを *.no, *.se, *.dk と比較します。
もちろんマッチするわけがありません。
逆引きマップが重要なのはサーバだけだ、という人や、 そもそも逆引きマップなんて全然大事じゃないんだ、 なんていう人がいるかもしれません。 これは間違いです。 多くの ftp, news, IRC サーバでは逆引きのできないマシンからの接続を拒否します (WWW サーバにさえ拒否するものもあります)。 ですからマシン名の逆引きマップは実のところは必須なのです。