Primary DNSサーバの構築   ▲戻る
最終更新日 : 2010/06/07 (武 直樹)  <<  作成日 : 2002/02/25(森川靖大)
  1. 準備

  2. bind 9 のインストール

  3. bind9 の挙動に関して

  4. デフォルトでの bind9 の設定

  5. 専攻ネットワーク用 Primary DNSサーバ構築

  6. 動作確認

  7. gate システムを利用したゾーンファイル作成

  8. 設定ファイル置き場

1. 準備

[1.1] OS の確認

このドキュメントでは, OS として Debian GNU/Linux 5.0 lenny がインストールされている事を前提として話を進める. インストールがまだ行われていない場合は, 基本部分構築ガイド を参考にして, OSのインストールを行っておくこと.


[1.2] パッケージリストの更新

このドキュメントでは, apt を利用して 「bind9」(DNS サービスを提供するソフトウェア) をインストールする.

以下のコマンドでパッケージリストの更新を行っておく.

# aptitude update [Enter]

2. bind9 のインストール

[2.1] bind9 パッケージのインストール

DNS サーバを構築するに当たってインストールするパッケージは 以下の2つである.
以下のパッケージは aptitude で一発でインストールされる.

[2.1.1] aptitude で bind9 のインストール

上記の 2つのパッケージのインストールを行う. aptitude コマンドでインストールする.
ただし事前に ISC (Internet System Consortium) にて最新バージョンを確認した上でインストールを行う.

# aptitude install bind9 [Enter]

これで bind のインストールは終了である. 既にそのマシンは DNSサーバとして機能している. 次は動作確認と関連ファイルについて解説する.


3. bind9 の挙動に関して

[3.1] DNS サーバの正常稼動を確認する

DNS サーバがちゃんと機能しているか確認する.

[3.1.1] /etc/resolv.conf の書き換え

利用するDNSサーバ, およびドメイン名は /etc/resolv.conf に 書き込まれている.

専攻サーバの基本部分構築ガイド にそってインストールしたならば, 以下のように 書き込まれているはずである.

search ep.sci.hokudai.ac.jp
nameserver 133.87.45.70
nameserver 133.87.45.66
nameserver 133.87.1.11

自機を DNSサーバとして使用するため, この resolv.conf のバックアップ を作成して, 新たに resolv.conf を以下のように書き直す. (前の内容は削除した上で書き直す)

# cp /etc/resolv.conf /etc/resolv.conf_bk [Enter]
# emacs /etc/resolv.conf [Enter]           (vi でもなんでもいいけど)
search ep.sci.hokudai.ac.jp
nameserver 127.0.0.1

「127.0.0.1」は「ループバックアドレス」と呼ばれ, そのコンピュータ自身に対するアドレスである.

[3.1.2] nslookup コマンド

DNS サーバ の挙動を調べるツールとして「nslookup」がある. これを使用して, DNS サーバが正常に動作しているか確認する.

$ nslookup [Enter]
Default Server: localhost      ← 使用するDNSサーバのホスト名
Address: 127.0.0.1          ← 使用するDNSサーバのIPアドレス

>

ホスト名からIPアドレスを調べてみる.

> www.ep.sci.hokudai.ac.jp [Enter]
Server: localhost
Address: 127.0.0.1

Name: orange.ep.sci.hokudai.ac.jp      ← ホストの本名
Address: 133.87.45.72          ← ホストのIPアドレス
Aliases: www.ep.sci.hokudai.ac.jp      ← ホストの別名

> www.debian.or.jp [Enter]
Server: localhost
Address: 127.0.0.1

Non-authoritative answer:
Name: arashi.debian.or.jp      ← ホストの本名
Address: 210.157.158.37          ← ホストのIPアドレス
Aliases: www.debian.or.jp      ← ホストの別名

IPアドレスからホスト名を調べてみる.

> 133.87.45.66 [Enter]
Server: localhost
Address: 127.0.0.1

Name: blue.ep.sci.hokudai.ac.jp      ← ホストの本名
Address: 133.87.45.66          ← ホストのIPアドレス

> 203.174.72.56 [Enter]
Server: localhost
Address: 127.0.0.1

Name: www.jpcert.or.jp      ← ホストの本名
Address: 203.174.72.56          ← ホストのIPアドレス

> 210.171.226.47 [Enter]
Server: localhost
Address: 127.0.0.1

*** localhost can't find 210.171.226.47: No response from server
返事が返ってこない時もある

※ IPアドレスから名前への変換はたまに行われていない ものもあるため, 「名前 → IPアドレス」はできても, 「IPアドレス → 名前」ができない場合がある.

最後に, このDNSサーバのゾーン情報を取り出してみる. ゾーン情報を取り出すには「ls」コマンド (シェルの ls コマンドとは別物) の後ろにドメインを書き込めば良い. すると, そのドメインに関するゾーン情報が得られる.

> ls ep.sci.hokudai.ac.jp. [Enter]
[localhost]
*** Can't list domain ep.sci.hokudai.ac.jp: Unspecified error

これは, このDNSサーバがドメイン「ep.sci.hokudai.ac.jp」についての ゾーン情報を所有していない事を示す. 今のところまだそのようなゾーンファイルは作成していないのだから このように表示されて良い.

その他, ブラウザを使うなどしてちゃんとドメイン名が IPアドレスに変換されているか確認すると良いだろう.


4. デフォルトでの bind9 の設定

インストールしてから一切設定しなくとも DNSサーバは動いたわけだが, ここではデフォルトの設定でどのように bind9 が挙動しているかみてみる. 専攻サーバ用の設定はその後に行うことにしよう.

よほど急いでいるか, もう bind9 の挙動に関して既に深く理解している ならば, ここを読み飛ばして 5. 専攻ネットワーク用 Primary DNSサーバ構築 へ行ってほしい.


