でもまず最初に理論
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.