Chapter 11. ドメインネームシステム - DNS

目次
11.1. 註とあらかじめ必要な事項
11.2. DNS ってなに?
11.3. DNS ファイル
11.4. DNS の使用
11.5. キャッシュだけを行うネームサーバーの設定

この章 (The Domain Name System) は Jason R. Fink による寄稿です

NetBSD のドメインネームシステム。 この章では NetBSD システム上のドメインネームサーバー (DNS) 1台でのシンプルで小さなドメイン設定について記述します。 これは、 DNS が何なのかということは具体的には記述していませんが 簡単に書いてあります。 更なる情報 は DNS Resources Directory (DNSRD) 、 http://www.dns.net/dnsrd/ から手にいれることができます。

11.1. 註とあらかじめ必要な事項

この章の例では BIND はメジャーバージョン 8 について扱い、だけども、 データベースのフォーマットと named.conf はほぼすべて 100% 互換性があるはずです。 私が見つけた違いは "$TTL" 情報が要求されないだけです。

読者は ホストと IP アドレスの対応、 IP アドレスのクラスの規定 という基本について、良く理解しているはずです。

11.2. DNS ってなに?

Domain Name System は、マシン名と IPアドレスを変換します。 変換は、この変換は名前からアドレスと、アドレスから名前の双方向です。 hosts による IP 写像とドメイン写像との違いは DNS が 階層性の naming 規格を使っていることです。 この階層性は右が最高レベルで右から左へとなっています。 例として、ここに 簡単なドメイン break-out があり:

TOP-LEVEL                                .org
                                           |
MID-LEVEL                             .diverge.org
                     ______________________|________________________ 
                    |                      |                        |
BOTTOM-LEVEL strider.diverge.org   samwise.diverge.org   wormtongue.diverge.org    

充分シンプルみたいですが、しかし、他のポイントで もっと論理的な分割をすることもできます。 この例は、上に示されているように diverge.org ドメイン上に 3つのノードがあります。 しかし、 diverge.org を strider.net1.diverge.org と samwise.net2.diverge.org 、 wormtongue.net2.diverge.org のようなサブドメインに分割することもでき、この場合、 2 つのノードが net2.diverge.org に属し、1つが net1.diverge.org に属します。

11.3. DNS ファイル

さて、ネットワーク上の小型 DNS の実際の設定をみましょう。 いくつかの仮定を作る前に、 上であげた例を引き続き使いましょう:

註: この種類の設定は Chapter 10 に記述されています。

自分のネームサーバーのホストを "strider" とし、 そのホストでは、 IPNAT を動かし、2つのクライアントのゲートウェーにします。 使っているインターフェースの種類は本当は関係有りませんが、 引数の値の為に とにかく 56k ダイアルアップ接続ということにしてください。

それで、何か変になる前に、 DNS を使うための変更をする前の strider の hosts ファイルを見ましょう。

例 11-1. strider の /etc/hosts ファイル

127.0.0.1       localhost
192.168.1.1     strider
192.168.1.2     samwise sam
192.168.1.3     wormtongue worm      

必ずしも大きくはないネットワークでは、この節で検討しているような 大きなネットワーク向けのと同じルールを適用することは することは価値がありません。

11.3.1. /etc/namedb/named.conf

NetBSD オペレーティングシステムでは、それを基にして使うための デフォルトのファイルのセットが提供されていて、 /etc/namedb に蓄えられ、 参照目的のために、このディレクトリーのバックアップを作成しておくことを 強くお勧めします。

ディレクトリーにはデフォルトで次のファイルが含まれ:

  • 127

  • localhost

  • loopback.v6

  • named.conf

  • root.cache

私の設定ではこれらのファイルをもとに 書き換えて使っています。

最初に見たいファイルは /etc/namedb/named.conf です。 このファイルは bind (よって catchy[迷いやすい;ウケそうな] 名前) の設定ファイルです。 このようなシステムの設定は比較的簡単です。最初に、私のはこんな感じで:

options {
        directory "/etc/namedb";
        allow-transfer { 192.168.1.0/24; };
        recursion yes;
        allow-query { 192.168.1.0/24; };
        listen-on port 53 { 192.168.1.1; };
};

zone "localhost" {
   type master;
   notify no;
   file "localhost";
};

zone "127.IN-ADDR.ARPA" {
   type master;
   notify no;
   file "127";
};

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int" {
   type master;
   file "loopback.v6";
};

zone "diverge.org" {
   type master;
   notify no;
   file "diverge.org";
};

