ゾーンデータファイルのチェックツール

named-checkzone
  • チェックしたいゾーンのドメイン名とゾーンデータファイルの名称を指定
$ /usr/local/sbin/named-checkzone example.com. /var/named/example.com.zone
NSLINT
  • ローカルにあるBIMDのゾーンデータファイルをチェックするツール
    • ftp://ftp.ee.lbl.gov/ からnslint.tar.gzを入手
    • インストール後nslintと入力すると/etc/named.confファイルから各ゾーンデータファイルの情報を取得し、それらの内容をチェックする
    • BIMDが動作している必要はない
# nslint

***dnswalk

  • 指定したゾーンデータをゾーン転送によって取得し、その内容をチェックするツール

http://sourceforge.net/projects/dnswalk/ から入手

    • インストールにはNet::DNS PerlモジュールとPerl IOモジュールが必要
$ ./dnswalk -Fl example.com.

ゾーンデータファイルの例

$TTLステートメントでデフォルトのTTLを指定し、起点ドメイン名(ownerに@を指定)に対してSOAレコードとNSレコードを指定する

起点ドメイン名に対して、MXレコードやAレコードは記述することができる
起点ドメイン名に対して、CNAMEレコードは記述できない

$TTL 86400
@    IN    SOA    ns1.example.com. admin.example.com. (
                  2011011400    ;シリアル番号
                  28800         ;リフレッシュ間隔(秒)
                  7200          ;リトライ間隔(秒)
                  604800        ;ゾーンの有効期間(秒)
                  3600          ;ネガティブキャッシュの有効期間(秒)
                  )
     IN    NS      ns1            ;このゾーンのプライマリマスタ
     IN    NS      ns2            ;このゾーンのセカンダリマスタ
     IN    MX      10    mx1      ;プライマリメールサーバ
     IN    MX      20    mx2      ;セカンダリメールサーバ
     IN    A       192.168.1.30   ;Webサーバのアドレス
ns1  IN    A       192.168.1.30
ns2  IN    A       192.168.1.10
mx1  IN    A       192.168.1.30
mx2  IN    A       192.168.1.10
www  IN    CNAME   example.com.           ;Webサーバの別名

起点ドメイン名のAレコードとして、Webサーバのアドレス(192.168.1.30)をしていし、wwwを起点ドメイン名(example.com)の別名として指定している。

このようにしておくと、http://www.ecample.com/とhttp://example.com/のどちらでもWebサーバに接続することができる

リソースレコードを指定するときのチェックポイント

1.NSレコードで指定するネームサーバとMXレコードで指定するメールサーバの名称は別名ではなく正規名で指定する

【間違った設定】

@          IN     NS       ns1          ;ns1はseikimeiの別名
ns1        IN     CNAME    seikimei
seikimei   IN     A        192.168.1.30

【正しい設定】

@          IN     NS       seikimei     ;正規名であるseikimeiを指定
seikimei   IN     A        192.168.1.30

2.CNAMEレコードを連鎖させない

【間違った設定】

www         IN    CNAME    foo          ;fooはseikimeiの別名
foo         IN    CNAME    seikimei
seikimei    IN    A        192.168.1.30

【正しい設定】

www         IN    CNAME    seikimei     ;正規名であるseikimeiを指定
foo         IN    CNAME    seikimei     ;正規名であるseikimeiを指定
seikimei    IN    A        192.168.1.30

3.同じownerに対して、CNAMEレコードと他のリソースレコードを重複して記述しない

【間違った設定】

$ORIGIN example.com.
@    IN    NS       ns1
     IN    CNAME    www          ;ownerがNSレコードと同じ
www  IN    A        192.168.1.30

【正しい設定】

$ORIGIN example.com.
@    IN    NS       ns1
www  IN    A        192.168.1.30
www  IN    CNAME    exmple.com.

4.同一ドメインに対する親ゾーンと子ゾーンのNSレコードの内容を一致させる

サブドメインの管理をNSレコードによって他のいくつかのネームサーバに委任している場合は、子ゾーンでも、それらのネームサーバがそのゾーンを管理していることをNSレコードによって指定しなければならない。
これをしないと、親ゾーンから管理を委任されているネームサーバが、そのゾーンに対して権威を持っていない状態になってしまい、不要なトラフィックが生じたり、名前解決に失敗したりすることがある。

【親ゾーン(comゾーン)】

$ORIGIN com.
example    IN    NS    ns1.example.com.
           IN    NS    ns2.example.com.
;子ゾーンとNSレコードの内容が同じ

【子ゾーン(example.comゾーン)】

$ORIGIN example.com.
@    IN    NS    ns1.example.com.
     IN    NS    ns2.example.com.
;親ゾーンとNSレコードの内容が同じ

5.FQDNで記述する場合は、最後に.(ピリオド)をつけることを忘れないようにする

代表的なリソースレコードの書式

SOAレコード

SOA*1レコードはゾーンデータの最初に一つだけ指定
SOAレコードの書式
[owner] [ttl] [class] SOA [source-dname] [mbox] (
              [serial] [refresh] [retry] [expire] [minimum] )
  • owner
    • ゾーンのドメイン名を指定
    • 通常は@を指定、起点名が設定される
  • source-dname
    • ゾーンの権威を持っているプライマリマスタサーバのホスト名
  • mbox
    • ゾーンの管理者のメールアドレス
    • メールアドレスの@を.(ピリオド)に変更する
    • @の前に.がある場合には、\(バックスラッシュ)に変更する
