DNS サーバーの構築 : 正引きゾーンファイルの作成
今日は正引きゾーンファイルの作成について書こうと思います。正引きゾーンファイルはホスト名から IP アドレスへのマッピングを定義するファイルで、DNS の中核とも呼べるものです。最初に書くのは少し面倒ですが、雛形ができてしまえばホストを増やしていくのは簡単です。気合を入れていきましょう!(`・ω・´)シャキーン
リソースレコードについて
ゾーンファイルは、基本的に以下の形式のリソースレコードと呼ばれる情報が並んだテキストファイルです。このリソースレコードを理解すれば、ゾーンファイルの記述方法をほぼ把握できるといっていいでしょう。
[owner] [ttl] IN <type> <value>
- owner
- そのリソースで定義するホスト名や IP アドレスを指定します。直前のリソースと同じものが指定されたとみなします。
- ttl
- そのレコードの有効期限(Time To Live)。キャッシュなどの有効期限と考えてよいと思います。普通は省略され、$TTL ディレクティブ(後述)の値が使用されます。
- type
- リソースレコードで定義している情報の種類です。詳細は後述。
- value
- owner にマッピングされる情報です。どのような情報を記述するかは type によって異なります。
type に指定できるレコードのうち、代表的なものは以下のとおりです。
type | 正式名称 | 定義する情報 |
---|---|---|
SOA | Start of Authority | そのゾーンの管理情報 |
NS | Name Server | DNS サーバーの名称 |
MX | Mail Exchanger | メール処理を行うホスト名 |
A | Address | ホスト名から IP アドレスへのマッピング |
PTR | Domain Name Pointer | IP アドレスからホスト名へのマッピング |
CNAME | Canonical Name | ホストの別名 |
TXT | Text | 本来コメントはコメントですが、DomainKeys などの公開鍵を格納するのに応用されています |
以下にそれぞれのレコードの記述方法を説明します。
SOA レコード
記述するのが一番面倒なレコードです。以下のような書式になっています。
[owner] IN SOA <host> <mail> (<serial> <refresh> <retry> <expire> <minimum>)
- owner
- このレコードで記述するゾーンを指定します。通常は、後述する略記法で "@" とだけ記述してます。
- host
- DNS サーバーの動いているホスト名を指定します。
- DNS サーバーの管理者のメールアドレスを、"@" を "."(ピリオド)に置き換えて指定します。
- serial
- ゾーンファイルのバージョンを表す値を指定します。ゾーンファイルを書き換えた際は、必ずこの値を増加させます。日付などで数値を構成するのが通例のようです。
- refresh
- スレーブサーバーがゾーンファイルの同期を取る間隔|
- retry
- ゾーンファイルの同期に失敗した場合に、再試行する間隔|
- expire
- 転送されたゾーンデータベースの有効期限|
- minimum
- 各リソースレコードの TTL の最小値|
時間を指定するパラメータは、すべて秒単位です。
NS レコード
そのゾーンを担当している DNS サーバーのホスト名を指定します。書式は以下のようになっています。
[owner] IN NS <host>
MX レコード
そのドメイン宛のメールを処理するメールサーバーを指定します。書式は以下のようになっています。
[owner] IN MX <priority> <host>
- owner
- メールサーバーが担当するゾーンを指定します。
- priority
- メールサーバーの優先順位です。複数の MX レコードが指定された場合、priority の値が小さいものが優先されます。
- host
- メールサーバーのホスト名を指定します。
A レコード
ホスト名から IP アドレスへのマッピングを定義します。A レコードによるホスト名と IP アドレスのマッピングはユニークでなければなりません。ホストの別名を定義する際は、後述の CNAME レコードを使用します。
[owner] IN A <address>
- owner
- IP アドレスを定義するホスト名を指定します。|
- address
- ホスト名に対応する IP アドレスを指定します。|
PTR レコード
IP アドレスからホスト名へのマッピングを定義します。正引きゾーンファイルでは使用しませんが、明日、作成予定の逆引きゾーンファイルで使用します。
[address] IN PTR <host>
- address
- ホスト名を定義する IP アドレスを指定します。ここはゾーン名と同様に "1.0.168.192.in-addr.arpa" のような記法で指定します。
- host
- IP アドレスに対応するホスト名を指定します。
CNAME レコード
ホストの別名を定義します。たとえば、"mail.sourcewalker.com" を "ns.sourcewalker.com" という名前でもアクセスしたい場合に使用します。
[cname] IN CNAME <host>
- cname
- 定義する別名を指定します。
- host
- A レコードで定義された本当のホスト名を指定します。
その他の記述
リソースレコード以外にも若干補足的な記述があります。
ディレクティブ
ゾーンファイルには、リソースレコードのほかに「ディレクティブ」と呼ばれる特別な記述を含めることができます。$ で始まる行がディレクティブです。以下が良く使用されるディレクティブです。
$ORIGIN | "named.conf" で指定されたゾーン名をオーバーライドします。 |
$TTL | リソースレコードの有効期限(Time To Live)のデフォルト地を指定します。 |
$INCLUDE | 他のファイルの内容を挿入します。 |
ホスト名・IPアドレスの略記法
ゾーンファイルでは、FQDN でホスト名を指定する際は "mail.sourcewalker.com." のように最後に "."(ピリオド)を付加します。これに対して、単に "mail" とだけ書いた(最後にピリオドがない)場合、"named.conf" の zone コマンドで指定されたゾーン名が暗黙的に付加されます。もし $ORIGIN ディレクティブでオーバーライドされていた場合は、そちらが有効になります。
なお、"@" とだけ指定すると、ゾーン名そのものが指定されたとみなされます。
正引きゾーンファイルの作成
ここまででゾーンファイルの記述方法はだいたい想像が付いてきたと思います。以下に今回使用した正引きゾーンファイルを示し、若干補足していきます。なお、ゾーンファイルは必ず "named.conf" 内で該当する zone コマンドの file 行で指定されたファイル名で作成してください。今回の場合は、"/var/bind/pri/sourcewalker.com.zone" ですね。
$TTL 60 @ IN SOA mail root.mail { 2006010100 ; Serial 28800 ; Refresh 14400 ; Retry 604800 ; Expire - 1 week 60 ) ; Minimum IN A 192.168.0.2 IN NS ns IN MX 10 mail localhost IN A 127.0.0.1 gateway IN A 192.168.0.1 mail IN A 192.168.0.2 ap IN CNAME gateway ns IN CNAME mail
最初の行で "$TTL 60" を指定しています。LAN 内でしか使わないので、かなり小さめの値にしていることに注意してください。広い範囲に公開する場合は、もっと大きな値にすべきです。
その後、SOA レコードの owner に @ を指定していますが、これは前述のようにゾーン名そのものを表しています。今回の場合 "sourcewalker.com" ですね。それに続く A レコード、NS レコード、MX レコードは owner が省略されているので、@、つまり "sourcewalker.com" が指定されたものとして扱われます。
ちなみに、ドメイン名である "sourcewalker.com" にも IP アドレスを定義していますが、これはドメイン名のみで問い合わせを受けたときに返答するアドレスです。よく、Web ブラウザで "sourcewalker.com" にアクセスすると "www.sourcewalker.com" と同じページが表示されたりしますが、そのような機能を提供するものです。
その後は、ホスト名を IP アドレスのマッピングを A レコード、CNAME レコードで定義しています。ホスト名の最後に .(ピリオド)を付けなければ、デフォルトのゾーン名が付加されることを思い出してください。
なお、今後ゾーンファイルを書き換えたら、SOA レコードの Serial の値を増加させることを忘れないでください。これを怠ると、他の DNS サーバーがキャッシュした値が更新されません。もっとも、マスターのみの構成ではあまり関係ありませんが・・・(^^;
文法チェック
ゾーンファイルも文法チェックのコマンドが用意されています。以下のコマンドを実行して、文法が正しければ「OK」と表示されます。
named-checkzone sourcewalker.com /var/bind/pri/sourcewalker.com.zone
以上で正引きゾーンファイルができました。明日、逆引きゾーンファイルを作成して、BIND を実際に稼動させます。
詳しくはこちらの記事をどうぞ!
この記事にコメントする