でもまず最初に理論
DNS は階層的なツリー構造のシステムです。
その頂点は `.' と記述され、 (ツリー型データ構造での慣例に従い) 「ルート
(root)」と発音されます。
`.' の下にはたくさんの Top Level Domain (TLD) があります。
ORG, COM, EDU, NET
などが有名ですが、他にもたくさんあります。
いまホスト prep.ai.mit.edu. のアドレスを見つけたいとしましょう。
すると自分のネームサーバはどこかに問い合わせを行う必要があります。
まずキャッシュにないかどうか探します。
キャッシュに答がなかった場合は、ネームサーバは名前の左側の部分を消して、自分が
ai.mit.edu., mit.edu., edu.
について知っているかチェックします。
これらを知らないと、ネームサーバは .(ルート) のサーバに
prep.ai.mit.edu に関する問い合わせを行います。
この . サーバは直接の答は知らないでしょうが、問い合わせたサーバに参照先を提示し、
次にどこに聞けばいいかを教えてくれます。
この参照先提示は次々に行われ、自分のネームサーバは答を知っているネームサーバにまで導かれます。
自前の DNS サーバがあれば、他のネームサーバを使わなくても、たどっていく段階で見つけた情報をすべてキャッシュし、 しばらくは再び尋ねなくても良いようにしてくれます。
自分のドメインを作る
さて、ドメイン linux.bogus を作り、そこに自分たちのマシンを定義しましょう。
ホスト名に使える文字には制限があります。英語のアルファベット a-z、数字 0-9、および '-' (ダッシュ)
文字だけが使えます。守るようにしてください。
実は最初に行うべき部分はすでに記述済みです。 named.conf には以下のような行がありますよね。
zone "0.0.127.in-addr.arpa" {
type master;
file "pz/127.0.0";
};
上記の内容から、これから私たちはゾーン 0.0.127.in-addr.arpa を定義すること、
そしてこの named がそのゾーンのマスターサーバになること、またその内容がファイル pz/127.0.0
に保存されることなどがわかります。このファイルはすでに設定済みで、以下のような内容のはずです。
$TTL 3D
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
1 ; Serial
8H ; Refresh
2H ; Retry
4W ; Expire
1D) ; Minimum TTL
NS ns.linux.bogus.
1 PTR localhost.
ゾーンファイルの origin (このゾーンが属する DNS の階層) は named.conf のゾーンセクションで指定されます。
この場合は 0.0.127.in-addr.arpa です。
この「ゾーンファイル」には三つの「リソースレコード (resource record: RR)」が含まれています。 SOA RR, NS RR, PTR
RR です。
SOA は Start Of Authority の省略です。
`@' は特別な記号で、 origin を意味します。
このファイルの
`domain' カラムは 0.0.127.in-addr.arpa ですから、最初の行の実際の意味は以下と同じになります。
0.0.127.in-addr.arpa. IN SOA ...
NS は Name Server RR の略です。
この行の先頭には `@' がありません。これは暗黙のうちにすでに指定されたことになっています。直前の行が
`@' ではじまっていたからです。したがって NS の行は以下のようにも記述できることになります。
0.0.127.in-addr.arpa. IN NS ns.linux.bogus
この行は DNS に、どのマシンがこのドメイン 0.0.127.in-addr.arpa のネームサーバであるかを教えます。
ns.linux.bogus というわけですね。
`ns' というのはネームサーバに良く用いられる名前ですが、これは web サーバに
www.something という名前が付けられるのと似たようなものです。
最後に PTR (Domain Name Pointer) レコードが、サブネット 0.0.127.in-addr.arpa
のアドレス 1 のホスト、すなわち 127.0.0.1 が localhost という名前であることを示しています。
SOA レコードはどんなゾーンファイルでも先頭に置かれます。
また各ゾーンファイルにつき一つ、先頭に (ただし $TTL 指定のあとに) 書きます。
このレコードはゾーンの説明です。どこから得られるのか
(ns.linux.bogusというマシン)、内容に関する責任者は誰か
(hostmaster@linux.bogus: 電子メールアドレス)、
ゾーンファイルのバージョンはいくつか (シリアル番号: 1)、
その他関連した内容などを書きます。
残りのフィールド (refresh, retry, expire, minimum) については、この値をそのまま使えば特に問題ないでしょう。
SOA の前には、$TTL 3D と書かれた行があります。これはすべてのゾーンファイルに書いてください。
では、この点を押さえて新たなゾーンファイルを書きましょう。以下のようになります。
;
; Zone file for linux.bogus
;
; The full zone file
;
$TTL 3D
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; serial, todays date + todays serial #
8H ; refresh, seconds
2H ; retry, seconds
4W ; expire, seconds
1D ) ; minimum, seconds
;
TXT "Linux.Bogus, your DNS consultants"
NS ns ; Inet Address of name server
NS ns.friend.bogus.
MX 10 mail ; Primary Mail Exchanger
MX 20 mail.friend.bogus. ; Secondary Mail Exchanger
localhost A 127.0.0.1
gw A 192.168.196.1
TXT "The router"
ns A 192.168.196.2
MX 10 mail
MX 20 mail.friend.bogus.
www CNAME ns
donald A 192.168.196.3
MX 10 mail
MX 20 mail.friend.bogus.
TXT "DEK"
mail A 192.168.196.4
MX 10 mail
MX 20 mail.friend.bogus.
ftp A 192.168.196.5
MX 10 mail
MX 20 mail.friend.bogus.
逆引きゾーン
今やプログラムは、 linux.bogus にある名前を、実際に接続すべきアドレスに変換できるようになったわけです。
でも逆引きのゾーンも必要です。
これは DNS でアドレスを名前に変換できるようにするためのものです。
この名前はさまざまな種類のたくさんのサーバ (FTP, IRC, WWW などなど) において、こちらとの通信を認めるか、
また認めた場合、どの程度の優先性を付与するかなどの判断に用いられます。
以下を named.conf に記述してください。
zone "196.168.192.in-addr.arpa" {
type master;
notify no;
file "pz/192.168.196";
};
これは 0.0.127.in-addr.arpa とまったく同じです。中身も同じようになります。
$TTL 3D
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; Serial, todays date + todays serial
8H ; Refresh
2H ; Retry
4W ; Expire
1D) ; Minimum TTL
NS ns.linux.bogus.
1 PTR gw.linux.bogus.
2 PTR ns.linux.bogus.
3 PTR donald.linux.bogus.
4 PTR mail.linux.bogus.
5 PTR ftp.linux.bogus.