BINDのインストール

ダウンロード

以下のURLから、最新版のパッケージをダウンロードする。2005年6月11日現在は、bind-9.3.1 が最新であるので、そちらを使用する。

ダウンロード

インストール

ダウンロードが完了したら、パッケージを展開する。

$ tar zxpvf bind-9.3.1.tar.gz

configure、make、make install を行なう。特に設定すべきオプションもなく、簡単にインストールは完了する。

$ cd bind-9.3.1
$ ./configure
(中略)
$ make
(中略)
# make install

それなりに時間が掛かる。5分くらいで終了する。

BIND用のユーザー

BINDを操作するためのユーザーを作成する。既に作成済みの場合は、不要である。

# groupadd named
# useradd -g named -d /var/named -s /bin/false named

BINDのホームディレクトリ

BINDのホームディレクトリを作成する。BINDのユーザー同様、作成済みの場合は不要である。OSインストール時に、DNSサーバがインストールされていれば、この辺りは全て設定されていると思われる。

# mkdir /var/named/
# chown named.named /var/named/

内部向けDNS設定

BINDの肝は、全て設定にある。参考にしたサイトを紹介する。

内部向けDNSサーバの構築(自宅でLinuxサーバ)
主に設定はここを参考にした
BIND9で作るDNSサーバ(@IT)
一番最初に見たところ。前述サイトと合わせて見ると良いかも

named.conf

全ての基本。各設定ファイルの名前や場所を記載する。場所は、/etc/named.conf となる。セミコロンの付け忘れには、注意する。セミコロンを付け忘れた箇所の設定内容は、反映されない。

options {
        directory "/var/named";
        // 自分で解決出来ない場合は、プロバイダのDNSへ尋ねに行く
        forwarders {
                210.XXX.XX.XX;
                210.XXX.XX.XX;
        };
};

zone "." IN { // キャッシュサーバの設定
        type hint;
        file "named.ca";
};

zone "localhost" IN { // ローカルホストの正引き設定
        type master;
        file "localhost.zone";
        allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN { // ローカルホストの逆引き設定
        type master;
        file "named.local";
        allow-update { none; };
};

zone "omoshiro-joho.com" IN { // omoshiro-joho.comの正引き設定
        type master;
        file "omoshiro-joho.com";
};

zone "0.168.192.in-addr.arpa" IN { // omoshiro-joho.comの逆引き設定
        type master;
        file "0.168.192.in-addr.arpa";
};

正引き設定

ドメイン名以下の各ホストに対し、IPアドレスを設定する。設定するファイルは、/var/named/omoshiro-joho.com である。ドメイン名は、最後をドットで終えることに注意する。

$TTL    86400

// ネームサーバと管理者のメールアドレス(@を.に変えている)
@             IN SOA       pokota.omoshiro-joho.com. root.pokota.omoshiro-joho.com. (
                              42              ; serial (d. adams)
                              3H              ; refresh
                              15M             ; retry
                              1W              ; expiry
                              1D )            ; minimum

              IN NS        pokota.omoshiro-joho.com. // ネームサーバ
              IN A         192.168.0.3 // サブドメインを付けない場合の対応IPアドレス
router        IN A         192.168.0.1 // IPアドレスとホスト名の対応付け
pokota        IN A         192.168.0.3
miyu          IN A         192.168.0.5
princess      IN A         192.168.0.4

ftp           IN CNAME     pokota // 別名
dns           IN CNAME     pokota
A実際のアドレスを表している
NSネームサーバを表している
CNAME別名を表している

逆引き設定

IPアドレスからホスト名を設定する。設定するファイルは、/var/named/0.168.192.in-addr.arpa である。ドメイン名は、最後をドットで終えることに注意する。

$TTL    86400
@       IN      SOA     pokota.omoshiro-joho.com. root.pokota.omoshiro-joho.com.
  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN      NS      pokota.omoshiro-joho.com. // ネームサーバ

        IN      PTR     omoshiro-joho.com. // 解決するドメイン
        IN      A       255.255.255.0 // サブネットマスク

1       IN      PTR     router.omoshiro-joho.com. // 192.168.0.1 のホスト名を設定
3       IN      PTR     pokota.omoshiro-joho.com. // 192.168.0.3 のホスト名を設定
5       IN      PTR     miyu.omoshiro-joho.com. // 192.168.0.5 のホスト名を設定
4       IN      PTR     princess.omoshiro-joho.com. // 192.168.0.4 のホスト名を設定
PTR逆引きを表す

既存設定ファイルの変更

既存設定ファイルの内容が、DNSの内容と衝突しないように、変更を行なう。特にhostsファイルでは、自身のホスト名の設定を取り消す。詳細な内容については、上述で紹介したリンク先参照とする。

起動

マシンを再起動して、設定内容を確実に反映させる。その後、BINDを起動する。そういえば、結局 named ユーザーではなく、root で起動してる(汗。

# service named start

もしくは、

# /usr/local/sbin/named

これで、試しにブラウザから、miyu.omoshiro-joho.com と打ってみて、対象ホストのWebサイトが表示されたら成功である。外部のページも見れるか確認をする。見れない場合は、named.conf の forwarders 箇所を見直す。

もし、うまく行った場合も、/var/log/messages の出力を見て、問題がないか確認する。

続いて別ホストから、このDNSサーバを参照できるようにする。各クライアントから直接DNSサーバを指定しても良いが、ルータに指定して各クライアントがそれを参照する形の方が、後々便利である。

この際、既存のDNSサーバは、プライマリ・セカンダリ共に、削除をしておく(まだセカンダリDNSを作成していないので、空白にしておく)。プライマリが生きていれば、セカンダリの指定が何であろうが問題ないと思ったが、そうでもないようだ。ルータのDNSに、プライマリを自前のDNS、セカンダリを既存のDNSにしたところ、DNSサーバ以外の内部クライアントから、内部DNSが参照できなくなった(外部は参照できる)。ルータ上のセカンダリDNS指定を削除することで、この現象は解決した。

動作テスト

DNSの動作テストには、dig (/usr/local/bin/dig) というコマンドを利用する。

まずは、内部DNSで、ドメインを正引きできるか確認する。

[bokupi@pokota bokupi]$ /usr/local/bin/dig miyu.omoshiro-joho.com

; <<>> DiG 9.3.1 <<>> miyu.omoshiro-joho.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35250
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;miyu.omoshiro-joho.com.                IN      A

;; ANSWER SECTION:
miyu.omoshiro-joho.com. 86400   IN      A       192.168.0.5

;; AUTHORITY SECTION:
omoshiro-joho.com.      86400   IN      NS      pokota.omoshiro-joho.com.

;; ADDITIONAL SECTION:
pokota.omoshiro-joho.com. 86400 IN      A       192.168.0.3

;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jun 18 13:45:37 2005
;; MSG SIZE  rcvd: 93

続いて、内部DNSで、IPアドレスを逆引きできるか確認する。

[bokupi@pokota bokupi]$ /usr/local/bin/dig -x 192.168.0.5

; <<>> DiG 9.3.1 <<>> -x 192.168.0.5
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2330
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;5.0.168.192.in-addr.arpa.      IN      PTR

;; ANSWER SECTION:
5.0.168.192.in-addr.arpa. 86400 IN      PTR     miyu.omoshiro-joho.com.

;; AUTHORITY SECTION:
0.168.192.in-addr.arpa. 86400   IN      NS      pokota.omoshiro-joho.com.

;; ADDITIONAL SECTION:
pokota.omoshiro-joho.com. 86400 IN      A       192.168.0.3

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jun 18 13:48:25 2005
;; MSG SIZE  rcvd: 115

続いては、外部のドメインを正引きできるか確認する。これは、forwarder が正しく機能していることの確認となる。

[bokupi@pokota bokupi]$ /usr/local/bin/dig www.yahoo.co.jp

; <<>> DiG 9.3.1 <<>> www.yahoo.co.jp
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61227
;; flags: qr rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.yahoo.co.jp.               IN      A

;; ANSWER SECTION:
www.yahoo.co.jp.        125     IN      A       202.93.91.214
www.yahoo.co.jp.        125     IN      A       202.93.91.215
www.yahoo.co.jp.        125     IN      A       202.93.91.216
www.yahoo.co.jp.        125     IN      A       202.93.91.217
www.yahoo.co.jp.        125     IN      A       202.93.91.218
www.yahoo.co.jp.        125     IN      A       202.93.91.219
www.yahoo.co.jp.        125     IN      A       202.229.198.216
www.yahoo.co.jp.        125     IN      A       202.229.199.136
www.yahoo.co.jp.        125     IN      A       202.229.199.147
www.yahoo.co.jp.        125     IN      A       203.141.35.113
www.yahoo.co.jp.        125     IN      A       210.80.242.236
www.yahoo.co.jp.        125     IN      A       210.80.243.14
www.yahoo.co.jp.        125     IN      A       210.81.3.241
www.yahoo.co.jp.        125     IN      A       210.81.150.5

;; AUTHORITY SECTION:
yahoo.co.jp.            880     IN      NS      dnsg01.yahoo.co.jp.
yahoo.co.jp.            880     IN      NS      dnsn201.yahoo.co.jp.

;; ADDITIONAL SECTION:
dnsg01.yahoo.co.jp.     15541   IN      A       211.14.12.10
dnsn201.yahoo.co.jp.    48601   IN      A       202.229.198.120

;; Query time: 46 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jun 18 13:50:31 2005
;; MSG SIZE  rcvd: 332

続いては、外部のIPを逆引きできるか確認する。これは、forwarder が正しく機能していることの確認となる。

[bokupi@pokota bokupi]$ /usr/local/bin/dig -x 202.93.91.214

; <<>> DiG 9.3.1 <<>> -x 202.93.91.214
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12601
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;214.91.93.202.in-addr.arpa.    IN      PTR

;; ANSWER SECTION:
214.91.93.202.in-addr.arpa. 900 IN      PTR     i.top.vip.bbt.yahoo.co.jp.

;; AUTHORITY SECTION:
91.93.202.in-addr.arpa. 900     IN      NS      dnsg01.yahoo.co.jp.
91.93.202.in-addr.arpa. 900     IN      NS      dnsn201.yahoo.co.jp.

;; ADDITIONAL SECTION:
dnsg01.yahoo.co.jp.     900     IN      A       211.14.12.10
dnsn201.yahoo.co.jp.    900     IN      A       202.229.198.120

;; Query time: 33 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jun 18 13:51:44 2005
;; MSG SIZE  rcvd: 158

外部向け設定

参考にしたサイトは以下の通り。

内部向けの設定に、外部向け正引きの設定を追加する。具体的に必要となるのは、次の3点。

named.conf 修正

// generated by named-bootconf.pl

// ローカルネットの範囲を指定する
acl localnet {
        192.168.0.0/24;
        127.0.0.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.
         */
        // query-source address * port 53;

        // 問い合わせ元制限(デフォルとして指定)
        allow-query {
                localnet; // 冒頭で指定している
        };
        // 再帰検索制限(キャッシュサーバ利用)
        allow-recursion {
                localnet;
        };
        // 転送先制限
        allow-transfer {
                localnet;
        };

        forwarders {
                192.168.0.1; // ルータ
                210.135.90.1; // プロバイダのプライマリDNS
                210.135.65.2; // プロバイダのセカンダリDNS
        };
};

logging {
        // 所定のエラーログの出力を、抑制する
        category lame-servers { null; };
};

// 内部向けの設定(view に続く文字列は、何でも良い)
view "lan" {
        // マッチするのは、LAN環境のクライアントのみ
        match-clients {
                localnet;
        };
//
// a caching only nameserver config
//
zone "." IN {
        type hint;
        file "named.ca";
};

zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};

zone "omoshiro-joho.com" IN {
        type master;
        file "omoshiro-joho.com";
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "0.168.192.in-addr.arpa";
};
};

// 外部向けの設定
view "wan" {
        // 全てのクライアントにマッチ
        // (ただし、LAN環境のクライアントは、先に書かれた"lan"viewで処理される)
        match-clients {
                any;
        };

        // 外部向けドメイン正引きの設定
        zone "omoshiro-joho.com" IN {
                type master;
                file "omoshiro-joho.com.global";
                allow-query { any; };
        };
};

上側に記述されたviewから順番に、match-clients で指定された条件にマッチする view を探していく。

外部向けの正引き設定

$TTL    86400

@          IN SOA       omoshiro-joho.com. root.pokota.omoshiro-joho.com. (
                           42              ; serial (d. adams)
                           3H              ; refresh
                           15M             ; retry
                           1W              ; expiry
                           1D )            ; minimum

           IN NS        omoshiro-joho.com.
@          IN A         61.122.77.57

基本的に内部向けの正引き設定と同じである。今回は、サブドメインを何も指定しないため、A レコードは、@(ホスト名なしを意味する)に対して、グローバルIPを割り当てればOK。

外部向けDNSの動作テスト

DNSの動作テストには、dig (/usr/local/bin/dig) というコマンドを利用する。特に外部向けDNSは、正しく動作しないと自ドメインへのアクセスが不能になり、多大な影響をもたらすため、確実に動作テストを履行する。

$ /usr/local/bin/dig @61.122.77.57 omoshiro-joho.com

しかし、ルータなどを介して NAT を行なっている場合、正しい結果は得られない。ルータのWAN側IPアドレスである 61.122.77.57 を、LAN側IPアドレスとしてしまうためである。そこで、このコマンドは、外部から発行する必要がある。無料でそのようなサービスを実施しているサイトがあるので、下記に紹介しておく。

上記のサイトで、実行すると、下記のような結果レポートが出力される。

発行コマンド 「dig @61.122.77.57 omoshiro-joho.com」

------------------------------------------------------------------------


; <<>> DiG 9.2.4 <<>> @61.122.77.57 omoshiro-joho.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36430
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;omoshiro-joho.com. IN A

;; ANSWER SECTION:
omoshiro-joho.com. 86400 IN A 61.122.77.57

;; AUTHORITY SECTION:
omoshiro-joho.com. 86400 IN NS omoshiro-joho.com.

;; Query time: 158 msec
;; SERVER: 61.122.77.57#53(61.122.77.57)
;; WHEN: Sat Jun 18 16:10:59 2005
;; MSG SIZE rcvd: 65

digの実行ボタンの横の欄にドメイン名を、DNSサーバを指定場合の欄に、今回設定したDNSサーバのIPアドレスを入力する。すると、今回設定したDNSサーバが自身のドメイン名に関する問い合わせに対し、正しく応答しているかを確認できる。

ドメインのネームサーバ指定変更

レジストラのサイトなどに用意されている、ドメイン管理ツールにて、自ドメインのネームサーバを変更する。うちでは、ネットグルーヴ社からドメインを取得したので、そこの管理ツールをベースにした内容を、記載する。

まず、取得したドメインと同じドメインベースのDNSサーバを指定する場合は、先に「ホスト登録」を行なう必要がある。ここでサブドメインを何も指定しないとエラーになるので、適当に ns など入れて、次の画面で ns を消すことで、サブドメインなしのドメイン名で登録できる。

最後に、ホスト登録したネームサーバを、ドメインのプライマリネームサーバとして、設定する。

セカンダリサーバの設定

セカンダリサーバとは、プライマリサーバに障害が起きた場合の、予備用のDNSサーバである。プライマリサーバの情報を、逐次コピーしている。セカンダリサーバは自前で用意するのではなく、無料で公開されているサービスを利用する。

zoneedit で登録

これまで利用していた無料DNSサービスの、zoneeditを利用する。zoneedit では、セカンダリDNSサービスも提供している。登録方法については、やや分かりづらいので、下記サイトを参照する。

単純に設定の流れを述べると、上部メニューから「Advanced」と選択し、下部にある「Make this Zone a Slave/Secondary」を選択する。すると、セカンダリサーバの設定画面となるので、マスターDNSを自宅サーバに変更する。

named.conf の修正

以下に、修正部分を抜粋する。

view "wan" {
        match-clients {
                any;
        };

        zone "omoshiro-joho.com" IN {
                type master;
                file "omoshiro-joho.com.global";
                allow-query { any; };
                // セカンダリDNS の IPアドレスを指定
                allow-transfer { 216.122.4.160; };
                // 変更したら、セカンダリDNSサーバへ通知する
                notify yes;
        };

外部向け正引きの設定の修正

NSレコードに、セカンダリDNSサーバを追加する。

$TTL    86400

@               IN SOA       omoshiro-joho.com. root.pokota.omoshiro-joho.com. (
                                42              ; serial (d. adams)
                                3H              ; refresh
                                15M             ; retry
                                1W              ; expiry
                                1D )            ; minimum

                IN NS        omoshiro-joho.com.
                // セカンダリDNSサーバを指定する
                IN NS        ns13.zoneedit.com.
                IN A         61.122.77.57

ドメインのネームサーバ指定変更

ドメインレジストラのサイトへ行き、セカンダリネームサーバを設定する、zoneeditで表示された NameServer1 を指定すればよい。

動作テスト

これまでと同様に、dig コマンドを利用する。NS レコードに、zoneeditのネームサーバと、自身のネームサーバが表示されていることを確認する。反映されるまで、しばらく時間がかかるので、注意すること。

[bokupi@pokota bokupi]$ /usr/local/bin/dig @216.122.4.160 omoshiro-joho.com

; <<>> DiG 9.3.1 <<>> @216.122.4.160 omoshiro-joho.com
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44658
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;omoshiro-joho.com.             IN      A

;; ANSWER SECTION:
omoshiro-joho.com.      86400   IN      A       61.122.77.57

;; AUTHORITY SECTION:
omoshiro-joho.com.      86400   IN      NS      ns13.zoneedit.com.
omoshiro-joho.com.      86400   IN      NS      omoshiro-joho.com.

;; Query time: 179 msec
;; SERVER: 216.122.4.160#53(216.122.4.160)
;; WHEN: Sat Jun 18 22:58:54 2005
;; MSG SIZE  rcvd: 93

更にドメインの追加

複数のドメインを管理することもできる。

named.conf

まず、named.conf に、追加したいドメインについて記述する。

view "wan" {
        match-clients {
                any;
        };

 (中略)
        // 追加したいドメイン
        zone "tv-senshi.net" IN {
                type master;
                file "tv-senshi.net.global";
                allow-query { any; };
        };
};

外部向け正引きの設定

tv-senshi.net.global というファイルを作成する。

TTL    86400

@               IN SOA       tv-senshi.net. root.pokota.omoshiro-joho.com. (
                                42              ; serial (d. adams)
                                3H              ; refresh
                                15M             ; retry
                                1W              ; expiry
                                1D )            ; minimum

                IN NS        tv-senshi.net.
@               IN A         61.122.77.57

ドメインのネームサーバ指定変更

これまでと同様に、ネームサーバの登録を行なう。なお "tv-senshi.net" は、メインで使うドメインではないため、セカンダリDNSは設けていない。

問題点

インストールや運用のさいに遭遇した問題点を書いておきます。

内部向けと外部向けが正しく分岐処理されない

view による分岐処理が成功せず、常に最初の view の中身を実行してしまうため、外部からの問い合わせに対し、"192.168.0.3" といったローカルアドレスを返していた。

原因は、bind9 ではなく、既存の bind8 を起動していたためであった。bind8 は view には対応しておらず、起動時に文法エラーのメッセージが出ていた。実際の動作においては、view を無視する形で動作していた模様である。

起動に失敗

以下のようなログが出て、起動に失敗。これは、/var/run の所有者が root なのに、named ユーザーで起動したため、pid ファイルを作成する(deamon)ことができずに、発生している。kernel2.2 系で bind9 を利用時に起きる問題のようだが、応急処置として、/var/run のパーミッションを 0777 とした。

couldn't open pid file '/var/run/named.pid' : Permission denied

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-07-05 (土) 10:49:16