インターネットを支える屋台骨である DNS(Domain Name System)。詳しいことはよく分かりませんが、
CNAME を利用したが為に導入しました。ほとんど参考書の引用になっています。
ちなみに DNS とは仕組みを指し、BIND はその実装を行ったソフトウェアを指します。(Windows NT の為に Microsoft が用意した DNS サーバも位置づけは BIND と同じです。)
bind-8.2.3 をインストール。
bind-8.2.2P7 を make; make install でインストール。bind-8 系はディレクトリ直下に展開されてしまう。
bind-9.0.0.tar.gz をインストール。この tar ボールは bind-9.0.0 ディレクトリ以下に展開されるようになっています。 ./configure; make; make install で導入完了。 これによって named は /usr/local/sbin に nslookup は /usr/local/bin に作成されるようです。
しかし、BIND 8 で利用していた named.conf をそのまま BIND 9 に流用するとエラーで起動できず、 原因もよく分からないので BIND 8 を利用しています。
bind-src.tar.gz を展開して # cd src/; make; make install。なんで bind の tar ボールはディレクトリ込みじゃないのだろう...
rpm -Uvh bind-8.2.2_P3-0.5.2.i386.rpm で楽々インストール。
リゾルバ(名前解決)の動作方法を設定するファイルです。特に変更する必要は無いようです。 order(名前解決の順序)は、まず /etc/hosts を見て、次に BIND に問い合わせる、ということでしょうか。
order hosts,bind multi on
リゾルバの動作を設定するファイルです。
search gainground.net nameserver 127.0.0.1 nameserver 202.26.1.33 nameserver 202.26.1.170
FQDN でないホスト名が入力された場合は search で指定したドメインを検索します。 この場合、nslookup で単に www と入力した場合は gainground.net が補完されて www.gainground.net を問い合わせることになります。 nameserver は問い合わせる DNS サーバーを指定します。IP アドレスではなくホスト名でも大丈夫でしょうが、 その場合ホスト名も引くことになり無駄な処理が発生しますので IP アドレスで指定するのが無難でしょう。 nameserver は上から順に問い合わせます。
まずは BIND の初期設定ファイルを編集します。初期設定ファイル中では改行のみの行は無視され、C、C++、シェルスクリプトのいずれにもおけるコメントの指定が有効です。
/* C style line comment */
/*
* C style multi line comment
*/
// C++ style line comment
# shell script style line comment
インストール直後(bind-8.1.2-5vl1.i386.rpm)の状態では BIND はローカルループバックゾーン(127/8) のみを解決するようになっています。
// DNS clients at ganground.net acl "trusted" { localhost; 192.168.1.0/24; // Hosts at gainground.net }; // from who refuse acl "bogon" { 0.0.0.0/8; // Null Address 1.0.0.0/8; // reserved IANA, popular fakes 2.0.0.0/8; 192.0.2.0/24; // test address 224.0.0.0/3; // multicast address }; options { directory "/var/named"; allow-query { trusted; }; allow-transfer { none; }; blackhole { bogon; }; }; // root zone "." { type hint; file "named.cache"; }; // 127.0.0.0/24 loopback network zone "0.0.127.in-addr.arpa" { type master; file "named.local"; }; // primary zone zone "gainground.net" { notify no; type master; file "gainground.net"; }; // 192.168.1.0/24 zone "1.168.192.in-addr.arpa" { notify no; type master; file "192.168.1"; };
上のディレクティブから順に、acl "trusted" で問い合わせを受け付ける``信頼された''アクセス制御リストを作成。 LAN 内からの問い合わせしか受け付ける予定はないので localhost とローカルホストのアドレスを記述。
acl "bogon" では DoS 偽装アドレスとしてよく利用されるアドレスを定義しています。
options の directory ステートメントではゾーンデータベースファイルを置くディレクトリを指定します。 allow-query サブステートメントは DNS 問い合わせを受け付ける IP アドレスの設定を行います。 先ほど定義した trusted からの問い合わせのみ受け付けるように設定します。
ルートサーバリストファイルはデフォルトでは named.ca ですが、named.root または root.cache でも構いません。 要は自分が分かりやすい名前で統一した方がよいでしょう。
全てのゾーンデータファイルには $ORIGIN ステートメントを置くことが出来ます。 $ORIGIN ステートメントは文字 @ がリソースレコードの所有者に指定されたときに、 実際の処理で @ の代わりに配置する文字列を指定します。
しかし $ORIGIN は通常省略されますので、この場合は named.conf で指定されているものが使われます。 このピリオドがあるかないかはとても重要なのでゾーンファイルを作成するときには気をつけて下さい。
host → host.gainground.net と解釈される host. → host という解釈になる
ゾーン正引きファイルは、あるゾーンにおいてホスト名やドメイン名から IP アドレスを検索するためのデータベースファイルです。 リソースレコードのフィールドは、
で構成されますが、有効期限は省略されるのがほとんどで、クラスは CH(Chaos) と IN(Internet) があるものの、 IN 以外は使われることがないので実際は以下のようになります。
"所有者" については "ドメイン" と記述する場合もあるそうです。
型 | 機能 |
---|---|
SOA | ドメインの管轄権限を定義 |
NS | ドメインのネームサーバを定義 |
A | ホスト名から IP アドレスの対応を定義 |
PTR | IP アドレスからホスト名への対応を定義 |
MX | メールサーバを定義 |
CNAME | 別名を定義 |
私の環境の正引きファイル(/var/named/kynet.com)は以下のようになっています。
@ IN SOA netvine.kynet.com. root.netvine.kynet.com. ( ---(1) 2000020104 ---(2) シリアルナンバー 8H ---(3) リフレッシュ間隔 2H ---(4) 再試行時間 1W ---(5) 情報破棄時間 1D ---(6) 情報有効時間 ) IN A 192.168.1.1 IN NS netvine.kynet.com. ---(7) IN MX 10 mail.kynet.com. ---(8) localhost IN A 127.0.0.1 ---(9) netvine IN A 192.168.1.1 dhcp01 IN A 192.168.1.9 dhcp02 IN A 192.168.1.10 dhcp03 IN A 192.168.1.11 dhcp04 IN A 192.168.1.12 dhcp05 IN A 192.168.1.13 www IN CNAME netvine ---(10) proxy IN CNAME netvine ftp IN CNAME netvine mail IN CNAME netvine
上の正引きファイルに対する逆引きファイルを作成します。
@ IN SOA netvine.kynet.com. root.netvine.kynet.com. ( ---(1) 2000021203 8H 2H 1W 1D ) IN NS netvine.kynet.com. 1 IN PTR netvine.kynet.com. ---(2) 9 IN PTR dhcp01.kynet.com. 10 IN PTR dhcp02.kynet.com. 11 IN PTR dhcp03.kynet.com. 12 IN PTR dhcp04.kynet.com. 13 IN PTR dhcp05.kynet.com.
ループバック逆引きファイルはループバック IP アドレスからループバックホスト名を検索するために使われます。 説明は重複するので省略。
@ IN SOA netvine.kynet.com. root.netvine.kynet.com. ( 2000020101 8H 2H 1W 1D ) IN NS localhost. 1 IN PTR localhost.
なお、ループバック正引きに関する定義をゾーン正引きファイル(/var/named/kynet.com) に記述しているので ループバック正引きファイルは作成しません。
named を起動するには bind パッケージに含まれる ndc を利用すると楽です。 オプション無しで ndc を起動して help と打ち込めば分かるように、 Apache の apachectl などと使い方は大体一緒ですね。 設定ファイルを書き換えたら reload しましょう。
# ndc start
設定が正しく行われているかどうかホスト名を問い合わせてみます。
$ host www.kynet.com www.kynet.com is a nickname for netvine.kynet.com netvine.kynet.com has address 192.168.1.1
次に DNS が正しく動作しているかどうか nslookup で調べてみます。
$ nslookup Default Server: netvine.kynet.com Address: 192.168.1.1 >
nslookup をパラメータなしで実行するとデフォルトの DNS サーバを出力して入力待ちになります。
> netvine Server: netvine.kynet.com Address: 192.168.1.1 Name: netvine.kynet.com Address: 192.168.1.1
自分のホスト名を入力すると IP アドレスが引けます。今度は逆に IP アドレスを入力します。
> 192.168.1.1 Server: netvine.kynet.com Address: 192.168.1.1 Name: netvine.kynet.com Address: 192.168.1.1
CNAME も確認してみます。
> www.kynet.com Server: netvine.kynet.com Address: 192.168.1.1 Name: netvine.kynet.com Address: 192.168.1.1 Aliases: www.kynet.com
外部ホスト(Yahoo JAPAN)の情報を引いてみます。
> www.yahoo.co.jp Server: netvine.kynet.com Address: 192.168.1.1 Non-authoritative answer: Name: www.yahoo.co.jp Addresses: 210.152.236.52, 210.140.200.15, 210.140.200.16, 210.152.236.111 210.152.236.112, 210.152.236.113, 210.152.236.114, 210.152.236.115, 210.152.236.50 210.152.236.51
Non-authoritative answer は実際に外部 DNS に問い合わせたのではなく自前のキャッシュから引いた情報なので違うかもよ、という意味らしいです。
# ndc dumpdb
とするとデータベースファイルを格納しているディレクトリに named_dump.db という名前でキャッシュデータやヒントデータが書き出されます。
ルート DNS サーバーリストファイル、named.cache が無いのですが...
named.cache は名前空間のルートに相当する DNS サーバのリストです。 負荷を分散させるなど安全のために 13 個のサーバがリストされています。 最新のリストは ftp://rs.internic.net/domain/named.cache から取得する事が出来ます。
Internet Software Consortium - BIND
BIND 一次配布先。
bind-8.1 guide TOC
BIND のインストールから設定に至るまで詳しい解説があります。
BINDでDynamic DNS環境構築
@it のコンテンツ。BIND での Dynamic DNS 構築法がある。