zone "1.168.192.in-addr.arpa" {
   type master;
   notify no;
   file "1.168.192";
};

zone "." in {
   type hint;
   file "root.cache";
};      

註として、私の named.conf では root section は最後で、 なぜかと言うと、インターネット上に他の diverge.org と言うドメインが 有るからで(私のなのです)、 それでインターネット上の 検索は最後にさせたいからです。 これは、ほとんどのシステムで通常のことでは有りません。

もうひとつ、ここで覚えておくべきとても重要なことは、 内部設定しておくと、言いかえるとインターネット接続が生きていなくて、 および/またはルートサーバー検索が必要無ければ、ルートゾーンを コメントアウトします。あるクライアントがインターネット上のドメインを 参照しようとして検索問題を起こすかも しれないからです。

とんでもないことに、 各セクションの行 は幾分冗長です。 それで、何度か説明しておくだけにします。

named.conf セクションを見ていきましょう:

11.3.1.1. オプション

この節では、幾つかの global パラメーターを定義し、 最も注目するに値するのは DNS テーブルの位置で、 このシステムについては /etc/named に書かれています。

残りのパラメーターに従うと次のように :

allow-transfer

リモート DNS サーバーにセカンダリーとして働かるため、 必要なzone file 情報を(転送許可)

allow-query

このネームサーバーに、そこから問い合わせられることを(許可)

listen-on port

このサーバーで named を走らせるポート番号

named.conf ファイルの 残りは "zones" から成っていて、 各 zone は ドメインの個々のエリア(またはゾーン)を検索する為のテーブル がつながっているファイルです。 named.conf 中のフォーマットは明白に著しく似通っているので、 レコードのひとつだけに注目して:

11.3.1.2. zone "diverge.org"

type

zone の形式で "." を除くすべての場合で master

notify

あなたの zone が変更されたときに通知が欲しいかどうか指定します この設定では明らかに いいえ です。

file

個々の zone について記録した named ディレクトリーにあるファイルネームの名前

11.3.2. /etc/namedb/localhost

多くの部分では、ゾーンファイルは、とても良く似ていますが、しかしながら、 互いに幾つかの独自部分があります。 localhost ファイルはどのようなものかというと、このようなもので:

Example 11-2. localhost

1|$TTL    3600
 2|@              IN SOA  strider.diverge.org. hostmaster.diverge.org. (
 3|                        1       ; Serial
 4|                        8H      ; Refresh
 5|                        2H      ; Retry
 6|                        1W      ; Expire
 7|                        1D)     ; Minimum TTL
 8|                        IN NS   localhost.
 9|localhost.      	   IN      A       127.0.0.1
10|                        IN      AAAA    ::1        

1行ごとに:

Line 1

これは検索有効期限(Time To Live)で、 これは一般的に すべてのファイルで同じです。

Line 2

この行は、ルートを除き、一般的にすべてのゾーンファイルで共通です。 この行の特定の関心は strider.diverge.org. と root.diverge.org です。 明らかに、片方がこのサーバーの名前で、もうひとつは この DNS サーバーの名前です。, ほとんどの場合 root というのは 少し不明瞭で、 連絡情報 には標準の email アカウント を使うほうを好みます。(例えば、私のは jrf.diverge.org. でしょう。)

Line 3

この行はシリアルナンバーで、たいていの人々は サーバーをインストールした日付を次のような形式で使い: MMDDYYYY 。 シリアルナンバーは 最初にインストール された後、ファイルが変更されるごとに増加させるべきです それで私は単に1から始めるほうを好みます。

Line 4

これはサーバーの更新レートで、このファイルでは 8 時間に一度設定します。

Line 5

再試行率。

Line 6

検索使用期限。

Line 7

最低有効期限(最低TTL)

Line 8

これは Nameserver の行で、ご覧の通り localhost と設定されています。

Line 9

この行は local host のエントリーです。

Line 10

この行は ipv6 エントリーです。

11.3.3. /etc/named/zone.127.0.0

これは localhost の逆引きファイル (or zone)です。 このようになっていて:

1| $TTL    3600
 2| @              IN SOA  strider.diverge.org. root.diverge.org. (
 3|                        1       ; Serial
 4|                        8H      ; Refresh
 5|                        2H      ; Retry
 6|                        1W      ; Expire
 7|                        1D)     ; Minimum TTL
 8|                 IN NS   localhost.
 9| 1.0.0           IN PTR  localhost.      

