WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

DNS サーバーの構築 : 正引きゾーンファイルの作成

今日は正引きゾーンファイルの作成について書こうと思います。正引きゾーンファイルはホスト名から IP アドレスへのマッピングを定義するファイルで、DNS の中核とも呼べるものです。最初に書くのは少し面倒ですが、雛形ができてしまえばホストを増やしていくのは簡単です。気合を入れていきましょう!(`・ω・´)シャキーン

リソースレコードについて

ゾーンファイルは、基本的に以下の形式のリソースレコードと呼ばれる情報が並んだテキストファイルです。このリソースレコードを理解すれば、ゾーンファイルの記述方法をほぼ把握できるといっていいでしょう。

[owner] [ttl] IN <type> <value>
owner
そのリソースで定義するホスト名や IP アドレスを指定します。直前のリソースと同じものが指定されたとみなします。
ttl
そのレコードの有効期限(Time To Live)。キャッシュなどの有効期限と考えてよいと思います。普通は省略され、$TTL ディレクティブ(後述)の値が使用されます。
type
リソースレコードで定義している情報の種類です。詳細は後述。
value
owner にマッピングされる情報です。どのような情報を記述するかは type によって異なります。

type に指定できるレコードのうち、代表的なものは以下のとおりです。

type正式名称定義する情報
SOAStart of Authorityそのゾーンの管理情報
NSName ServerDNS サーバーの名称
MXMail Exchangerメール処理を行うホスト名
AAddressホスト名から IP アドレスへのマッピング
PTRDomain Name PointerIP アドレスからホスト名へのマッピング
CNAMECanonical Nameホストの別名
TXTText本来コメントはコメントですが、DomainKeys などの公開鍵を格納するのに応用されています

以下にそれぞれのレコードの記述方法を説明します。

SOA レコード

記述するのが一番面倒なレコードです。以下のような書式になっています。

[owner] IN SOA <host> <mail> (<serial> <refresh> <retry> <expire> <minimum>)
owner
このレコードで記述するゾーンを指定します。通常は、後述する略記法で "@" とだけ記述してます。
host
DNS サーバーの動いているホスト名を指定します。
mail
DNS サーバーの管理者のメールアドレスを、"@""."(ピリオド)に置き換えて指定します。
serial
ゾーンファイルのバージョンを表す値を指定します。ゾーンファイルを書き換えた際は、必ずこの値を増加させます。日付などで数値を構成するのが通例のようです。
refresh
スレーブサーバーがゾーンファイルの同期を取る間隔|
retry
ゾーンファイルの同期に失敗した場合に、再試行する間隔|
expire
転送されたゾーンデータベースの有効期限|
minimum
各リソースレコードの TTL の最小値|

時間を指定するパラメータは、すべて秒単位です。

NS レコード

そのゾーンを担当している DNS サーバーのホスト名を指定します。書式は以下のようになっています。

[owner] IN NS <host>
owner
DNS サーバーを定義するゾーンを指定します。
host
DNS サーバーのホスト名を指定します。

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 を実際に稼動させます。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles