BIND9.7設定方法の変更点

CentOS5(RHEL5)系の BIND 9.3 と CentOS6(RHEL6)系の BIND 9.7 以上ではインストールファイル構成、動作する時のディレクトリ構成から chroot の動作の仕様が全然違います。

今まで BIND 9.3 に慣れていて、同じつもりで初期設定しようとしたら戸惑います。
CentOS6系の初期状態から運用していて yum update であるとき変わってしまって動かなくなったらしばし呆然とするでしょう。
ここに違いをメモしておきます。

■ BIND 9.3.x

(1) インストール

# yum install bind bind-chroot
# yum install caching-nameserver

(2) ファイル構成の確認

こうなっています。

/etc/named.conf  <<< /var/named/chroot/etc/ からシンボリックリンク
/etc/named.caching-nameserver.conf  <<< /var/named/chroot/etc/ からシンボリックリンク
/etc/named.rfc1912.zones  <<< /var/named/chroot/etc/ からシンボリックリンク
/var/named/named.ca  <<< /var/named/chroot/var/named/ からシンボリックリンク
/var/named/xxxxxxxxx.zone  <<< /var/named/chroot/var/named/ からシンボリックリンク
/var/named/chroot/etc/named.conf (新規作成、/etc/named.conf へシンボリックリンク)
/var/named/chroot/etc/named.caching-nameserver.conf  >>> /etc/ へシンボリックリンク
/var/named/chroot/etc/named.rfc1912.zones  >>> /etc/ へシンボリックリンク
/var/named/chroot/var/named/named.ca  >>> /var/named/ へシンボリックリンク
/var/named/chroot/var/named/xxxxxxxxx.zone  >>> /var/named/ へシンボリックリンク

※BIND 9.7 はシンボリックリンクではなく、モジュール起動時にマウントする仕様に変わっています。

(3) named.conf 作成

/var/named/chroot/etc/named.conf

//
// named.conf for Red Hat caching-nameserver
//