[4.1] bind9 の設定ファイル

Debian 5.0 (lenny) で bind を動かす場合の設定ファイルは /etc/bind/named.conf である. このファイルに, ゾーンファイルの位置, ゾーンに対するドメイン, アクセス制限など bind の設定の全てが書き込まれている.

[4.1.1] 設定ファイルの中身

中身を見てみる. 少々長いため, コメントの部分や専攻サーバ用DNSに必要なさそうな 部分は省いてある. 青字で書いてある部分は勝手につけたコメントで 赤字になっている部分はそこが重要な事 を示している.

// This is the primary configuration file for the BIND DNS server named.
//   ← スラッシュを2つつけるとコメントアウトになる.
                                  :
options {
        directory "/var/cache/bind";   ← ゾーンファイルがある
                                          ディレクトリを指定する
        // If there is a firewall between you and nameservers you want
                                  :
        // Uncomment the following block, and insert the addresses replacing
};
                                  :
// prime the server with knowledge of the root servers
zone "." {
        type hint;
        file "/etc/bind/db.root";   ← ルートネームサーバに関するゾーンファイル
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
        type master;
        file "/etc/bind/db.local";   ← ループバックアドレスに関する
};                                      正引きゾーンファイル

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";   ← ループバックアドレスに関する
};                                    逆引きゾーンファイル

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

// add entries for other zones below here
    

簡単にファイルの中身について解説する.

[4.1.2] ゾーン全体に影響を及ぼす option ステートメント

以下の部分が option ステートメントである.

options {
        directory "/var/cache/bind";
};

ここに書き込まれる内容は DNSサーバのゾーンファイル全体に 影響を及ぼす.

ここで設定されている directory オプションはゾーンファイルのある ディレクトリを指定する. ここでディレクトリを指定する事で, zone ステートメントでは 絶対パスでなく, 相対パスでゾーンファイルの位置を指定する事が出来る. (皮肉な事にデフォルトではゾーンファイルの位置は 絶対パスで指定してあるが)

なお, これ以外にもゾーンファイル全体にアクセス制限をかける時などに この option ステートメントは利用されるが, 今のところはこのディレクトリ指定だけ知っておけばよいだろう.

[4.1.3] ゾーンファイルの種類と位置を指定する zone ステートメント

以下が zone ステートメント (の1つ) である.

zone "127.in-addr.arpa" {
        type master;
        file "db.127";
};

zone ステートメントの書式は 基本的には以下のとおり

zone "ドメイン" {
        type ゾーンのタイプ;
        file "ゾーンファイル名";
};

上記の「ゾーンのタイプ」には以下の 3 種類がある.

  • hint
    ルートネームサーバに関するゾーン
  • master
    「アドレス」⇔「名前」の対応表があるゾーン
  • slave
    ゾーンファイルが他の DNSサーバ にあるゾーン
    (Secondary DNS サーバのみ使用するタイプ)

次はここから呼び出されるゾーンファイルについてみてみる.


[4.2] ゾーンファイル

ゾーンファイルの位置は設定ファイルで自由に変更できるが, デフォルトでは /etc/bind/ 以下(つまり設定ファイルと同じディレクトリ) にゾーンファイルは格納されている.

この中の重要なゾーンファイルについて解説する.

[4.2.1] ルートネームサーバのゾーンファイル

以下で指定されているのはルートネームサーバの位置 (ホスト名とIPアドレス) に関して記述されたファイルである.

zone "." {
        type hint;
        file "/etc/bind/db.root";
};

では, /etc/bind/db.root をのぞいてみる. 以下のような文字列が羅列してあるはず.

                            :
.                        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
;
                            :

ここ書いてあるのは, ルートネームサーバのIPアドレスとホスト名 である. そのため, このゾーンファイルは書き換えてはならない.

混乱が生ずる恐れがあるのでこのルートネームサーバの情報は ほとんど変更される事はないが, 一応, 最新版のルートネームサーバの情報を ftp://ftp.rs.internic.net/domain/named.root から取得するべきだろう. (取得は後から専攻サーバ用の構築の際に行うので現在まともに DNS サーバが稼動しているならばこのファイルを今取得しなくとも良い)

なお, 真中の「3600000」はキャッシュの生存時間を表す. (3600000 second = 1000 hour)     ルートネームサーバの情報はほとんど変更されないため, 非常に長期間キャッシュに残ったままだということである.

[4.2.2] ループバックアドレスの正引き用ゾーン

以下で指定されているのはループバックアドレスの正引き用 のゾーンファイルである.

(「正引き」とは「名前」から「アドレス」を割り出すこと)

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

/etc/bind/db.local をのぞいてみる.

$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1

ループバックアドレスの対応(「localhost」→「127.0.0.1」) は最後の行に書かれてある.

左に書かれてあるのがホスト名で, 右に書かれているのがそれに対応する IPアドレスである.

不思議に思うかもしれないのは左の「@」であろう. なぜこれが「localhost」を意味するのだろうか.

この「@」には named.conf に書き込まれていた 「zone "localhost"」の「localhost」が代入されて いるのである. つまり, 実際には以下のように書き込まれていることになる.

localhost.       IN      A       127.0.0.1

ちなみに, 正確に言うとこれは「代入」ではなく「補完」である. それと左の「localhost」の後ろに「. (ドット)」が 付いているのも気になったかもしれない. このことや, ここでは触れなかった上の部分のパラメータに関しては 後で述べる.

[4.2.3] ループバックアドレスの逆引き用ゾーン

ある一つのファイルで, 正引きと逆引き (「アドレス」→「名前」を割り出す事) の両方を行うことは出来ないため, 逆引き用のファイルも必要となる.

以下で指定されているのはループバックアドレスの逆引き用 のゾーンファイルである.

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

/etc/bind/db.127 をのぞいてみる.