このファイル中で、 line 9 を除くすべての行は localhost ゾーンファイルと同じで、逆検索レコードです。 別のファイルで定義しているのは、 localhost のアドレスは他のゾーンのものとまったく違うからです。 ゾーンファイルのすべてを見た後に 何かを discuss します。

11.3.4. /etc/namedb/diverge.org

このゾーンファイルは 192.168.1.0/24 ネットワーク上の全てのホスト を記録したもので、こんな感じです:

1| $TTL    3600
 2| @              IN SOA  strider.diverge.org. root.diverge.org. (
 3|                         1       ; serial
 4|                         8H      ; refresh
 5|                         2H      ; retry
 6|                         1W      ; expire
 7|                         1D )    ; minimum seconds
 8|                 IN NS   strider.diverge.org.
 9|                 IN MX   10 maila.diverge.org.   ; primary mail server
10|                 IN MX   20 mailb.diverge.org.   ; secondary mail server
11| strider         IN A     192.168.1.1
12| maila           IN CNAME strider.diverge.org.
13| samwise         IN A     192.168.1.2
14| www             IN CNAME samwise.diverge.org.
15| mailb
16| worm            IN A     192.168.1.3      

新しい要素がいっぱいあるので、 新しいものだけについて見ると:

Line 12

この行はメール取り扱いホストで、この場合は strider で、しかし、規模の問題で、 maila と呼びたいのです。 下を見る限り、取扱量は多くなく、 maila.diverge.org. の前についている数字は 優先順位番号で、小さいほうが高優先順位です。 ここでの設定法は、 strider がメールを取り扱えない時は mailb (実体は samwise) が行うというものです。

Line 12

CNAME は canonical name (標準名)を表し、 or in lamens, an alias. それで alias があり、次のように:

maila.diverge.org は strider.diverge.org
mailb.diverge.org は samwise.diverge.org
www.diverge.org   は samwise.diverge.org              

残りの記述は単純な IP アドレスと フルネームの対応です。

11.3.5. /etc/namedb/192.168.1

このゾーンファイルは全登録ホストの逆転ファイル です。 アドレス部分が違うのは明白ですが、 localhost バージョンに似たフォーマットで:

1|$TTL    3600
 2|@              IN SOA  strider.diverge.org. root.diverge.org. (
 3|                     1       ; serial
 4|                     8H      ; refresh
 5|                     2H      ; retry
 6|                     1W      ; expire
 7|                     1D )    ; minimum seconds
 8|                IN NS   strider.diverge.org.
 9|1               IN PTR  strider.diverge.org.
10|2               IN PTR  samwise.diverge.org.
11|3               IN PTR  worm.diverge.org.      

11.3.6. /etc/namedb/root.cache

このファイルはあなたのサーバーが 自分のドメインの外側について問い合わせるルートサーバーのリストです。 ルートゾーンファイルの最初の何行かは:

;       $NetBSD: root.cache,v 1.8 1997/08/24 15:50:47 perry Exp $
;
;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  file"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC registration services
;       under anonymous FTP as
;           file                /domain/named.root
;           on server           FTP.RS.INTERNIC.NET
;       -OR- under Gopher at    RS.INTERNIC.NET
;           under menu          InterNIC Registration Services (NSI)
;              submenu          InterNIC Registration Archives
;           file                named.root
;
;       last update:    Aug 22, 1997
;       related version of root zone:   1997082200
;
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
;
; formerly NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     128.9.0.107
;
; formerly C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
. . .      

このファイルは http://www.isc.org/ の ISC から得ることができ、通常、 BIND 配布物に入っています。 ルートキャッシュファイルは NetBSD core オペレーティングシステムに含まれています。

11.4. DNS の使用

この節では簡単に DNS を持ち、 設定するための方法が書かれています。

NetBSD はすでに dns キャッシュサーバーがインストールされています ( 次の節に出てきます)。加えて、 runtime 時のサーバー管理ツールもあります。 しかしながら、 start 前に サーバーが同初期化されているか見ておく必要があります。

named の自動起動の設定はとても簡単です。 /etc/defaults/rc.conf で、 named の行の NO を YES にするだけです。 追加的オプションは行中で quotes で囲んで指定することができ、 例えば、私は -g nogroup -u nobody とするのを好んで、 それで 非ルートアカウントが named プロセスを走らせます。

ブート時の named の 起動のほかにndc 機構の制御もできます。 要するに ndc 機構 は、 named サーバープロセスの停止、起動あるいは再起動ができます。 他にも数多くの事をすることができます (より詳しいことは ndc マニュアルページをご覧ください)。

一般的な使い方は ndc です。

