BIND9でviewを使った環境でNOTIFYを使う





BIND9でNOTIFYおよびviewの各々の使い方は以下で書いてある通りだが、

BIND9でNOTIFYを使用して更新を通知する

BIND9でviewに含まれるゾーンのスレーブ(slave)を設定する(スレーブもview使用)

プライマリとスレーブが両方viewを使用している環境でNOTIFYを使用しようとすると
また少し設定が必要となる。

上記設定をそれぞれ実施してもview毎のNOTIFYでの適切なやり取りはできない。

match-clients { };の制御によって
いずれか1つのviewに対するNOTIFYしか正常に動作しない。

view毎のNOTIFYを使用する方法は次の通り。

○概要

プライマリおよびスレーブにてview毎のIPアドレスのエイリアスを設定して、
view毎に異なるIPアドレスでNOTIFYのやり取りを行う。


具体的な設定は次の通り。

まず、プライマリおよびスレーブにIPアドレスのエイリアスを追加する。
RedHat linuxでIPアドレスのエイリアスを追加する方法はこちらを参考

プライマリ・スレーブのIPアドレス
プライマリ:1.1.1.100
            1.1.1.101(エイリアス)
スレーブ:1.1.1.200
          1.1.1.201(エイリアス)

次に、プライマリでNOTIFYを送出する際の送信元をview毎に指定する。

プライマリのnamed.conf
acl zone1 { ! 1.1.1.201; 1.1.1/24; };

view zone1 {

	match-clients { zone1; };

	zone "test.example.com" {
		type master;
		file "db.test.example.com.zone1";
		notify-source 1.1.1.100;
	   	notify yes;
	   	also-notify { 1.1.1.200; };
	};

};

view zone2 {

	match-clients { any; };

	zone "test.example.com" {
		type master;
		file "db.test.example.com.zone2";
		notify-source 1.1.1.101;
	   	notify yes;
	   	also-notify { 1.1.1.201; };
	};

};


続いてスレーブの設定

スレーブのnamed.conf
acl zone1 { ! 1.1.1.101; 1.1.1/24; };

view zone1 {

	match-clients { zone1; };

	zone "test.example.com" {
		type slave;
		masters { 1.1.1.100; };
		file "bak/db.test.example.com.zone1";
		transfer-source 1.1.1.200;
	};

};

view zone2 {

	match-clients { any; };

	zone "test.example.com" {
		type slave;
		masters { 1.1.1.101; };
		file "bak/db.test.example.com.zone2";
		transfer-source 1.1.1.201;
	};

};

プライマリのzone2のNOTIFY送信元が
スレーブのACL「znoe1」マッチしないように設定しています。

また、スレーブのzone2のmasters { };を
プライマリのzone2のNOTIFY送信元と合わせています。
そうしないと、スレーブが受け取ったNOTIFYを無視します。

上記設定よって、zone1では、
プライマリ(1.1.1.100)とスレーブ(1.1.1.200)でNOTIFYおよびゾーン転送のやり取りをし、
zone2では、
プライマリ(1.1.1.101)とスレーブ(1.1.1.201)でNOTIFYおよびゾーン転送のやり取りをするようになった。

これで、view毎にNOTIFYによる動作が正常に行えるようになった。