$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
1.0.0   IN      PTR     localhost.

ループバックアドレスの対応(「127.0.0.1」→「localhost」) は最後の行に書かれてある.

左に書かれてあるのがIPアドレスで, 右に書かれているのがそれに対応する ホスト名である.

不思議に思うかもしれないのは左の「1.0.0」であろう. なぜこれが「127.0.0.1」を意味するのだろうか.

この「1.0.0」の右側には named.conf に書き込まれていた 「zone "127.in-addr.arpa"」の「127.in-addr.arpa」 が補完されているのである. つまり, 実際には以下のように書き込まれていることになる.

1.0.0.127.in-addr.arpa.       IN      PTR       localhost.

[4.2.4] 残り 2 つのゾーンファイル

他に 2つゾーンファイル(db.0 と db.255)が named.conf から設定されているが, この2つはゾーン情報を保持していないため, ここでは触れない.


[4.3] ログで DNS ゾーンファイルの読み込みを確認

上記のゾーンファイルがちゃんと読み込まれているか, ログを見て確認してみる.

まずは bind9 を再起動する.

# /etc/init.d/bind9 stop [Enter]
Stopping domain name service: named.
# /etc/init.d bind9 start [Enter]
Starting domain name service: named.

次にログを見てみる.

# grep named /var/log/daemon.log [Enter]

出力の最後に以下のような部分があるはずである.

Feb 27 19:09:51 yellow named[8576]: starting (/etc/bind/named.conf). named 8.2.3-REL-NOESW Sat Jan 27 01:46:37 MST 2001 ^Ibdale@winfree:/home/bdale/debian/bind-8.2.3/src/bin/named
Feb 27 19:09:51 yellow named[8576]: hint zone "" (IN) loaded (serial 0)
Feb 27 19:09:51 yellow named[8576]: master zone "localhost" (IN) loaded (serial 1)
Feb 27 19:09:51 yellow named[8576]: master zone "127.in-addr.arpa" (IN) loaded (serial 1)
Feb 27 19:09:51 yellow named[8576]: master zone "0.in-addr.arpa" (IN) loaded (serial 1)
Feb 27 19:09:51 yellow named[8576]: master zone "255.in-addr.arpa" (IN) loaded (serial 1)
Feb 27 19:09:51 yellow named[8576]: listening on [127.0.0.1].53 (lo)
Feb 27 19:09:51 yellow named[8576]: listening on [133.87.45.70].53 (eth0)
Feb 27 19:09:51 yellow named[8576]: Forwarding source address is [0.0.0.0].1042
Feb 27 19:09:51 yellow named[8577]: Ready to answer queries.

1 行目に設定ファイルと bind のバージョンが表示されており, その下に各ゾーンファイルが読み込まれていることが表示されている.

存在しないゾーンファイルを設定ファイルで指定すれば, ちゃんとエラーメッセージも表示される. 試してみて欲しい. (もちろんそんな設定のまま DNS サーバを運用してはいけないが)


[4.4] デフォルトでのDNSサーバの挙動のまとめ

以上のことから, 未設定でのDNSサーバは 以下の役割を果たす事がわかる.


5. 専攻ネットワーク用 Primary DNSサーバ構築

説明が随分長くなったが, ここから専攻ネットワークで使用する Primary DNS サーバの構築を行う.

[2002/03/03] このドキュメントでは Primary DNS サーバのドメイン名を 「yellow.ep.sci.hokudai.ac.jp」, DNS サーバの管理者のメールアドレスを「postmaster@ep.sci.hokudai.ac.jp」 だと仮定して設定ファイル などを作成している.


[5.1] 設定ファイルの書き換え

現在の設定ファイルのバックアップをとり, 新しく設定ファイルを書き直す.. (たいていデフォルトの設定ファイルには解説などが書いてある. 以後参照する事もあり得るので, デフォルトの設定ファイルは削除したり せずにバックアップを取るべきである)

# cp /etc/bind/named.conf /etc/bind/named.conf_bk [Enter]
# emacs /etc/bind/named.conf [Enter]           (vi でもなんでもいいけど)

以下のように書き込む. (前の内容は削除する.)

options {
        directory "/var/named";
};

zone "." {
        type hint;
        file "named.root";
};

zone "ep.sci.hokudai.ac.jp" {
        type master;
        file "ep.zone";
};

zone "localhost" {
        type master;
        file "local.zone";
};

zone "0.0.127.in-addr.arpa" {
        type master;
        file "local.rev";
};

設定ファイルの解説

ちなみに, 上記の named.conf だが ここ に置いてある.


[5.2] ルートネームサーバ用ゾーンファイル作成

設定ファイルで記述したゾーンファイルを作成する.

まずは, ゾーンファイルを保管しておくディレクトリを作成し, 所有者を bind に変更する.

# mkdir /var/named [Enter]
# chown bind:bind /var/named [Enter]

そして, ルートネームサーバを記述したゾーンファイル (named.root) を用意する. 前述したように ftp://ftp.rs.internic.net/domain/named.root から取得する. ftp コマンドを使用しても良いし, ブラウザで取得しても良いだろう.

取得したら /var/named 以下に移動し, パーミッションを設定する.

# mv named.root /var/named/ [Enter]
# chmod 644 /var/named/named.root [Enter]
# chown root:root /var/named/named.root [Enter]

[5.3] ep.zone の作成

次に ep.zone を作成する.

[5.3.1] ep.zone に関する注意

専攻ネットワークではこの ep.zone を gate-toroku-system によって作成している. そのため, 本来ここで手作業で作る必要はない. しかし, ゾーンファイルの理解と 動作確認のため, 仮の ep.zone を作成する.

なお, しばらくは ゾーンファイルの解説が続く. 既にゾーンファイルに関して理解が出来ているのならば, 以下の説明は飛ばして [5.3.11] ep.zone のセッティング にて作業を行ってほしい.

[5.3.2] 正式な書法で書いた ep.zone

以下が ep.zone を正式な書法で書いたものである.

$TTL    86400
ep.sci.hokudai.ac.jp.  IN   SOA   yellow.ep.sci.hokudai.ac.jp. postmaster.ep.sci.hokudai.ac.jp. (
              2002022840         ;Serial
                   10800         ;Refresh
                    3600         ;Retry
                  604800         ;Expire
                 86400 )         ;Default TTL
;
;    local loopback address
;
localhost.ep.sci.hokudai.ac.jp.       IN     A       127.0.0.1
;
;
;    Name Server record
;
ep.sci.hokudai.ac.jp.           IN      NS      yellow.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp.           IN      NS      blue.ep.sci.hokudai.ac.jp.
;
;
;    Mail eXchanger record
;
ep.sci.hokudai.ac.jp.           IN      MX      10 grey.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp.           IN      MX      20 orange.ep.sci.hokudai.ac.jp.
;
;
;    Address record
;
yellow.ep.sci.hokudai.ac.jp.            IN      A       133.87.45.70
blue.ep.sci.hokudai.ac.jp.              IN      A       133.87.45.66
orange.ep.sci.hokudai.ac.jp.            IN      A       133.50.160.51
grey.ep.sci.hokudai.ac.jp.              IN      A       133.50.160.50
green.ep.sci.hokudai.ac.jp.             IN      A       133.50.160.55
;
;
;    Canonical NAME record
;
www.ep.sci.hokudai.ac.jp.             IN      CNAME   orange.ep.sci.hokudai.ac.jp.
mail.ep.sci.hokudai.ac.jp.            IN      CNAME   grey.ep.sci.hokudai.ac.jp.

以下でこのファイルについて解説する.

ちなみにこのファイルは ここ から取得できるが, 後から簡略化した ep.zone について説明するので 今この ep.zone を作成する必要はない.

[5.3.3] $TTL --ゾーン情報の生存時間--

ネームサーバは他のネームサーバからのゾーン情報をキャッシュに 蓄えているが, そのデータを永遠に保持しているわけではない. ゾーン情報が新たなものに書き換えられた時のために, 古いゾーン情報を 一定時間で破棄するようになっている.

この, ゾーン情報が生きている(他のサーバで保持される)時間を TTL (Time To Live) といい, 行頭の $TTLで その値を定める.

TTL を大きくしすぎると, サーバへのアクセスは減るが こちらのサーバで設定を変更しても反映されづらくなる. 逆に小さくしすぎるとサーバの変更はすぐに反映されるが サーバの負荷は多くなる.

専攻ネットワークのDNSサーバでは以下のように この生存時間を1日(86400秒)とする.

$TTL    86400

[5.3.4] SOA --このゾーンデータを支配しているものを示す--

以下の部分は このゾーンデータの権威を示す SOA (Start Of Authority) レコードである.

ep.sci.hokudai.ac.jp.  IN   SOA   yellow.ep.sci.hokudai.ac.jp. postmaster.ep.sci.hokudai.ac.jp. (
                    :
                 86400 )         ;Default TTL

このレコードには「このゾーンのドメイン」 「このゾーンデータを保持しているDNSサーバのホスト名」 「このゾーンデータの管理者のメールアドレス」が書き込まれる.

IN(InterNet) の前に「ドメイン名」を書き, SOA の後ろに, 「サーバのホスト名」「管理者のメールアドレス」 を書く.

なお, 以下の2点に注意すること

なお, ( )内の値は Secondary DNS サーバのために必要な値である. これについては Secondary DNS サーバ構築ドキュメントの [2.2] ゾーン転送用パラメータ で解説する.

[5.3.5] NS --そのゾーンに存在するネームサーバ--

このゾーン(この ep.zone ならば「ep.sci.hokudai.ac.jp」) に存在するネームサーバを以下のように NS (Name Server) レコードに記述する.

ep.sci.hokudai.ac.jp.           IN      NS      yellow.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp.           IN      NS      blue.ep.sci.hokudai.ac.jp.

左側に「ドメイン」を右側に「ネームサーバのホスト名」を記述する.

ここでも, ドメイン名やホスト名の後ろに必ず 「.(ドット)」をつけるように

[5.3.6] MX --ゾーンに送られてきたメールの送り先を指定--

「hogehoge@ep.sci.hokudai.ac.jp」などといったメールアドレスに対して 送られてきたメールをどのホストに配送するかを指定しているのが 以下の MX (Mail eXchanger) レコードである.

ep.sci.hokudai.ac.jp.           IN      MX      10 grey.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp.           IN      MX      20 orange.ep.sci.hokudai.ac.jp.

ホスト名の前に書いてある数字はメールが配送される優先順位を示し, 数が小さいほど優先順位が高くなる.

数字の桁や大きさには制限がなく, ただその大小で優先順位が比較 される. つまり, この「10」と「20」が「1」と「100」であっても 「10000」と「10001」であっても同じことを示す.

この設定で具体例を言えば以下のようになる.

  1. 「hogehoge@ep.sci.hokudai.ac.jp」という アドレスに送られてきたメールはまず 「hogehoge@grey.ep.sci.hokudai.ac.jp」というメールアドレスに 配送される.
  2. そこでホスト側がメールを受け取ればこのメール配送は終了する
  3. grey.ep.sci.hokudai.ac.jp でメールを受け取ってもらえない 場合は次の候補である 「hogehoge@orange.ep.sci.hokudai.ac.jp」にメールが送られる.

専攻サーバでは2つのメールサーバを用意しているため このような設定になるが, 3つ以上ある場合には更にこの MX レコードに書き足せばよい.

[5.3.7] A --ホスト名に対応するIPアドレスを記述--

