次のページ 前のページ 目次へ

3. キャッシュ専用のネームサーバ

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/namedLinux 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.edusunsite.unc.edu.your-domain.edusunsite.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 と指定しましたね) に問い合わせるようになります。

3.1 named を起動する

これらの準備がすんだら、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' を終了しましょう。

3.2 改善するには

学術機関や ISP (Internet Service Provider) などの、 上手に組織化された大きなネットワークでは、ネットワークのプロ達は DNS サーバに「フォワーダ (forwarder)」と呼ばれる階層を 設けていることがあるかもしれません。これには内部の ネットワーク負荷や外部にあるサーバの負荷を下げる効果があるのです。 自分がそのようなネットワークの一部にいるのかどうかを知るのは それほど簡単ではありませんが、それは別に気にする必要はありません。 むしろここで注目すべきなのは、接続しているプロバイダの DNS サーバを 「フォワーダ」として利用すると、問い合わせの反応を速くでき、 ネットワークへの負荷を下げることができるという点です。 モデムを使っている場合は、この効果はかなり大きいです。 ここで例として、お使いのネットワークプロバイダには 利用を推奨している二つのネームサーバがあるとします。 それぞれの IP 番号を 10.0.0.110.1.0.1 としましょう。 このような場合には、お手元の named.conf ファイルの最初のセクション、 ``options'' という名前がついている部分に以下の行を挿入して 下さい。


           forward first;
           forwarders {
                10.0.0.1;
                10.1.0.1;
            };

ダイアルアップマシンにも forwarders を使ったちょっと嬉しい トリックがあります。 Q & A の章に書いてあります。

ネームサーバを再起動して、 nslookup でテストしてください。 うまくいっていると思います。

3.3 おめでとう

さて、今やあなたはキャッシュ動作をする named の設定方法を知ったわけで す。ビールでもミルクでも、お好きなもので乾杯しましょう。


次のページ 前のページ 目次へ