bind9 で TSIG を利用するゾーン転送を設定した際のメモ

この例では、マスターサーバから、
・スレーブサーバ 1 には普通のゾーン転送
・スレーブサーバ 2 には TSIG を使用してのゾーン転送
という、複数のサーバに対して、TSIG を使用する・しないが混在しているような場合の設定を行う。

実用 BIND 9で作るDNSサーバ(5):スレーブ・サーバのゾーン転送とセキュリティ (3/3) – @IT」を参考にさせて頂き、また同ページに詳しい情報は掲載されているが、自分の環境での実装メモである。

・TSIG で使用する鍵の生成

まずは、いずれかのサーバで、TSIG で使用する鍵の生成。(若干時間がかかった)

/usr/sbin/dnssec-keygen -a HMAC-MD5 -b 512 -n HOST example.com

・bind への設定 (マスターサーバ・スレーブサーバ両方での設定)

生成された「Kexample.com.+157+*.key」の

example.com. IN KEY 512 3 157 ほにゃらら

の「ほにゃらら」部分を /etc/bind/tsig-keys/example.com.key (bind:bind 600) で以下のように保存。

key example.com {
	algorithm hmac-md5;
	secret "ほにゃらら";
};

これを、/etc/bind/named.conf.options 内で、

include "/etc/bind/tsig-keys/example.com.key";

と指定して読み込む。

・マスターサーバでのゾーン設定

以下のように、TSIG を使用する、使用しないの混在は可能。
TSIG を使用する場合は、「allow-transfer」に key であらかじめ設定している鍵の名前で指定する。
なお、TSIG を使用しないサーバがいない場合は「TSIG を使用しないスレーブサーバの IP アドレス;」の部分を削除すれば良い。

zone "example.com" {
	type master;
	file "/etc/bind/zones/example.com";
	notify yes;
	allow-query { any; };
	also-notify {
		TSIG を使用しないスレーブサーバの IP アドレス;
		TSIG を使用するスレーブサーバの IP アドレス;
	};
	allow-transfer {
		TSIG を使用しないスレーブサーバの IP アドレス;
		key example.com;
	};
};

・スレーブサーバでの追加設定

/etc/bind/named.conf.options 内で、「include “/etc/bind/tsig-keys/example.com.key”;」を定義した行以降で、以下を定義する。

server マスターサーバの IP アドレス {
	keys "example.com";
};

・スレーブサーバでのゾーン設定

zone "example.com" {
	type slave;
	file "/etc/bind/zones/example.com";
	notify no;
	allow-query { any; };
	masters { マスターサーバの IP アドレス; };
};

・TSIG を使用してのゾーン転送のログ表示

TSIG を使用してゾーン転送した場合、syslog には以下のように TSIG を使用した旨が記録される。

マスターサーバ

(省略) client スレーブサーバの IP アドレス#xxxx: view externel: transfer of 'example.com/IN': AXFR started: TSIG example.com
(省略) client スレーブサーバの IP アドレス#xxxx: view externel: transfer of 'example.com/IN': AXFR ended

スレーブサーバ

(省略) zone example.com/IN/externel: Transfer started.
(省略) transfer of 'example.com/IN/externel' from マスターサーバの IP アドレス#53: connected using スレーブサーバの IP アドレス#xxxx
(省略) zone example.com/IN/externel: transferred serial xxxxxxxxxx: TSIG 'example.com'
(省略) transfer of 'example.com/IN/externel' from マスターサーバの IP アドレス#53: Transfer completed: 1 messages, xx records, xxxx bytes, x.xxx secs (xxxxx bytes/sec)

・余談

ちなみに、鍵は各ドメインで生成するべきかと思われるが、以下のような複数ドメインで同じ鍵を使用するような設定できてしまう。

マスターサーバ

key example.com {
	algorithm hmac-md5;
	secret "ほにゃらら";
};

zone "example.com" {
	type master;
	file "/etc/bind/zones/example.com";
	allow-transfer { key example.com; };
};

zone "example.net" {
	type master;
	file "/etc/bind/zones/example.net";
	allow-transfer { key example.com; };
};

スレーブサーバ

key example.com {
	algorithm hmac-md5;
	secret "ほにゃらら";
};

server マスターサーバの IP アドレス {
	keys "example.com";
};

zone "example.com" {
	type slave;
	file "/etc/bind/zones/example.com";
	masters { マスターサーバの IP アドレス; };
};

zone "example.net" {
	type slave;
	file "/etc/bind/zones/example.net";
	masters { マスターサーバの IP アドレス; };
};

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です