以下の部分は正引きのゾーンデータを記述してある A (Address) レコードである.

yellow.ep.sci.hokudai.ac.jp.          IN      A       133.87.45.70
blue.ep.sci.hokudai.ac.jp.            IN      A       133.87.45.66
                              :

注意して欲しいのは, この A レコードは, 「ホスト名」に対応する「IPアドレス」を指定しているものであって, 「IPアドレス」に対応する「ホスト名」を指定しているものではない.

[5.3.8] CNAME --別名--

以下は, ホスト名に別名を与える CNAME (Canonical NAME) レコードである.

www.ep.sci.hokudai.ac.jp.             IN      CNAME   orange.ep.sci.hokudai.ac.jp.
mail.ep.sci.hokudai.ac.jp.            IN      CNAME   grey.ep.sci.hokudai.ac.jp.

この指定によって, 一つのホストが複数の名前をもつことが可能になる. ここでは別名を一つづつ指定してあるだけだが, 一つのホストに対し 複数の別名を与える事も可能である.

[5.3.9] PTR --IPアドレスに対応するホスト名を記述--

この ep.zone には記述していないが, 逆引きのゾーンデータを記述するものとして PTR (PoinTeR) レコードがある.

例えば, 先ほどの A レコードに対応した逆引きゾーンデータを 用意しようとすれば, 以下のように PTR レコードを書けば良い.

70.45.87.133.in-addr.arpa.   IN      PTR   yellow.ep.sci.hokudai.ac.jp.
66.45.87.133.in-addr.arpa.   IN      PTR   blue.ep.sci.hokudai.ac.jp.
                              :

このレコードは前述した db.127 や, 後述する local.rev で見ることが出来る.

なお, このレコードは同じゾーンファイル内で A レコード とは共存できない. そのため, 正引きゾーンファイルと逆引きゾーンファイルが 別々に必要となる.

[5.3.10] 簡略化した ep.zone

上記の ep.zone は以下のように簡略化して書くことも出来る.

$TTL    86400
@  IN   SOA   yellow.ep.sci.hokudai.ac.jp. postmaster.ep.sci.hokudai.ac.jp. (
              2002022840         ;Serial
                   10800         ;Refresh
                    3600         ;Retry
                  604800         ;Expire
                 86400 )         ;Default TTL
;
;    local loopback address
;
localhost       IN     A       127.0.0.1
;
;
;    Name Server record
;
@           IN      NS      yellow.ep.sci.hokudai.ac.jp.
@           IN      NS      blue.ep.sci.hokudai.ac.jp.
;
;
;    Mail eXchanger record
;
@           IN      MX      10 grey
@           IN      MX      20 orange
;
;
;    Address record
;
yellow            IN      A       133.87.45.70
blue              IN      A       133.87.45.66
orange            IN      A       133.50.160.51
grey              IN      A       133.50.160.50
green             IN      A       133.50.160.55
;
;
;    Canonical NAME record
;
www             IN      CNAME   orange
mail            IN      CNAME   grey

この場合, 「@ (アットマーク)」やホスト名の後ろには named.conf で以下のように「ドメイン」として指定されている 「ep.sci.hokudai.ac.jp」が補完されている.

zone "ep.sci.hokudai.ac.jp" {
        type master;
        file "ep.zone";
};

補完されるか, されないかは最後に「.(ドット)」が つくかつかないかで決まる. 例えば, うっかり以下のように記述すると,

yellow.ep.sci.hokudai.ac.jp   IN   A   133.87.45.70

左のホスト名は「yellow.ep.sci.hokudai.ac.jp.ep.sci.hokudai.ac.jp」 と解釈されてしまう. そういった訳で, 最後のドットは重要なので記述には気をつけること. (当然これは A レコードに限った事ではない)

ちなみに, 省略形を使用するからといってそのゾーンファイル全てを 省略形で記述する必要は無い.

[5.3.11] ep.zone のセッティング

では上記の ep.zone を /var/named/ 以下に移動しよう. ep.zone は ここ から入手できる.

これを移動し, パーミッションを設定する.

# mv ep.zone /var/named/ [Enter]
# chmod 644 /var/named/ep.zone [Enter]
# chown root:root /var/named/ep.zone [Enter]

[5.4] ループバックアドレスの正引き用ゾーンファイル

ループバックアドレスの正引き用ゾーンファイル local.zone は 以下のように記述される.

$TTL    86400
@   IN   SOA   yellow.ep.sci.hokudai.ac.jp. postmaster.ep.sci.hokudai.ac.jp. (

               2002030100       ; Serial
                    10800       ; Refresh
                     3600       ; Retry
                   604800       ; Expire
                    86400 )     ; Default TTL
;
@        IN      NS       yellow.ep.sci.hokudai.ac.jp.
@        IN      NS       blue.ep.sci.hokudai.ac.jp.
@        IN      A        127.0.0.1

このファイルは ここ から入手できるが, 一つ変更しなければならない部分がある.

上記で赤く記述してある Serial の部分で, ここの数値を現在の時間に書き換えてほしい.

書き方は, [西暦(4桁)][月(2桁)][日(2桁)]00 である.

つまり, 2002/03/03 ならば 2002030300 となる. この値が何を意味するかは Secondary DNS サーバ構築ドキュメントの [2.2] ゾーン転送用パラメータ で解説する.

最後に, このゾーンファイルも /var/named/ 以下に移動し, パーミッションを設定する. named.root や ep.zone の場合と同様に作業せよ.


[5.5] ループバックアドレスの逆引き用ゾーンファイル

ループバックアドレスの逆引き用ゾーンファイル local.rev は 以下のように記述される.

$TTL    86400
@   IN   SOA   yellow.ep.sci.hokudai.ac.jp. postmaster.ep.sci.hokudai.ac.jp. (

               2002030100       ; Serial
                    10800       ; Refresh
                     3600       ; Retry
                   604800       ; Expire
                    86400 )     ; Default TTL
