Berkeley Internet Name Domain

/ ホーム(H) / Linux(V) / BIND

About

インターネットを支える屋台骨である DNS(Domain Name System)。詳しいことはよく分かりませんが、 CNAME を利用したが為に導入しました。ほとんど参考書の引用になっています。 ちなみに DNS とは仕組みを指し、BIND はその実装を行ったソフトウェアを指します。(Windows NT の為に Microsoft が用意した DNS サーバも位置づけは BIND と同じです。)


bind-8.2.3
2001/01/30

bind-8.2.3 をインストール。

2000/11/12

bind-8.2.2P7 を make; make install でインストール。bind-8 系はディレクトリ直下に展開されてしまう。

2000/11/07

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 を利用しています。

2000/10/15

bind-src.tar.gz を展開して # cd src/; make; make install。なんで bind の tar ボールはディレクトリ込みじゃないのだろう...

2000/03/06

rpm -Uvh bind-8.2.2_P3-0.5.2.i386.rpm で楽々インストール。


Setting
/etc/host.conf

リゾルバ(名前解決)の動作方法を設定するファイルです。特に変更する必要は無いようです。 order(名前解決の順序)は、まず /etc/hosts を見て、次に BIND に問い合わせる、ということでしょうか。

order hosts,bind
multi on
/etc/resolv.conf

リゾルバの動作を設定するファイルです。

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 は上から順に問い合わせます。

/etc/named.conf

まずは 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 以外は使われることがないので実際は以下のようになります。

所有者 IN 型 データ

"所有者" については "ドメイン" と記述する場合もあるそうです。

機能
SOAドメインの管轄権限を定義
NSドメインのネームサーバを定義
Aホスト名から IP アドレスの対応を定義
PTRIP アドレスからホスト名への対応を定義
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.
/var/named/named.local

ループバック逆引きファイルはループバック 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) に記述しているので ループバック正引きファイルは作成しません。

DNS の動作確認

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 という名前でキャッシュデータやヒントデータが書き出されます。

私的 Q & A

ルート DNS サーバーリストファイル、named.cache が無いのですが...

named.cache は名前空間のルートに相当する DNS サーバのリストです。 負荷を分散させるなど安全のために 13 個のサーバがリストされています。 最新のリストは ftp://rs.internic.net/domain/named.cache から取得する事が出来ます。


to do
タブン、いや絶対、最後の hosts に DHCP クライアント分だけのエントリを書き加えるのは間違っていると思う。 dhcpd.conf でネームサーバを指定しているのだから、当然 BIND と連携するのだろうけど、どうやるのだろう? Dynamic DNS という言葉も聞いたことがあるが、どうやら DHCP 側で取得したアドレスを設定ファイルに書き込むようにする仕組みらしいが...

Reference

Internet Software Consortium - BIND
BIND 一次配布先。

bind-8.1 guide TOC
BIND のインストールから設定に至るまで詳しい解説があります。

BINDでDynamic DNS環境構築
@it のコンテンツ。BIND での Dynamic DNS 構築法がある。


/ ホーム(H) / Linux(V) / BIND

Copyright © Kazuhiro Yoshikawa (KaZ). All rights reserved.
Last modified