ゾーンファイルの書き方について教えてください

佐藤 新太(JPRS)
2003/12/17

 ゾーンファイルとは、あるゾーンに関する情報がすべて記載されたファイルで、そのドメインの管理者によって作成されます。このファイルの内容は、プライマリとなるコンテンツサーバによって読み込まれ、必要に応じて、セカンダリのネームサーバに転送されます。

 ゾーンファイルの中身は、リソースレコードの集合です。ヘッダに当たる部分と、それ以外のリソースレコード群で構成されます。

 まずヘッダには、そのゾーン自体の情報を記載します。ここには、SOAレコードから始まり、そのゾーンのオーソリティを持つネームサーバと、その他追加情報が入ります。

 続いて、ゾーンに属するドメイン名のリソースレコードが必要なだけ記載されます。また、このゾーンからさらに委任しているサブドメインに関する情報も記載されます。

 これらの情報はすべてゾーン内のリソースレコードとして、1行に1つずつ書きます。それぞれの行は以下の構成を取ります。

www.example.jp 3600 IN A 61.120.151.84
ラベル
TTL
クラス
タイプ
リソースデータ
例1 リソースレコードの行に含まれる情報

 この中で、「クラス」にはいくつかの種類が存在しますが、「IN」(Internet) 以外を利用することはまずありません。また、リソースデータはタイプの違いにより複数の値が必要な場合があります。例えば「SOA」なら7つの値が、「MX」ならば2つの値が必要になります。

 以下にBINDによるゾーンファイルの書き方を具体的に説明します。BIND以外の実装のネームサーバの場合は、ゾーンに含まれるデータは同じでもゾーンファイルの書き方は異なるものとなりますので、注意してください。

 example.jp のゾーンファイルを例2に示します。example.jp.で始まる行がヘッダに当たる部分で、それに続いてns1.example.jp.等のexample.jpドメインに属する情報が記載されています。

 この例ではリソースレコードが省略なくすべて記載されています。実際に管理者が作成するゾーンファイルではもっと省略された書き方をします。

  example.jp.     3600    IN SOA  ns1.example.jp. (
                                  postmaster.example.jp.
                                  2003031401      ; Serial
                                  3600            ; Refresh
                                  900             ; Retry
                                  604800          ; Expire
                                  3600 )          ; Negative cache TTL
  example.jp.     3600    IN NS   ns1.example.jp.
  example.jp.     3600    IN NS   ns2.example.jp.
  example.jp.     3600    IN MX   10 mx1.example.jp.
  example.jp.     3600    IN A    61.120.151.84
  ;
  ns1.example.jp. 3600    IN A    61.120.151.82
  ns2.example.jp. 3600    IN A    202.11.16.212
  mx1.example.jp. 3600    IN A    61.120.151.83
  www.example.jp. 3600    IN A    61.120.151.84
例2 example.jpのゾーンファイル (1)

 ゾーンファイルの省略記法としてはまず、ラベルやTTLの省略があります。

A)前行と同じラベルで始まる行は、ラベルを省略できる。
B)デフォルトTTLと同じTTLは省略できる。デフォルトTTLは$TTLで始まる行で指定する。

 これを使うと、上のゾーンファイルは次のように書き直せます。

  $TTL    3600 ; Default TTL   example.jp.             IN SOA  ns1.example.jp. (
                                  postmaster.example.jp.
                                  2003031401      ; Serial
                                  3600            ; Refresh
                                  900             ; Retry
                                  604800          ; Expire
                                  3600 )          ; Negative cache TTL
                          IN NS   ns1.example.jp.                           IN NS   ns2.example.jp.
                          IN MX   10 mx1.example.jp.
                          IN A    61.120.151.84
  ;
  ns1.example.jp.         IN A    61.120.151.82
  ns2.example.jp.         IN A    202.11.16.212
  mx1.example.jp.         IN A    61.120.151.83
  www.example.jp.         IN A    61.120.151.84
例3 example.jp のゾーンファイル (2)

 次に、ドメイン名の省略です。

C)ORIGINと同じドメイン名は省略できる。ORIGINの値は$ORIGINで始まる行で指定する。

明示的にORIGINを指定しない場合、そのゾーンファイルのドメイン名自体が暗に指定されます。

  • ORIGIN と全く同じドメイン名は「@」で記載する。
    (例: example.jp.→ @)
  • ORIGIN の前にホスト名が付く場合は、そのホスト名を記載し、最後に 「.」を付けない。
    (例: www.example.jp.→www)


 つまり、ドメイン名の最後に「.」を付けるとFQDNとして解釈され、「.」を付けずに書くとORIGINの内容が末尾に付くことになります。

 「.」の付け忘れはゾーンファイルを書くときによく発生してしまうミスの1つです。例えば example.jpのネームサーバとしてns1.example.jpを指定しようと、次のように記載すると、

    example.jp.     3600    IN NS   ns1.example.jp

 ns1.example.jpは「.」がないので FQDNではないと解釈されるため、BINDは次のように解釈します(ORIGIN がexample.jpの場合) 。

    example.jp.     3600    IN NS   ns1.example.jp.example.jp

 このようなミスがあると、lame状態 (*1) を作り出してしまうこともあり、注意が必要です。(*1『ゾーンがlame」ってどういう意味?』参照)

 このドメイン名の省略を適用すると、次のように書き換えることができます。

  $TTL    3600 ; Default TTL
  $ORIGIN example.jp.
  @                       IN SOA  ns1 (
                                  postmaster
                                  2003031401      ; Serial
                                  3600            ; Refresh
                                  900             ; Retry
                                  604800          ; Expire
                                  3600 )          ; Negative cache TTL
                          IN NS   ns1
                          IN NS   ns2
                          IN MX   10 mx1
                          IN A    61.120.151.84
  ;
  ns1                     IN A    61.120.151.82
  ns2                     IN A    202.11.16.212
  mx1                     IN A    61.120.151.83
  www                     IN A    61.120.151.84
例4  example.jp のゾーンファイル (3)

 ゾーンファイルとして実際に管理者が作成するのは、上記のような内容になります。

 ここで説明した省略記法以外にも、$GENERATE等のいくつかの省略記法がありますので、興味がある人はBINDのマニュアルを読んでみるとよいでしょう。

関連記事 ゾーンがlame」ってどういう意味?

DNS Tips Index

「Master of IP Network総合インデックス」


Master of IP Network フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Master of IP Network 記事ランキング

本日 月間