;
@        IN      NS       yellow.ep.sci.hokudai.ac.jp.
@        IN      NS       blue.ep.sci.hokudai.ac.jp.
1        IN      PTR      localhost.

ここ から入手できる.

ここの Serial も local.zone の時と同様に, 現在の年月日に変更した後, /var/named/ 以下に移動すること.


[5.6] 設定完了

以上で設定完了である. 次はこの設定で正常に作動するか確認を行う.


6. 動作確認

うまく, DNSサーバが動作しているか確認を行う.

まずは, bind を再起動させる. (ちなみに, 再起動させるとキャッシュはクリアされる)

# /etc/init.d/bind9 stop [Enter]
Stopping domain name service: named.
# /etc/init.d bind9 start [Enter]
Starting domain name service: named.

[6.1] ログを見る

ログから, ちゃんと各種ゾーンファイルが読み込まれているか確認する.

# grep named /var/log/daemon.log [Enter]
Mar 3 15:53:41 yellow named[7078]: starting (/etc/bind/named.conf). named 8.2.3-REL-NOESW Sat Jan 27 01:46:37 MST 2001 ^Ibdale@winfree:/home/bdale/debian/bind-8.2.3/src/bin/named
Mar 3 15:53:41 yellow named[7078]: hint zone "" (IN) loaded (serial 0)
Mar 3 15:53:41 yellow named[7078]: master zone "ep.sci.hokudai.ac.jp" (IN) loaded (serial 2002022840)
Mar 3 15:53:41 yellow named[7078]: master zone "localhost" (IN) loaded (serial 2002030100)
Mar 3 15:53:41 yellow named[7078]: master zone "0.0.127.in-addr.arpa" (IN) loaded (serial 2002030100)
Mar 3 15:53:41 yellow named[7078]: listening on [127.0.0.1].53 (lo)
Mar 3 15:53:41 yellow named[7078]: listening on [133.87.45.70].53 (eth0)
Mar 3 15:53:41 yellow named[7078]: Forwarding source address is [0.0.0.0].1035
Mar 3 15:53:41 yellow named[7079]: Ready to answer queries.

各種ゾーンファイルがこのようにちゃんと読み込まれていれば良い. ちなみに, このログには Serial Number も表示されているのがわかる.


[6.2] host を使う

次に host コマンドで確認する.

[6.2.1] サーバ自身のホスト, アドレス情報を呼び出す.

まずは このDNSサーバ に存在するホスト名やIPアドレスが 呼び出せるか確認する.

$ host yellow [Enter]
yellow.ep.sci.hokudai.ac.jp has address 133.87.45.70

完全なドメインを一覧表示する. これによりドメイン内のすべてのサーバが一覧表示される.

$ host -l ep.sci.hokudai.ac.jp [Enter]
ep.sci.hokudai.ac.jp name server yellow.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp name server blue.ep.sci.hokudai.ac.jp.
xxxxx.ep.sci.hokudai.ac.jp has address 133.50.xxx.xxx
xxxxx・・・

[6.2.2] 他のネームサーバの情報を得られるか確認.

$ host www.debian.or.jp [Enter]
www.debian.or.jp is an alias for osdn2.debian.or.jp.
osdn2.debian.or.jp has address 202.221.179.45

$ host 210.148.223.7 [Enter]
7.223.148.210.in-addr.arpa domain name pointer www.jpcert.or.jp.

[6.2.3] サーバのゾーン情報の各種レコードを取り出す.

SOA レコードを取り出してみる.

$ host -t soa ep.sci.hokudai.ac.jp [Enter]

ep.sci.hokudai.ac.jp SOA yellow.ep.sci.hokudai.ac.jp. 
postmaster.ep.sci.hokudai.ac.jp. 
2007050264 10800 3600 604800 86400


$ host -t soa 0.0.127.in-addr.arpa [Enter]

0.0.127.in-addr.arpa SOA blue.ep.sci.hokudai.ac.jp. 
postmaster.ep.sci.hokudai.ac.jp. 
2007031700 10800 3600 604800 86400

            

NS レコードを取り出してみる.

$ host -t ns ep.sci.hokudai.ac.jp [Enter]

ep.sci.hokudai.ac.jp name server yellow.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp name server blue.ep.sci.hokudai.ac.jp.

            

MX レコードを取り出してみる.

$ host -t mx ep.sci.hokudai.ac.jp [Enter]

ep.sci.hokudai.ac.jp mail is handled by 10 grey.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp mail is handled by 20 orange.ep.sci.hokudai.ac.jp

            

全てのクエリタイプの情報を見る.

$ host -a ep.sci.hokudai.ac.jp [Enter]

Trying "ep.sci.hokudai.ac.jp"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3214
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 2, ADDITIONAL: 4

;; QUESTION SECTION:
;ep.sci.hokudai.ac.jp.          IN      ANY

;; ANSWER SECTION:
ep.sci.hokudai.ac.jp.   86400   IN      MX      10 grey.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp.   86400   IN      MX      20 orange.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp.   86400   IN      NS      yellow.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp.   86400   IN      NS      blue.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp.   86400   IN      SOA     yellow.ep.sci.hokudai.ac.jp. post
master.ep.sci.hokudai.ac.jp. 2007050264 10800 3600 604800 86400

;; AUTHORITY SECTION:
ep.sci.hokudai.ac.jp.   86400   IN      NS      yellow.ep.sci.hokudai.ac.jp.
ep.sci.hokudai.ac.jp.   86400   IN      NS      blue.ep.sci.hokudai.ac.jp.

