DNS 設定の最初の一歩。 ダイアルアップのユーザにはとっても便利です。
キャッシュ専用のネームサーバとは、名前引きの結果を記憶 (キャッシュ) しておき、次回の問い合わせの時にその記憶を使って答えるものです。 次回からの問い合わせに対する応答は (特に遅い回線を使っている場合には) 非常に速くなります。
まず最初に /etc/named.conf
というファイルが必要です。
named は起動するとまずこのファイルを読み込みます。
現在のところは、以下のような簡単なものでよいでしょう。
// Config file for caching only name server options { directory "/var/named"; // Uncommenting this might help if you have to go through a // firewall and things are not working out: // query-source port 53; }; zone "." { type hint; file "root.hints"; }; zone "0.0.127.in-addr.arpa" { type master; file "pz/127.0.0"; };
directory
の行は、 named が参照するファイルの置き場所を
指定するものです。これ以降の全てのファイル名はここからの相対パスとなります。
すなわちディレクトリ pz
は /var/named
以下にあり、
フルパスで表記すれば /var/named/pz
ということになります。
/var/named
は Linux Filesystem Standard に準拠した正
しいディレクトリ名です。
/var/named/root.hints
というファイルの名前は
ここで付けられています。
/var/named/root.hints
ファイルの内容は
以下のようにしておきます。
(この文書の電子版からこのファイルをカットアンドペースト
する場合は、実際のファイルでは先頭にスペースが入っては
いけないことに注意してください。
言い換えると、全ての行が空白以外の文字ではじまっていなければいけません。
文書処理ソフトによっては、行の最初にスペースを入れてしまうことがあるので、
ちょっと困ることがあります。
その場合は先頭のスペースを取り除いて使ってください)
; ; There might be opening comments here if you already have this file. ; If not don't worry. ; . 6D IN NS G.ROOT-SERVERS.NET. . 6D IN NS J.ROOT-SERVERS.NET. . 6D IN NS K.ROOT-SERVERS.NET. . 6D IN NS L.ROOT-SERVERS.NET. . 6D IN NS M.ROOT-SERVERS.NET. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.ROOT-SERVERS.NET. . 6D IN NS B.ROOT-SERVERS.NET. . 6D IN NS C.ROOT-SERVERS.NET. . 6D IN NS D.ROOT-SERVERS.NET. . 6D IN NS E.ROOT-SERVERS.NET. . 6D IN NS I.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4 J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10 K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33 A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53 B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107 C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12 D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90 E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10 I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17 F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241
このファイルには世界中のルートネームサーバを記述します。 これは時間とともに変化していくので、それに対応して更新させる 必要があります。更新方法は メンテナンス の章を見てください。
named.conf
の次のセクションは最後の zone
です。
この利用法については後の章で述べるつもりですので、今のところは
以下のような内容のファイルを pz
サブディレクトリに
127.0.0
という名前で作っておいてください。
(ここでもカットアンドペーストするときには先頭のスペースを
取り除くようにしてください)
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 8H ; Refresh 2H ; Retry 1W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost.
次に、以下のような内容の /etc/resolv.conf
が必要です。
search subdomain.your-domain.edu your-domain.edu nameserver 127.0.0.1
`search
' で始まっている行は、問い合わせされたホストを
探すドメインを指定します。`nameserver
'で
始まる行は、ネームサーバのアドレスを指定するものです。
今は自分のマシンでネームサーバを動かすので、ローカルホストを指定します。
(注: named はこのファイルを参照しません。参照するのはレゾルバです。)
このファイルの意味を説明しましょう。クライアントが foo
の名前引きを行うと、まず最初に foo.subdomain.your-domain.edu
を調べ、次に foo.your-domain.edu
を試し、最後に foo
を調べます。また sunsite.unc.edu
の名前引きを
行うと、 sunsite.unc.edu.your-domain.edu
、
sunsite.unc.edu.your-domain.edu
、
sunsite.unc.edu
の順に調べます。 search 行に
あまり多くのドメインを書くと、全てを調べるのに時間がかかるようになるので、
ほどほどにしておくのが良いでしょう。
この例ではあなたのマシンが subdomain.your-domain.edu
にあるとしていますので、あなたのマシンの名前はおそらく
your-machine.subdomain.your-domain.edu
となっているでしょう。
なお search 行にはあなたの TLD (Top Level Domain, この場合は `edu
')
を含めるべきではありません。頻繁に接続するような特定のドメイン
があれば、以下のように search 行にそのドメインを加えてもいいでしょう。
(先頭にスペースがあったら取り去るのを忘れないように。)
search subdomain.your-domain.edu your-domain.edu other-domain.com
もちろん実際には本当のドメイン名を書く必要があります。 ドメイン名の最後にはピリオドを書かないことに注意してください。 これは重要なポイントです。ドメイン名の最後にはピリオドを書かない ことに注意してください。
次に /etc/nsswitch.conf
または /etc/host.conf
のいずれかを変更します。どちらを変更するかは使っている libc の
バージョンに依存します。すでに nsswitch.conf
があるような
場合はそちらを変更しましょう。なければ host.conf
を
変更しましょう。
/etc/nsswitch.conf
これは大きなファイルで、いろいろな種類のデータに対して、
それぞれどのファイルから、あるいはどのデータベースから取得するかを
指定するものです。通常はためになるコメントが先頭に書かれています。
読んでおくといいでしょう。読み終わったら、
`hosts:
' で始まる行を見つけてください。以下のようなものです。
hosts: files dns
(先頭のスペースに注意ですよ、いいですか? もうこれ以降は言いませんからね。)
`hosts:
' で始まる行がない場合は、上の例を追加してください。
この指定をすると、プログラムはまず /etc/hosts
ファイルを見て、
次に resolv.conf
にしたがって
DNS をチェックしにいくようになります。
/etc/host.conf
おそらく何行かあるうちの一行が
order
ではじまっており、以下のようになっているでしょう。
order hosts,bind
`order
' の行が無い場合には追加してください。
この指定をすると、名前引きルーチンは最初に
/etc/hosts
を参照し、次にネームサーバ (resolv.conf
で
127.0.0.1 と指定しましたね) に問い合わせるようになります。
これらの準備がすんだら、named を立ち上げましょう。
ダイアルアップ接続をしている人は、まず先に接続してください。
`ndc start
' と入力してリターンを押してください。
オプションは指定しません。
うまくいかない場合は `/usr/sbin/ndc start
' としてみましょう。
これもうまくいかない場合は
Q & A の章を
見て下さい。
named を動かしている最中に syslog のメッセージファイル
(普通は /var/adm/messages
ですが /var/log
ディレクトリにあったり syslog
のようなファイル名かもしれません)
を見ると (tail -f /var/adm/messages
とします) 、
以下のような出力が表示されるはずです:
(\ で終わっている行は、次の行に続いていることを表します)
Feb 15 01:26:17 roke named[6091]: starting. named 8.1.1 Sat Feb 14 \
00:18:20 MET 1998 ^Ijanl@roke.uio.no:/var/tmp/bind-8.1.1/src/bin/named
Feb 15 01:26:17 roke named[6091]: cache zone "" (IN) loaded (serial 0)
Feb 15 01:26:17 roke named[6091]: master zone "0.0.127.in-addr.arpa" \
(IN) loaded (serial 1)
Feb 15 01:26:17 roke named[6091]: listening [127.0.0.1].53 (lo)
Feb 15 01:26:17 roke named[6091]: listening [129.240.230.92].53 (ippp0)
Feb 15 01:26:17 roke named[6091]: Forwarding source address is [0.0.0.0].1040
Feb 15 01:26:17 roke named[6092]: Ready to answer queries.
エラーに関する出力があった場合は、何か間違えているのでしょう。 named はその間違っているファイルを名指ししてくれるはずです (named.conf か root.hints のどちらかだと思います :-)。 named を kill して、named 関係のファイルを再確認しましょう。
さて、ここまで行ってきた設定を試してみましょう。 nslookup を起動して、ここまでの作業を確認してみましょう。
$ nslookup
Default Server: localhost
Address: 127.0.0.1
>
と表示されれば、うまく動いているはずです (だといいですね)。
何か他の表示が出たら、やり直して全部再チェックです。
named.conf
を変更したら、そのたびに ndc restart
コマンドで
named を再起動する必要があります。
では問い合わせをしてみましょう。 あなたの近くにあるマシンの名前を引いてみましょう。 私の近く (Oslo 大学) には pat.uio.noというマシンがあります。
> pat.uio.no
Server: localhost
Address: 127.0.0.1
Name: pat.uio.no
Address: 129.240.130.16
nslookup はあなたのマシンで動いている named に、
pat.uio.no
を探すよう依頼します。すると named は
root.hints
ファイルに書かれているネームサーバの一つに
接続して、問い合わせをします。
/etc/resolv.conf
に書かれているドメイン全てについて
調べる必要があるかもしれないので、結果が得られるまでに
少々時間がかかることがあります。
ここでもう一度同じ問い合わせを行うと、次のような結果になるでしょう。
> pat.uio.no
Server: localhost
Address: 127.0.0.1
Non-authoritative answer:
Name: pat.uio.no
Address: 129.240.2.50
今度は 'Non-authoritative answer:
'という行があることに
注目してください。
この行からわかることは、今回 named はネットワーク経由で
調べたのではなく、この情報はすでにキャッシュに入っている、
ということです。でもキャッシュの情報はもしかすると古いことがある
かもしれません。
ですから、この `Non-authorative answer:
'という結果には、
(ほんのわずかですが) 危険があることを知っておいてください。
あるホストに対して 2 回問い合わせをして、 nslookup
が
二度目にこの結果を出した場合には、
named は情報をキャッシュしていて、かつそのキャッシュが正しく
動作していることになります。
`exit
' コマンドを入力して、 `nslookup
' を終了しましょう。
学術機関や ISP (Internet Service Provider) などの、
上手に組織化された大きなネットワークでは、ネットワークのプロ達は
DNS サーバに「フォワーダ (forwarder)」と呼ばれる階層を
設けていることがあるかもしれません。これには内部の
ネットワーク負荷や外部にあるサーバの負荷を下げる効果があるのです。
自分がそのようなネットワークの一部にいるのかどうかを知るのは
それほど簡単ではありませんが、それは別に気にする必要はありません。
むしろここで注目すべきなのは、接続しているプロバイダの DNS サーバを
「フォワーダ」として利用すると、問い合わせの反応を速くでき、
ネットワークへの負荷を下げることができるという点です。
モデムを使っている場合は、この効果はかなり大きいです。
ここで例として、お使いのネットワークプロバイダには
利用を推奨している二つのネームサーバがあるとします。
それぞれの IP 番号を 10.0.0.1
と 10.1.0.1
としましょう。
このような場合には、お手元の named.conf
ファイルの最初のセクション、
``options'' という名前がついている部分に以下の行を挿入して
下さい。
forward first; forwarders { 10.0.0.1; 10.1.0.1; };
ダイアルアップマシンにも forwarders を使ったちょっと嬉しい トリックがあります。 Q & A の章に書いてあります。
ネームサーバを再起動して、 nslookup でテストしてください。 うまくいっていると思います。
さて、今やあなたはキャッシュ動作をする named の設定方法を知ったわけで す。ビールでもミルクでも、お好きなもので乾杯しましょう。