次に、 strider が自身の検索する場所を 示します。これは2段階からなり、最初に、解決順を決めます。 この小さなネットワーク上では、各ホストが hosts テーブルのコピーを持つようなもので、 それで、dns ではなく hosts を使って うまくやりおおせることができますが、しかし、大きなネットワークでは、 DNS を使うほうが とっても簡単です。どちらの場合も、これを決めるファイルは /etc/nsswitch.conf ( Example 10-2をご覧ください)です。 これは典型的な nsswitch.conf の一部分で:

. . .
group_compat:   nis
hosts:          files dns
netgroup:       files [notfound=return] nis
. . .    

関係のある行は hosts で、 files はシステムが ip - name 変換 に /etc/hosts を使います。 エントリーの左側が 最初に行われる解決法です。

次のファイルは /etc/resolv.conf で、 このファイルは dns 検索ファイルで、 フォーマットはとても 自己説明的ですがとにかく検討すると:

domain diverge.org
search diverge.org
nameserver 192.168.1.1    

つまり このファイルは resolver にこの機械は diverge.org に属していて、 どこかよそを探す前に探すべきだと教えていて、 それと、ネームサーバーアドレスは 192.168.1.1 です。

自分たちのネームサーバーのテストにはいくつかのコマンドが使え、 例えば:

# host www.blah.net    

ここは host www.yahoo.com を走らせた出力で:

www.yahoo.com is a nickname for www.yahoo.akadns.net
www.yahoo.akadns.net has address 216.32.74.50
www.yahoo.akadns.net has address 216.32.74.51
www.yahoo.akadns.net has address 216.32.74.52
www.yahoo.akadns.net has address 216.32.74.53
www.yahoo.akadns.net has address 216.32.74.55    

クライアントホストの設定手順は同じく、 /etc/nsswitch.conf/etc/resolv.conf の設定です。

11.5. キャッシュだけを行うネームサーバーの設定

キャッシュだけのネームサーバーは local zones を持たず; すべての queries が ルートサーバーに行き、そして replies をローカルキャッシュに蓄えます。 次に問い合わせたとき、 すでにサーバーのキャッシュにデータがあるのですばやく応答します。 このタイプのサーバーは local hosts の名前を解決するための local zones を扱わないので 依然として、すでに出てきた /etc/hosts ファイルを使うことが必要です。

NetBSD ではキャッシュだけのサーバーに必要なすべてのファイルが 標準で提供されているので この種の DNS の設定は非常に簡単で、 設定ファイルに1行も書かずに、少ないコマンドで行うことができます。

註: 設定ファイルの数とその内容は NetBSD のバージョンに依存します。

DNS サーバー を提供するプログラムは named daemon で、その設定には named.conf 設定ファイルを使います。 NetBSD で用意されている標準ファイルは /etc/namedb ディレクトリーにありますが、 daemon は /etc/ ディレクトリーを見に行くので、 それで、リンクの作成から始めます:

# ln -s /etc/namedb/named.conf /etc/named.conf    

ネームサーバーは使う準備ができています! /etc/resolv.conf ファイルに次の1行を加えることで使えるようになり:

nameserver 127.0.0.1    

ここで named を開始します。

# named    

註: ここで、ネームサーバーは手動で開始しました。 一度テストして、 動作に自信を持てば、 /etc/rc.conf ファイルの関連オプションを使って、ブート時に自動的に起動させることができます。

11.5.1. サーバーの試験

さて、サーバーは動作していて、 nslookup プログラムで試験をすることができます。

# nslookup
Default server: localhost
Address: 127.0.0.1

>      

ホストネームの逆引きをしてみましょう。例えば www.mclink.it (あなたの近くのサイトを試してください。)

> www.mclink.it
Server:  localhost
Address:  127.0.0.1

Name:    www.mclink.it
Address:  195.110.128.8      

問い合わせを2度すると、 結果は若干変わり:

> www.mclink.it
Server:  localhost
Address:  127.0.0.1

Non-authoritative answer:
Name:    www.mclink.it
Address:  195.110.128.8      

多分気がつくと思いますが、 アドレスは同一ですが、 "Non-authoritative answer" メッセージがでました。 このメッセージは、結果が mclink.it ドメインに対する正式のサーバーからのものではなくて、 私達のサーバーのキャッシュからのものであることを示しています。

この最初のテストの結果で サーバーが正しく動作していることを確かめます。

host コマンドも試すことができ、 次のようになります。

# host www.mclink.it
www.mclink.it has address 195.110.128.8