;; ADDITIONAL SECTION:
grey.ep.sci.hokudai.ac.jp. 86400 IN     A       133.50.160.50
orange.ep.sci.hokudai.ac.jp. 86400 IN   A       133.50.160.51
yellow.ep.sci.hokudai.ac.jp. 86400 IN   A       133.87.45.70
blue.ep.sci.hokudai.ac.jp. 86400 IN     A       133.87.45.66

Received 261 bytes from 127.0.0.1#53 in 0 ms

            

ここまでの情報がちゃんと取り出せるようであれば, DNS サーバは正常に機能しているとして良い.


[6.3] /etc/resolv.conf に他のDNSサーバを書き加える.

[3.1.1] /etc/resolv.conf の書き換え において, このコンピュータが参照するDNSサーバを自分自身のみとしたが, Secondary DNS サーバなど, そのネットワークで信頼の置ける他の DNS サーバを書き加えておく. (要するに, このコンピュータを構築した際に設定してあったDNSサーバ を再び使用するということ)

# emacs /etc/resolv.conf [Enter]           (vi でもなんでもいいけど)

ただし, このDNS サーバは Primary DNS サーバとして構築されているので, 自身が最初に問い合わせを行うDNS サーバは自分にしておくこと.

search ep.sci.hokudai.ac.jp
nameserver 127.0.0.1
nameserver 133.87.45.66
nameserver 133.87.1.11

[6.4] もう少し nslookup を使い込む (おまけ)

nslookup には上記で使用した以外にもいろいろ便利な機能があるので 少し紹介しておく.

既に飽きるほど nslookup を使い込んでいる人は 7. gate システムを利用したゾーンファイル作成 に進むと良いだろう.

[6.4.1] 他の DNSサーバを参照する.

普通, nslookup コマンドを使用すると, /etc/resolv.conf で指定された DNS サーバに問い合わせを行うが, 別の DNS サーバに対して問い合わせを 行うことも出来る.

サーバの切り替えには server または lserver コマンドを使用する. この2つのコマンドの違いは, server コマンドは切り替える先の ネームサーバのアドレスを現在問い合わせ先にしているネームサーバに 問い合わせるのに対し, lserver は nslookup 起動時のネームサーバ に問い合わせる点である.

$ nslookup [Enter]
Default Server:  localhost   ← resolv.confで指定されている
Address:  127.0.0.1             ネームサーバに問い合わせる

> server a.root-servers.net [Enter]
Default Server:  a.root-servers.net   ← ルートネームサーバに
Address:  198.41.0.4                     問い合わせをおこなってみた

> server localhost [Enter]
*** Can't find address for server localhost: Non-existent host/domain
   ↑ ルートネームサーバに「localhost」を問い合わせてみたが
      ルートネームサーバは「localhost」を定義していないので返答が無い

> lserver localhost [Enter]   ← nslookup 起動時のネームサーバに問い合わせている
Default Server:  localhost   ← 定義されているので
Address:  127.0.0.1             返事が返ってくる.

>

[6.4.2] ネームサーバのゾーン情報を引き出す.

既に何度か登場しているが, ゾーン情報を引き出すには ls コマンドを指定する. ls コマンドの後に ゾーン名 を入力する事で, そのゾーン名をもつゾーンファイルから対応情報を引き出す.

なお, 引き出せるのは そのネームサーバのもつゾーン情報のみ なので, 他のゾーン情報を得ようとする場合は上記の server (lserver) コマンドで他のネームサーバを参照する事

使い方は [6.2.1] サーバ自身のホスト, アドレス情報を呼び出す. を参照してほしい.

[6.4.3] nslookup の設定値一覧

nslookup の設定には set コマンドを使う

まず, 現在の設定をみるためには set コマンドに all オプションをつける.

> set all [Enter]
Default Server:  localhost
Address:  127.0.0.1

Set options:
  nodebug         defname         search          recurse
  nod2            novc            noignoretc      port=53
  querytype=A     class=IN        timeout=5       retry=2
  root=a.root-servers.net.
  domain=ep.sci.hokudai.ac.jp
  srchlist=ep.sci.hokudai.ac.jp

以上のような出力が得られたことと思う. いくつかについて簡単に説明すると,

help コマンドを使用するとこの設定値についての 情報を見ることが出来るだろう.

[6.4.4] 問い合わせるレコードの設定

ゾーンデータの中のどの情報( レコード ) を問い合わせるのかを querytype で指定している. これを変更するには set コマンドの後に type または q オプションをつけ, 最後に問い合わせるレコード を指定する.

なお, 指定できるのは以下の 6 つである.

具体的な使い方は [6.2.3] サーバのゾーン情報の各種レコードを取り出す. を参照してほしい.

[6.4.5] ドメイン名の補完

defname がオンになっていると, domain で 指定されているドメイン名が自動的に補完される. (この domain には /etc/network/interfaces に 書き込まれているドメイン名が指定されている)

> set def [Enter]   ← defname をオンにする.
> yellow [Enter]
                        :
Name:    yellow.ep.sci.hokudai.ac.jp   ← defname で指定されている 
Address:  133.87.45.70                   "ep.sci.hokudai.ac.jp" が補完されている

> set nodef [Enter]   ← defname をオフにする.
> yellow [Enter]
                        :
*** localhost can't find yellow: Non-existent host/domain
             ↑ defname が補完されない.

しかし, ホスト名の後ろに「.( ドット )」をつける ことで, 補完しないようにする事も可能である.

> set def [Enter]   ← defname をオンにする.
> yellow. [Enter]   ← .(ドット)を最後につける
                        :
*** localhost can't find yellow: Non-existent host/domain
             ↑ defname が補完されない.

[6.4.6] 再帰的な問い合わせ

recurse がオンになっていると再帰的な問い合わせを行い, オフになっていると再帰的な問い合わせを行わない.

> set rec [Enter]   ← recurse をオンにする.
> www.debian.or.jp. [Enter]
                        :