admin@exmaple.comはadmin.example.comになる
no001.admin@example.comはno001\.admin.example.comになる
  • serial
    • ゾーンデータのシリアル番号
    • シリアル番号の形式はYYYYMMDDNN (YYYYは年、MMは月、DDは日、NNはその日のリビジョン番号)
  • refresh
    • プライマリマスタサーバのゾーンデータのシリアル番号をセカンダリマスタサーバがチェックする間隔
  • retry
    • セカンダリマスタサーバがゾーンデータのチェックに失敗した場合のリトライ間隔を秒単位で指定
  • expire
    • ゾーンデータの有効期間を秒単位で指定
    • セカンダリマスタサーバがプライマリマスタサーバにこの期間アクセスできない場合は、ゾーンデータを無効にしなければならない
  • minimum
    • ネガティブキャッシュの有効期間を秒単位で指定

Aレコード

A(Address)レコードはホスト名に対応するIPアドレスを指定
Aレコードの書式
[owner] [ttl] [class] A [address]
  • owner
    • ホスト名(正規名)を指定
  • address
    • ホストのIPv4アドレスを指定
  • 同じownerに対して、IPアドレスの違うAレコードを複数指定することができる(問い合わせ元に複数のIPアドレスを返す)

CNAMEレコード

CNAME*2レコードはホスト名の別名(エイリアス)を指定
CNAMEレコードの書式
[owner] [ttl] [class] CNAME [canonical-name]
  • owner
    • 別名
  • canonical-name
    • ホストの正規名
    • canonical-nameに指定したホストがそのゾーンに属している場合には、その正規名のAレコードも同じゾーンデータファイルで指定する必要がある
www IN CNAME seikimei
seikimei IN A 192.168.1.30

NSレコード

NS*3レコードはドメインに関して権威のあるネームサーバを指定
NSレコードの書式
[owner] [ttl] [class] NS [name-server-dname]
  • name-server-dname
    • owenerで記述されたドメインを管理する権限を与えたネームサーバのホスト名(正規名)を指定
    • 通常は、ゾーンを管理するネームサーバは複数あるので同じownerに対して複数のNSレコードがある
    • 下位ドメインの管理をNSレコードで、他のネームサーバに委任した場合は、そのネームサーバのAレコードも指定する
      • このAレコードをグルーレコード(glue record)という
      • 下位ドメインで管理しているリソースレコードへ問い合わせがあった場合は、その下位ドメインに関するすべてのNSレコードと、そのネームサーバに関するグルーレコード(Aレコード)を返却して、そちらに問い合わせるように指示する
foo.example.com.     IN    NS    ns.foo.example.com.
ns.foo.example.com.  IN    A    192.168.10.10

MXレコード

MX*4レコードはメールの配送先となるメールサーバを指定
MXレコードの書式
[owner] [ttl] [class] MX [preference] [exchange-dname]
  • preference
    • メールサーバの優先度(数字が小さいほうが優先)
  • exchange-dname
    • メールサーバのホスト名(正規名)

*1:Start of Authority:権威開始

*2:Canonical Name:正規名

*3:Name Server

*4:Mail Exchanger

リソースレコード

リソースレコードの基本的な形式

[owner] [ttl] [class] [type] [rdata]
  • owner
    • リソースレコードに関するホスト名などを指定
    • 行の先頭にタブやスペースなどがあると、ownerを省略したことになり、直前のリソースレコードで指定したownerが設定される
  • ttl
    • リソースレコードがローカルネームサーバなどでキャッシュされた場合の有効期間を秒単位で指定
    • 省略した場合は、$TTLステートメントで指定したTTLが設定される
  • class
    • ネットワーククラスを指定
    • インターネットではIN
    • 実際にはIN以外には使用されていない
    • 省略した場合には、自動的にINが設定される
  • type
    • リソースレコードのタイプを指定する

よく使われるリソースレコードのタイプ

タイプ 内容
SOA 権威の開始
NS ドメインを管理するネームサーバ
A ホストのIPv4アドレス
CNAME 別名(エイリアス)
PTR ホスト名へのポインタ(逆引き用)
MX メールの送付先となるメールサーバ
  • rdata
    • リソースレコードのタイプによって異なる

制御ステートメント

$ORIGINステートメント

$ORIGIN ドメイン名 ;このドメイン名のことを起点名という

通常はゾーンのドメイン名が起点名として設定されているので、ゾーンデータファイルの最初に$ORIGINステートメントを記述する必要はない

$INCLUDEステートメント

$INCLUDE ファイル名
;指定したファイルの内容を挿入

$TTL*1ステートメント

$TTL キャッシュの有効期間
;秒単位で指定する

リソースレコード内でTTLを指定しなかった場合、このTTLが設定される

*1:Time To Live

ゾーンデータファイル

ゾーンデータファイルの中身は$で始まる制御ステートメントとリソースレコード
;(セミコロン)をつけると、行末までコメントアウト
ホストのFQDNを記述する場合はFQDNの最後に.(ピリオド)をつける

  • .(ピリオド)がつかない場合は$ORIGINで指定したドメイン名(起点名)が付く