Linux BIND 第2回

この記事は2015年3月31日に書かれたものです。内容が古い可能性がありますのでご注意ください。


社内などに自前ルートDNSサーバを作ってみる

LANのなかにBINDで自前のルートDNSサーバを作って、そこを参照してJPドメインなども参照するようにする設定をする。

クエリの動きは以下のような感じにする。
Windowsクライアント → ローカルDNSサーバ(192.168.10.178) → ルートDNSサーバ(192.168.10.179) → jpドメインサーバ(192.168.10.173)

BINDのデフォルトの動作的には、

zone "." IN {
	type hint;
	file "ルートヒントファイル名";
};

という記述が /etc/named.conf にある場合はそれに従ってルートDNSサーバを探しにいく。
無い場合はデフォルトで内部にバイナリコードで埋め込まれたルートDNSサーバを参照しに行く。
という動作になる。

BINDのデフォルトの動作 参考
http://d.hatena.ne.jp/happs/20100304/1267706787

なのでローカルDNSサーバに別のルートヒントファイルを用意して、
そこから自前で作ったルートDNSサーバを参照しに行くようにする。

ローカルDNSサーバを作成(Windowsクライアントが参照する用)

このIPアドレスは 192.168.10.178

.(ルート)ドメインを管理するサーバの/etc/named.confに以下の設定を記述する

# vi /etc/named.conf
//zone "." IN {      ←こっちはコメントアウトする
//      type hint;
//      file "named.ca";
//};

zone "." IN {
        type hint;
        file "root.ca";
};

ローカルDNSサーバの/var/named以下のゾーンファイルに以下のような設定を記述する
自前のルートヒントファイルを用意する。

# vi /var/named/root.ca
; <<>> DiG 9.5.0b2 <<>> +bufsize=1200 +norec NS . @a.root-servers.net
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34420
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 20

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;.                              IN      NS

;; ANSWER SECTION:
.                       518400  IN      NS      test.root.net.

;; ADDITIONAL SECTION:
test.root.net.          3600000 IN      A       192.168.10.179

;; Query time: 147 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Mon Feb 18 13:29:18 2008
;; MSG SIZE  rcvd: 615

ルートヒントファイルは特殊なファイルなので書き方が異なる。
SOAレコードなどは必要ない。
またルートヒントファイルのアクセス権も適切にしなければいけない。
この場合は /var/named/root.ca のアクセス権をもともとあった named.ca というルートヒントファイルのようにあわせる必要がある。
そうしないと named が起動しない

# ls -l /var/named
-rw-r-----. 1 root  named 1892 10月 23 11:28 2013 named.ca
-rw-r--r--. 1 root  root   605 10月 23 11:42 2013 root.ca

ルートヒントのオーナーグループを named にする。

# chgrp named /var/named/root.ca

ルートヒントのアクセス権を 640 にする。

# chmod 640 /var/named/root.ca
# ls -l /var/named
-rw-r-----. 1 root  named 1892 10月 23 11:28 2013 named.ca
-rw-r-----. 1 root  named  605 10月 23 11:42 2013 root.ca

named の再起動

# /etc/init.d/named restart

.(ルート)ドメインを管理するサーバを作成

このIPアドレスは 192.168.10.179

.(ルート)ドメインを管理するサーバの/etc/named.confに以下の設定を記述する

# vi /etc/named.conf
//zone "." IN {      ←こっちはコメントアウトする
//      type hint;
//      file "named.ca";
//};

zone "." IN {
        type master;           //type をマスターにする。
        file "root.root";
};

.(ルート)ドメインを管理するサーバの/var/named以下のゾーンファイルに以下のような設定を記述する

# vi /var/named/root.root
# cat /var/named/root.root
$TTL 3600S
@       IN      SOA     dns     root (
        2013101701
        60S
        120S
        360S
        120S )
        IN      NS      dns
dns     IN      A       192.168.10.179
jp      IN      NS      dns.jp
dns.jp  IN      A       192.168.10.173

named の再起動

# /etc/init.d/named restart

JPドメインを管理するサーバを作成

このIPアドレスは 192.168.100.173

JPドメインを管理するサーバの/etc/named.confに以下の設定を記述する

# vi /etc/named.conf
zone "jp" {
        type master;
        file "jp";
};

※このサーバは /etc/named.conf に以下の設定が入っていても入っていなくても大丈夫

zone "." IN {
        type hint;
        file "named.ca";
};

JPドメインを管理するサーバの/var/named以下のゾーンファイルに以下のような設定を記述する

# vi /var/named/jp
$TTL 3600S
@       IN      SOA     dns     root (
                2013101701
                60S
                120S
                240S
                360S )
        IN      NS      dns
dns     IN      A       192.168.10.173
co      IN      NS      dns.co               //さらにサブドメインを定義する場合
dns.co  IN      A       192.168.10.150      //さらにサブドメインを定義する場合
ac      IN      NS      dns.ac               //さらにサブドメインを定義する場合
dns.ac  IN      A       192.168.10.151      //さらにサブドメインを定義する場合
jp.     IN      MX      100 1.1.1.1          //MXレコードを定義する場合
aaa     IN      A       10.1.1.10            //Aレコードを定義する場合

named の再起動

# /etc/init.d/named restart

確認

WindowsクライアントなどのDNSの参照を 192.168.10.178 (ローカルDNSサーバ用)にする。
クライアントからローカルDNSサーバに対して以下のようなクエリを投げるとIPが引けることが分かる。

C:Usersadmin>nslookup aaa.jp
サーバー:  UnKnown
Address:  192.168.10.178

権限のない回答:
名前:    aaa.jp
Address:  10.1.1.10

クエリの動き
Windowsクライアント → ローカルDNSサーバ(192.168.10.178) → ルートDNSサーバ(192.168.10.179) → jpドメインサーバ(192.168.10.173)

BINDサーバ上にネガティブキャッシュなどが残っているとうまく名前が引けないことがあるので、
ローカルDNSサーバ、ルートDNSサーバ、jpドメインサーバ上のキャッシュを以下のコマンドでクリアにしてから試すと良い。
# rndc flush

またこの場合外部のインターネットなどにある本物の jpドメインなどにはクエリが飛ばなくなる。
BINDはルートヒントファイルや他のゾーンファイルなどがある場合は、/etc/named.conf にしたがってそこを見に行き、
無い場合は内蔵されたバイナリのルートヒントの情報を参照してインターネットに抜けるからである。

  • このエントリーをはてなブックマークに追加

PAGE TOP