Name:    www.debian.or.jp   ← 他のネームサーバからの 
Address:  210.157.158.37       情報を再起的に問い合わせてくる

> exit [Enter]   ← 一度 nslookup を停止.
# /etc/init.d/bind restart [Enter]   ← bind を再起動してキャッシュをクリアする.
new pid is 1658
$ nslookup [Enter]
                        :
> set norec [Enter]   ← recurse をオフにする.
> www.debian.or.jp [Enter]
                        :
Served by:
- E.ROOT-SERVERS.NET   ← まずはルートネームサーバに問い合わせるよう指示される.
          192.203.230.10
                        :
> server e.root-servers.net [Enter]   ← ルートネームサーバに移動
                        :
> www.debian.or.jp [Enter]
                        :
Served by:
- DNS0.SPIN.AD.jp   ← jp ドメインを保持するネームサーバを指示される.
          165.76.0.98
                        :
> server dns0.spin.ad.jp. [Enter]   ← 移動
                        :
> www.debian.or.jp [Enter]
                        :
Name:    www.debian.or.jp   ← このネームサーバが情報を 
Address:  210.157.158.37       保有しているので問い合わせに答える.

以上のように recurse をオフにして目的のドメイン名を 探すと, 実際に ネームサーバがどのようにドメイン名を探索しているか がわかる.

[6.4.7] デバック機能

デバック機能がオンになっていると, 応答するパケットの情報を 見ることができる.

> set debug [Enter]   ← debug をオンにする.
> yellow.ep.sci.hokudai.ac.jp. [Enter]
                        :
HEADER:    ← パケット情報が表示される. 
    opcode = QUERY, id = 9020, rcode = NOERROR
    header flags:  response, auth. answer, want recursion, recursion avail
> set nodebug [Enter]   ← debug をオフにする.

d2 がオンになっていると, 更に詳細な情報が表示される.

[6.4.8] nslookup の設定ファイル

nslookup 起動時に毎回 set コマンドを使用するのが面倒な場合は 設定ファイルを読み込ませても良い.

設定ファイルのは ~/.nslookuprc に書く.

例えば, 以下のように書くと, nslookup 起動時に 「デフォルトドメインをつけない」「非再帰的に問い合わせる」 という設定になる.

set nodef
set norec

7. gate システムを利用したゾーンファイル作成

最後に, gate-toroku-system をインストールし, ep.zone が 自動生成されるようにする.


[7.1] gate システムインストール時の注意点

基本的にインストールは gate 登録システムインストールの手引き に従って行えばよい.

ただ, gate システムの設定ファイルである /etc/gate.conf を編集するに あたって DNS サーバに関係する部分だけ抜き出して説明する.

[2002/03/03] 今のところ, デフォルトの gate.conf のままで 使用できるはずである.

[7.1.1] ゾーンファイルを置くディレクトリの位置

ゾーンファイルを置くディレクトリの位置は $VAR_NAMED_DIR で指定する.

$VAR_NAMED_DIR = '/var/named';

この設定は named.conf の 以下の赤字の部分と合わせなければならない.

options {
        directory "/var/named";
};

[7.1.2] ゾーンファイル名

作成されるゾーンファイル名は以下の $ZONE_FILE で指定される.

$ZONE_FILE = "$VAR_NAMED_DIR/ep.zone";

この設定は named.conf の以下の赤字の部分と合わせなければならない.

zone "ep.sci.hokudai.ac.jp" {
        type master;
        file "ep.zone";
};

[7.1.3] サービスを行うドメイン名

専攻ネットワークが受け持つドメインは「ep.sci.hokudai.ac.jp」である. (将来的には更にこれにサブドメインが増える可能性もあるが)

このドメイン名は $DOMEIN で指定する. ( 本当は DOMAIN だけど, 気が付かなかったことに)

$DOMEIN = "ep.sci.hokudai.ac.jp";

この設定は named.conf の以下の赤字の部分と合わせなければならない.

zone "ep.sci.hokudai.ac.jp" {
        type master;
        file "ep.zone";
};

なお, 他にもここの指定は ep.zone の MX レコードや NS レコードにおいて使用される.

[7.1.4] DNS サーバのホスト名の指定

DNS サーバは以下の配列 @DNS_SERVERS にて指定する.

@DNS_SERVERS = ( "yellow.ep.sci.hokudai.ac.jp", 
                 "blue.ep.sci.hokudai.ac.jp",
               );

この配列では順番が重要で, 配列の最初に書かれたホストが Primary DNS サーバと認識され, その他のホストは全て Secondary DNS サーバと見なされる.

つまり, gate システムによって ep.zone が作成されるのは 1番目に書かれたホストのみ となる.

この設定は他にも, ep.zone の SOA レコードや NS レコードにも反映される.

[7.1.5] ゾーンの管理者のメールアドレス

ep.zone の SOA レコード に書かれる管理者のメールアドレスは $POSTMASTER で指定する.

$POSTMASTER = "postmaster".'.'.$MAILHOST;

[7.1.6] ep ドメインに来たメールを配送するホスト名

ep.zone の MX レコード の最優先のホスト名は $MAIL_SERVER で指定する.

$MAIL_SERVER = "grey.ep.sci.hokudai.ac.jp";

[7.2] ep.zone 生成

gate-daily によって gate-db-to-zone が動作し, ep.zone が作成されるはずである. (gate コマンドについては gate システムコマンド を参考にしてほしい)

※ これによって, 元々あった ep.zone は削除されるので注意

作成された ep.zone を見てみる.


  

ちゃんと作成されているだろうか?    6. 動作確認 で動作を確認してほしい.


8. 設定ファイル置き場

本ドキュメントにおいて使用した設定ファイルを 以下の場所に置く. 必要ならばコピーして使用してほしい.


▲戻る     作成日:2002/02/27(森川靖大)