BIND9でviewに含まれるゾーンのスレーブ(slave)を設定する。
こちらで問い合わせ元によって異なる回答を返す設定を行ったが、
その場合、1つのゾーンに対して
複数のゾーンファイルが存在することになる。
このような場合、スレーブはどのゾーンファイルを
ゾーン転送でもらってくるのだろうか?
また、スレーブ側もプライマリ同様viewを設定している場合、
view毎に異なるゾーンファイルをもらってこなければならない。
これを解決する方法は次の通り。
スレーブがviewを設定していない場合の基本的な動作はこちらで確認。
今回は、スレーブもviewを設定しているとする。
この場合は、プライマリのアクセスコントロールリスト(ACL)と、
スレーブの設定も必要となる。
○概要
プライマリ側で、
スレーブのIPアドレスが狙いのviewに当てはまるように
ACLに定義する。
これだけでは、スレーブの物理インターフェースのIPアドレスがマッチする
viewのゾーンファイルしか得ることができない。
そこで、スレーブ側で、
view毎にゾーン転送に使用するIPアドレスのエイリアスを定義する。
(複数IPアドレスが必要となる)
具体的な設定は次の通り。
まず、スレーブにIPアドレスのエイリアスを追加する。
RedHat linuxでIPアドレスのエイリアスを追加する方法はこちらを参考
プライマリ・スレーブのIPアドレス
プライマリ:1.1.1.100
スレーブ:1.1.1.200
1.1.1.201(エイリアス)
次に、プライマリのACLを変更する。
プライマリの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"; }; }; view zone2 { match-clients { any; }; zone "test.example.com" { type master; file "db.test.example.com.zone2"; }; };
次に、スレーブにてview毎にゾーン転送に使用するIPアドレスを指定する。
スレーブのnamed.conf
acl zone1 { 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.100; }; file "bak/db.test.example.com.zone2"; transfer-source 1.1.1.201; }; };
これで、スレーブの設定は以下のようになった。
zone1のゾーン転送時の送信元:1.1.1.200
zone2のゾーン転送時の送信元:1.1.1.201
プライマリのACLにて、
1.1.1.200は、ACL「zone1」
1.1.1.201は、ACL「any」
と、それぞれマッチする。
したがって、上記設定によって、
スレーブは、
zone1のゾーンファイルをプライマリのzone1から
zone2のゾーンファイルをプライマリのzone2から
もらうことができるようになった。