この章 (The Domain Name System) は Jason R. Fink による寄稿です
NetBSD のドメインネームシステム。 この章では NetBSD システム上のドメインネームサーバー (DNS) 1台でのシンプルで小さなドメイン設定について記述します。 これは、 DNS が何なのかということは具体的には記述していませんが 簡単に書いてあります。 更なる情報 は DNS Resources Directory (DNSRD) 、 http://www.dns.net/dnsrd/ から手にいれることができます。
この章の例では BIND はメジャーバージョン 8 について扱い、だけども、 データベースのフォーマットと named.conf はほぼすべて 100% 互換性があるはずです。 私が見つけた違いは "$TTL" 情報が要求されないだけです。
読者は ホストと IP アドレスの対応、 IP アドレスのクラスの規定 という基本について、良く理解しているはずです。
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 に属します。
さて、ネットワーク上の小型 DNS の実際の設定をみましょう。 いくつかの仮定を作る前に、 上であげた例を引き続き使いましょう:
host-to-ip は正しく動作していて
IPNAT が正しく動作していて
現在、すべてのホストが ISP の 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
必ずしも大きくはないネットワークでは、この節で検討しているような 大きなネットワーク向けのと同じルールを適用することは することは価値がありません。
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 セクションを見ていきましょう:
この節では、幾つかの global パラメーターを定義し、 最も注目するに値するのは DNS テーブルの位置で、 このシステムについては /etc/named に書かれています。
残りのパラメーターに従うと次のように :
リモート DNS サーバーにセカンダリーとして働かるため、 必要なzone file 情報を(転送許可)
このネームサーバーに、そこから問い合わせられることを(許可)
このサーバーで named を走らせるポート番号
named.conf ファイルの 残りは "zones" から成っていて、 各 zone は ドメインの個々のエリア(またはゾーン)を検索する為のテーブル がつながっているファイルです。 named.conf 中のフォーマットは明白に著しく似通っているので、 レコードのひとつだけに注目して:
zone の形式で "." を除くすべての場合で master
あなたの zone が変更されたときに通知が欲しいかどうか指定します この設定では明らかに いいえ です。
個々の zone について記録した named ディレクトリーにあるファイルネームの名前
多くの部分では、ゾーンファイルは、とても良く似ていますが、しかしながら、 互いに幾つかの独自部分があります。 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行ごとに:
これは検索有効期限(Time To Live)で、 これは一般的に すべてのファイルで同じです。
この行は、ルートを除き、一般的にすべてのゾーンファイルで共通です。 この行の特定の関心は strider.diverge.org. と root.diverge.org です。 明らかに、片方がこのサーバーの名前で、もうひとつは この DNS サーバーの名前です。, ほとんどの場合 root というのは 少し不明瞭で、 連絡情報 には標準の email アカウント を使うほうを好みます。(例えば、私のは jrf.diverge.org. でしょう。)
この行はシリアルナンバーで、たいていの人々は サーバーをインストールした日付を次のような形式で使い: MMDDYYYY 。 シリアルナンバーは 最初にインストール された後、ファイルが変更されるごとに増加させるべきです それで私は単に1から始めるほうを好みます。
これはサーバーの更新レートで、このファイルでは 8 時間に一度設定します。
再試行率。
検索使用期限。
最低有効期限(最低TTL)
これは Nameserver の行で、ご覧の通り localhost と設定されています。
この行は local host のエントリーです。
この行は ipv6 エントリーです。
これは 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 します。
このゾーンファイルは 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
新しい要素がいっぱいあるので、 新しいものだけについて見ると:
この行はメール取り扱いホストで、この場合は strider で、しかし、規模の問題で、 maila と呼びたいのです。 下を見る限り、取扱量は多くなく、 maila.diverge.org. の前についている数字は 優先順位番号で、小さいほうが高優先順位です。 ここでの設定法は、 strider がメールを取り扱えない時は mailb (実体は samwise) が行うというものです。
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 アドレスと フルネームの対応です。
このゾーンファイルは全登録ホストの逆転ファイル です。 アドレス部分が違うのは明白ですが、 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.
このファイルはあなたのサーバーが 自分のドメインの外側について問い合わせるルートサーバーのリストです。 ルートゾーンファイルの最初の何行かは:
; $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 オペレーティングシステムに含まれています。
この節では簡単に 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 の設定です。
キャッシュだけのネームサーバーは 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 ファイルの関連オプションを使って、ブート時に自動的に起動させることができます。
さて、サーバーは動作していて、 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