options {
	directory "/var/named";
	dump-file "/var/named/data/cache_dump.db";
		statistics-file "/var/named/data/named_stats.txt";
	/*
	 * 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;

	forwarders {
		8.8.8.8;	// Google Public DNS
		8.8.4.4;	// Google Public DNS
	};
};

//
// a caching only nameserver config
//
controls {
	inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
include "/etc/rndc.key";

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

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

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 "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
	type master;
	file "named.ip6.local";
	allow-update { none; };
};

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

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

パーミッションとシンボリックリンク

# chown root.named named.conf
# chmod 640 named.conf
# cd /etc/
# ln -s /var/named/chroot/etc/named.conf

(4) ゾーンファイルの追加

/var/named/chroot/etc/named.conf

...
// 逆引きゾーン追加(逆引きはなくてもいいけど)
zone "444.333.222.111.in-addr.arpa" IN {
	type master;
	file "111.222.333.444.rev";
	allow-update { none; };
};
// 正引きゾーン追加
zone "mydomain.com" IN {
	type master;
	file "mydomain.com.zone";
	allow-update { none; };
};

/var/named/chroot/var/named/111.222.333.444.rev (逆引きはなくてもいいけど)

$TTL 3600
@	IN	SOA 	host.mydomain.com. postmaster.mydomain.com. (
			2012070101 ; Serial
			3H	   ; Refresh
			15M 	   ; Rretry
			1W	   ; Expire
			3H	 ) ; Minimum
	IN	NS	dns.mydomain.com.
	IN	PTR 	www.mydomain.com.

/var/named/chroot/var/named/mydomain.com.zone

$TTL 3600
@	IN	SOA 	host.mydomain.com. postmaster.mydomain.com. (
			2012070101 ; Serial
			3H	   ; Refresh
			15M 	   ; Rretry
			1W	   ; Expire
			3H	 ) ; Minimum
	IN	NS	dns.mydomain.com.
	IN	MX 10	mail
	IN	A	111.222.333.444
mail	IN	A	111.222.333.444
www 	IN	A	111.222.333.444

シンボリックリンク作成

# cd /var/named
# ln -s /var/named/chroot/var/named/mydomain.com.zone
# ln -s /var/named/chroot/var/named/111.222.333.444.rev

設定ファイルの書式チェック

# named-checkconf

※エラーメッセージが出なければOK

起動・終了・再起動

# /etc/init.d/named start
# /etc/init.d/named stop
# /etc/init.d/named restart

■ BIND 9.7.x

(1) インストール

# yum -y install bind bind-chroot

※bind 9.7 以上の場合、caching-nameserver はない

(2) ファイル構成の確認

※bind 9.7 以上の場合、シンボリックリンクはない。

/etc/named.conf
/etc/named.rfc1912.zones ... named.conf に読み込む ローカルゾーンの宣言
/etc/named.iscdlv.key ... ISC DLV の DNSKEY と ルートDNSKEY
/etc/named.root.key ... ルートDNSKEY (named.iscdlv.key に含まれている)
/var/named/named.ca ... ルートサーバーのゾーン定義
/var/named/named.empty ... ローカルゾーン定義
/var/named/named.localhost ... ローカルゾーン定義
/var/named/named.loopback ... ローカルループバック
/var/named/data ... ゾーンファイルをここに保存する。 逆引きファイルも同じ。
/var/named/slaves ... スレーブデータをここに保存する。

chroot環境下では、named起動すると以下のようにマウントされる

/etc/named  → /var/named/chroot/etc/named
/var/named  → /var/named/chroot/var/named
/etc/named.conf  → /var/named/chroot/etc/named.conf
/etc/named.rfc1912.zones  → /var/named/chroot/etc/named.rfc1912.zones
/etc/rndc.key  → /var/named/chroot/etc/rndc.key
/usr/lib64/bind  → /var/named/chroot/usr/lib64/bind
/etc/named.iscdlv.key  → /var/named/chroot/etc/named.iscdlv.key
/etc/named.root.key  → /var/named/chroot/etc/named.root.key

これは

# df -ha

にて確認できる

(3) named.conf 作成

/etc/named.conf (デフォルト)

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
	listen-on port 53 { 127.0.0.1; };
	listen-on-v6 port 53 { ::1; };
	directory	"/var/named";
	dump-file	"/var/named/data/cache_dump.db";
		statistics-file "/var/named/data/named_stats.txt";
		memstatistics-file "/var/named/data/named_mem_stats.txt";
	allow-query 	{ localhost; };
	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;
	dnssec-lookaside auto;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";

	managed-keys-directory "/var/named/dynamic";
};

logging {
	channel default_debug {
		file "data/named.run";
		severity dynamic;
	};
};

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

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

※DNSSEC関係のデフォルトの設定が増えています。
※rndcコマンドのためのキーファイルが欠如しています。

↓以下の部分を修正します。

options {
	...

	#※コメントアウトする
	#listen-on port 53 { 127.0.0.1; };
	#listen-on-v6 port 53 { ::1; };

	#allow-query	{ localhost; };
	allow-query 	{ any; };

	forwarders {
		8.8.8.8;	// Google Public DNS
		8.8.4.4;	// Google Public DNS
	};
};

controls {
	inet 127.0.0.1 allow { localhost; } keys { rndc-key; };
};
include "/etc/rndc.key";

logging {
	... channel の後に
	category lame-servers { null; };
	category edns-disabled { null; };
	category resolver { null; };
};
...

(4) /etc/rndc.key を作成

※rndcコマンドのためのキーファイルを作成
※これがないと rndc reload などができません。

# rndc-confgen -a -b 512 -r /dev/urandom
# chgrp named /etc/rndc.key
# chmod g+r /etc/rndc.key

(5) ゾーンファイルの追加

/etc/named.conf

...
// 逆引きゾーン追加(逆引きはなくてもいいけど)
zone "444.333.222.111.in-addr.arpa" IN {
	type master;
	file "data/111.222.333.444.rev";
	allow-update { none; };
};
// 正引きゾーン追加
zone "mydomain.com" IN {
	type master;
	file "data/mydomain.com.zone";
	allow-update { none; };
};

/var/named/data/111.222.333.444.rev (逆引きはなくてもいいけど)

$TTL 3600
@	IN	SOA 	host.mydomain.com. postmaster.mydomain.com. (
			2012070101 ; Serial
			3H	   ; Refresh
			15M 	   ; Rretry
			1W	   ; Expire
			3H	 ) ; Minimum
	IN	NS	dns.mydomain.com.
	IN	PTR 	www.mydomain.com.

/var/named/data/mydomain.com.zone

$TTL 3600
@	IN	SOA 	host.mydomain.com. postmaster.mydomain.com. (
			2012070101 ; Serial
			3H	   ; Refresh
			15M 	   ; Rretry
			1W	   ; Expire
			3H	 ) ; Minimum
	IN	NS	dns.mydomain.com.
	IN	MX 10	mail
	IN	A	111.222.333.444
	IN	TXT 	"v=spf1 a mx ~all"
mail	IN	A	111.222.333.444
www 	IN	A	111.222.333.444

設定ファイルの書式チェック

# named-checkconf -p

-h はヘルプ
-t [directory] は指定したディレクトリをchrootとして設定
-v はバージョン表示
-p はエラーがなければnamed.confとインクルードファイルの内容を表示
-z は全てのマスタゾーンをロードしてみるテスト
-j はゾーンファイルを読み込むときにあればジャーナルファイルも読み込む

※エラーメッセージが出なければOK

★named.confを書き直したときは再起動

# /etc/init.d/named restart

ログ確認

# tail -n 50 /var/log/messages

BIND実行状態を確認

# rndc status

ステータス見て問題なければOK。

コメントを残す