文責 横畠 徳太・ 中神 雄一 タグ責 宮城洋介/横畠徳太
最新更新日:2001/07/6
インターネットでは、すべてのコンピューターがIPアドレス (例えば 192.168.0.21)を使って通信しているが、ユーザーは 一般にホスト名(例えば www-ep.sci.hokudai.ac.jp)を使って 通信している。そこで、このホスト名とIPアドレスを対応させること のできるコンピュータが必要になる。このサービスを行うのが DNS(Domain Name System)サーバである。
DNSサーバは自分が管理すべき範囲(これをゾーンという)の すべてのホストの情報をもち、クライアントからの要求に回答する。 クライアントからの要求には、ドメイン名からIPアドレスを検索し てくれという要求、IPアドレスからドメイン名を検索してくれとい う要求がある.またDNSサーバは、電子メールの配送先の指定にも用 いられる。
まず bind を入手し、インストールする。 Linux Debian を使っている場合、 debian パッケージを用いる 方法が簡単である。debian パッケージは、 以下の ftp サイトから bind_8.2.3-0.potato.1_i386.deb を取ってきてインストールする。
ftp://security.debian.org/debian-security/dists/potato/updates/main/binary-i386/
あるいは、
ftp://ftp.isc.org/isc/bind/src/8.2.3から以下のファイルを入手する。
bind-8.2-contrib.tar.gz bind-8.2-doc.tar.gz bind-8.2-src.tar.gz patch1
DNS サーバは通常、信頼性を確保するなどの理由から二重化構成をとり、 一つのゾーンを二つのネームサーバで管理する。これらの各々 を、優先順位によってプライマリ(一次) DNS サーバ、セカンダリ(二次) DNS サーバと呼ぶ。セカンダリ DNS サーバは常にプライマリ DNS サーバ から最新のドメイン情報をコピーし、プライマリ DNS サーバにトラブル があった場合にバックアップとしての機能を果たすことになる。
プライマリ DNSサーバ を運用するにあたって設定すべきファイルは 次の5つである。
これらのファイルについて、例を用いて説明してゆく。 ただしここで例として使う架空のドメイン名、DNS サーバ名などは、 次の通りである。
ドメイン ep.sci.hokudai.ac.jp プライマリ DNS サーバ yellow.ep.sci.hokudai.ac.jp セカンダリ DNS サーバ blue.ep.sci.hokudai.ac.jp サブネットアドレス 192.168.0.0
起動ファイルとは、ネームサーバデーモンである named が最初に読みこむ 初期設定ファイルで、/etc ディレクトリに named.conf というファイル名で置いておく。
起動ファイル named.conf は、bind をインストールしたときに /etc ディレクトリにデフォルトで入っている named.boot ファイルを書き換えて、perl プログラムを用いて変換することで作成 することができる。まず、/etc/bind/named.boot ファイルを以下の ように書き換える。
directory /var/named (1) cache . named.root (2) primary ep.sci.hokudai.ac.jp yellow.zone (3) primary 0.168.192.in-addr.arpa yellow.rev (4) primary 0.0.127.in-addr.arpa local.rev (5)
このファイルの意味は次の通りである。
(1) DNS サーバ yellow の持つデータベースファイルが納められている ディレクトリ /var/named が示されている。
(2) ルートネームサーバに関する情報が記述されたファイルが /var/named/named.rootであることを示す。2項目のドット "."を忘れてはならない。
(3) ep.sci.hokudai.ac.jp ドメインに属するホストに関するデータ が書かれたファイルが/var/named/yellow.zone であることを示す。1項目の"primary"は、現在設定しようとして いるマシンがプライマリ DNS サーバであることを示す。
(4) yellow が管理しているサブネット 133.87.45 にあるマシンの IPアドレスをホスト名に関する情報が /var/named/yellow.rev ファイルにあることを示す。
(5) ループバックという、1台のマシンの中で使われる閉じたネットワークにおける 情報が/var/named/local.rev にあることを示す。 ループバックネットワークの ネットワークアドレスは127.0.0であり、localhostという自分 自身を指すホストがある。
次にこの named.boot ファイルを named.conf ファイルへ変換し、 /etc/named.conf を作成する。 変換には /usr/sbin にある named-bootconf という コマンドを用い、安全のため変換の作業は/tmp ディレクトリで 行なう。
# cd /etc/bind/ # cp named.boot /tmp # cd /tmp # named-bootconf < named.boot > named.conf # cp named.conf /etc/bind/
以上の作業を行なうと次のような /etc/bind/named.conf が作成される。 "/* */"で囲まれた部分(2)、 行頭に"//"や"#"が付く文はコメント文である (1)。
// generated by named-bootconf.pl (1) options { directory "/var/named"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ (2) // query-source address * port 53; }; // // Boot file for name server // // type domain source file options { directory "/var/named"; }; zone "." { type hint; file "named.root"; }; zone "ep.sci.hokudai.ac.jp" { type master; file "yellow.zone"; }; zone "0.168.192.in-addr.arpa" { type master; file "yellow.rev"; }; zone "0.0.127.in-addr.arpa" { type master; file "local.rev"; };
(失敗談)
bind 4 のマニュアルを読んで、起動ファイルが /etc/named.boot だとばかり
思っていた。/etc/named.conf を書き換えることはしなかったので、
いつまでたっても bind がキャッシュサーバとしてしか
動作しなかった。
続いて、DNS サーバが参照するルートドメインのネームサーバのIPアドレスと 名前が書かれているファイルを用意する。anonymous ftp を利用して、以下の サイトから named.root ファイルを入手し、/var/named/ディレクトリに置く。
ftp://ftp.rs.internic.net/domain
次に、 DNS サーバ が管理しているゾーン (ドメイン "ep.sci.hokudai.ac.jp")に属するマシンの ホスト名に関する情報をもつファイル(正びき用ゾーンファイル)を用意する。 このファイルに含めることのできる情報(レコード)は次の通りである。
(Aレコード )
ゾーンに含まれるマシンの名前(ホスト名)と IP アドレスを対応づける。
(CNAMEレコード )
ゾーンに含まれるマシンの別名を定義する。
(MXレコード )
ゾーン含まれるマシンに届くメールを転送する転送先のマシンを定義する。
以上のような情報を次のような形式で /var/named/yellow.zone ファイル として作成する。
@ IN SOA yellow.ep.sci.hokudai.ac.jp. postmaster.ep.sci.hokudai.ac.jp. ( (1) 199904151 ;Serial 604800 ;Refresh 86400 ;Retry (2) 2419200 ;Expire 604800 ) ;Default TTL IN NS yellow.ep.sci.hokudai.ac.jp. (3) IN A 192.168.0.30 (4) IN MX 10 blue.ep.sci.hokudai.ac.jp. (5) localhost IN A 127.0.0.1 (6) yellow IN A 192.168.0.30 green IN A 192.168.0.29 white IN A 192.168.0.28 red IN A 192.168.0.27 www IN CNAME red.ep.sci.hokudai.ac.jp. (7) blue IN A 192.168.0.26 pspace IN A 192.168.0.25 IN MX 10 blue.ep.sci.hokudai.ac.jp. (8)
このファイルの意味は次の通りである。
(1) SOA(start of authority)の後には、 このデータのためのプライマリDNSサーバの名前、 ( yellow.ep.sci.hokudai.ac.jp.)、このデータの管理責任者の メールアドレス( postmaster.ep.sci.hokudai.ac.jp.)が書かれ ている。名前の最後に"."を付けること、メールアドレスの"@" を"."に変えることを忘れないように。
(2) セカンダリDNSサーバを設定するときに 必要となる情報である。ここではこの通り書いておく。";"以下は コメント文である。
(3) ドメイン ep.sci.hokudai.ac.jp の DNS サーバが yellow.ep.sci.hokudai.ac.jp であることを示す。
(4) ドメイン ep.sci.hokudai.ac.jp の DNS サーバの IPアドレスが 133.87.45.30 であることを示す。
(5) ドメイン ep.sci.hokudai.ac.jp 宛に 来たメールがメールサーバ blue.ep.sci.hokudai.ac.jp に届くこと を示す。
(6) ループバックネットワーク内での自分自身("localhost")のアド レスが 127.0.0.1 であることを示す。
(7) ホスト www.ep.sci.hokudai.ac.jp の 別名が red.ep.sci.hokudai.ac.jp であることを示す。
(8) ホスト pspace.ep.sci.hokudai.ac.jp に来たメールが blue.ep.sci.hokudai.ac.jp に届くことを示す。
次に DNS サーバが管理しているゾーン (サブネット " 133.87.45 ")に属するマシンの、アドレスに関する 情報を持つファイル( /var/named/yellow.rev )を用意する。
このファイルでは、ゾーンに属するホストのIPアドレスをホスト名に対応 させる(PTR レコード)。 (1) ではサブネット 133.87.45 のドメイン名が ep.sci.hokudai.ac.jp であることを示している。
@ IN SOA yellow.ep.sci.hokudai.ac.jp. postmaster.ep.sci.hokudai.ac.jp. ( 199904151 ;Serial 604800 ;Refresh 86400 ;Retry 2419200 ;Expire 604800 ) ;Default TTL IN NS yellow.ep.sci.hokudai.ac.jp. IN PTR ep.sci.hokudai.ac.jp. (1) 30 IN PTR yellow.ep.sci.hokudai.ac.jp. 29 IN PTR green.ep.sci.hokudai.ac.jp. 28 IN PTR white.ep.sci.hokudai.ac.jp. 27 IN PTR red.ep.sci.hokudai.ac.jp. 26 IN PTR blue.ep.sci.hokudai.ac.jp. 41 IN PTR pspace.ep.sci.hokudai.ac.jp.
最後に、自分自身(localhost)を127.0.0 として認識するための ファイル(/var/named/local.rev)を用意する。
@ IN SOA yellow.ep.sci.hokudai.ac.jp. postmaster.ep.sci.hokudai.ac.jp. ( 199904151 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 86400 ) ; Default TTL ; IN NS yellow.ep.sci.hokudai.ac.jp. 1 IN PTR localhost.
以上5つのファイルが用意できたら、bind を起動する。root 権限で、 以下のコマンドを打ち込む。
# /etc/init.d/bind restartそして、以下のメッセージがすぐに出ることを確認する。
Stopping domain name service: named. Starting domain name service: named.
bind が正常に動作しているかどうかをきちんと確認するには、 syslogファイルに出力されたメッセージを見るとよい。syslog ファイル中の named に関係のある部分を抜きだして読む。
# grep named /var/log/daemon.log
設定に誤りがなければ次のようなメッセージが出る。
Sep 10 13:39:07 yellow named[11289]: starting. named 8.1.2-T3B Sun Jan 3 23:0:10 MST 1999 ^Ibdale@rover:/home/bdale/debian/bind-8.1.2/target/bin/named Sep 10 13:39:07 yellow named[11289]: cache zone "" (IN) loaded (serial 0) (1) Sep 10 13:39:07 yellow named[11289]: master zone "ep.sci.hokudai.ac.jp" (IN) loded (serial 199909101) (2) Sep 10 13:39:07 yellow named[11289]: master zone "0.0.127.in-addr.arpa" (IN) loded (serial 199908111) (3) Sep 10 13:39:07 yellow named[11289]: listening on [127.0.0.1].53 (lo) Sep 10 13:39:07 yellow named[11289]: listening on [133.87.45.70].53 (eth0) Sep 10 13:39:07 yellow named[11289]: Forwarding source address is [0.0.0.0].144 Sep 10 13:39:07 yellow named[11290]: Ready to answer queries.
(1) は bind が /var/named/named.root をきちんと読み込んでいることを示す。
(2) は bind が /var/named/yellow.zone をきちんと読み込んでいることを示す。
(3) は bind が /var/named/local.rev をきちんと読み込んでいることを示す。
(1)~(3)のいずれかでエラーが出ている場合、 それぞれのファイルに何らかの間違いがあるはずである。
次に、設定した DNS サーバのクライアントになって bind が正常に 動作しているか確かめる。クライアントが問い合わせる DNS サーバ のリストは、/etc/resolv.conf にある。今、DNS サーバであ る yellow が自分自身のクライアントになり、yellow の上で bind が正常に動いていることを確かめる。/etc/resolv.conf を以下のように書き換える。
nameserver 127.0.0.1 (1) nameserver 192.168.0.30 nameserver 192.168.0.26 domain ep.sci.hokudai.ac.jp (2)
(1) では、yellow が自分のマシン上 で動いている DNS サーバ (アドレスは 127.0.0.1 )のクライアントになることを示す。 参照するネームサーバは最大で3つまで登録できる。 (2)ではデフォルトドメインが ep.sci.hokudai.ac.jp であることを示している。
次に、実際に ネームサーバ yellow が正常に動作するかどうか を nslookup というツールを用いて確かめる。
$ nslookupyellow の管理するドメインに属するマシンの名前やそれ以外の ドメインに属するマシンの名前を聞いてみて、きちんとそのマシ ンの IP アドレスを調べることができるかを確かめる。
> red (1)
デフォルトドメインが ep.sci.hokudai.ac.jp であるため、 red とホスト名だけ聞く(1)と、 red.ep.sci.hokudai.ac.jp の IP を以下のように返す。
Server: localhost Address: 127.0.0.1 Name: red.ep.sci.hokudai.ac.jp Address: 192.168.0.27
どんなドメインに属するホストの IP アドレスでも調べることが できることを確かめる。
> www.nasada.go.jp Server: localhost Address: 127.0.0.1 Non-authoritative answer: Name: yyy.nasada.go.jp Address: 192.168.99.99 Aliases: www.nasada.go.jp
IP アドレスを入れてホスト名が返って来ることも同様に調べる。
> 192.168.0.41 Server: localhost Address: 127.0.0.1 Name: blues.ep.sci.hokudai.ac.jp Address: 192.168.0.41
つぎに NS レコード、 MX レコード、 CNAME レコードがきちんと読み込まれているかを 確かめる。
>set type=NS >ep.sci.hokudai.ac.jp Server: localhost Address: 127.0.0.1 ep.sci.hokudai.ac.jp nameserver = yellow.ep.sci.hokudai.ac.jp ep.sci.hokudai.ac.jp nameserver = blue.ep.sci.hokudai.ac.jp epns.ep.sci.hokudai.ac.jp internet address = 192.168.0.26 nsns.ep.sci.hokudai.ac.jp internet address = 192.168.0.30ep.sci.hokudai.ac.jp ドメインには3つのサーバが登録されていることが分かる
> set type=MX > ep.sci.hokudai.ac.jp Server: localhost Address: 127.0.0.1 ep.sci.hokudai.ac.jp preference = 10, mail exchanger = blue.ep.sci.hokudai.ac.jp
>set type=CNAME > www.ep.sci.hokudai.ac.jp Server: localhost Address: 127.0.0.1 www.ep.sci.hokudai.ac.jp canonical name = red.ep.sci.hokudai.ac.jp
セカンダリ DNS サーバはネットワークを通じて他のネームサーバから データをもらってくることで、ネームサービスのためのデータを得る。 セカンダリ DNS サーバがデータを読み出す相手を マスタサーバといい、 セカンダリ DNS サーバがマスタサーバからデータを読み出すことを ゾーン転送という。
セカンダリ DNS サーバを設定するにはプライマリ DNS サーバと同様に 起動ファイル、ルートネームサーバを参照するためのファイル、 ループバックの逆びき用のファイル、の3つを用意する。
起動ファイルは、基本的にはプライマリ DNS サーバと同じであるが、 少しだけ書き換える。まず 以下のように /etc/named.boot ファイル を書き直す。
directory /var/named cache . named.root secondary ep.sci.hokudai.ac.jp 192.168.0.30 yellow.zone (1) secondary 45.87.133.in-addr.arpa 192.168.0.30 yellow.rev (2) primary 0.0.127.in-addr.arpa local.rev
(1)(2)がプライマリのファイルを変更すべき ところである。"primary" を "secondary"にして、 セカンダリ DNS サーバのマスタサーバとなるホストのIPアドレスを書き加える。 この /etc/bind/named.boot ファイルを /named.conf ファイルに変換する方法は プライマリと全く同じである。root 権限で以下の操作を行なえばよい。
# cd /etc/bind/ # cp named.boot /tmp # cd /tmp # named-bootconf < named.boot > named.conf # cp named.conf /etc/bind/
続いてプライマリ DNS サーバと全く同じ /var/named/named.root、 /var/named/local.rev ファイルを用意すれば、セカンダリ DNS サーバの設定は完了である。
セカンダリ DNS サーバの設定が終ったら、プライマリの場合と同様に bind を起動させ、正常に動作しているかを確認する。 この作業も プライマリの場合 と同様である。