DNSサーバには、「キャッシュサーバ」として「コンテンツサーバ(権威サーバ)」としての使い方があります。

1台のDNSサーバで、
イントラ向けには再起問合わせを受けつつ、社内ドメインのゾーンを提供する。
外部向けには再起問合わせを拒否しつつ、社外ドメインのゾーンを提供する。

といったケースも出てきます。

この場合は、VIEWを使うことで実現が可能となります。

======================================
options {
(略)
}
view naibu {                 ①
  match-clients { 192.168.1.0/24; };    ②
  recursion yes;              ③
incluede "/etc/named.rfc1912.zones";

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


view gaibu {                ⑤
match-clients { any; };          ⑥ recursion no;               ⑦

zone "dns-test.com" IN {         ⑧
type master;
file "dns-test.zone"
allow-update { none; };
};
};

======================================

①VIEWを定義。ビュー名(naibu、gaibu)は任意のものでかまいません。
②match-clientで指定したクライアントに対してのみ、そのVIEWステートメント内に記述した動作をします。
③内部向けのVIEWなので再起問合わせを許可
④イントラゾーンを定義

⑤VIEWを定義。ここでは外部向けのVIEWを定義。
⑥その他ネットワークを定義
⑦再起問合わせを拒否。(オープンリゾルバ問題)
⑧外部向けゾーン「dns-test.com」を定義


この設定では、192.168.1.0/24からの問合わせに対しては、再起問合わせを許可し、社内ゾーン「office」の情報を提供する。それ以外のクライアントからの問合わせに対しては、再起問合わせを拒否し、外部ゾーンdns-test.comの情報を提供します。





★VIEWステートメント利用時の注意点


①VIEWステートメントは頭から順に評価される。
例えば、外部ゾーン向けビューのmatch-clientsでは「any」を指定しているため、これを頭に記述してしまうと、全て外部ゾーン向けのビューにマッチしてしまいます。

②VIEWステートメント利用時のZONEステートメントの書き方
VIEWステートメントの中では、ZONEステートメントやRecursion文のほか、optionsステートメント内に記述できる文の多くが記述できます。OptionsステートメントとVIEWステートメントで指定が重複した場合、VIEWステートメントが優先されます。ただし、「VIEWステートメントを利用する際には、ZONEステートメントは必ずVIEW内に入れる必要がある」という点に注意が必要です。
VIEWを利用していて、かつZONEステートメントをVIEWの外に記述すると、構文エラーになります。



★match-licent以外の絞込み

「match-destination」
  match-destination { 192.168.x.0/24; };
送信元では無く、宛先にマッチさせるというものです。


「match-recursive-only」
  match-recursive-only yes;
yesを指定するとクエリが再起問合わせである場合にのみ、そのビューが適用されます。



★VIEWステートメントの問題点
ゾーン転送を行なう際には「allow-transfer」を記述します。

上記の例ですと、
VIEWステートメント内の内部ゾーン「office」と外部ゾーン「test-dns.com」の両方にallow-transferを記述することになります。

内部ゾーン「office」と外部ゾーン「test-dns.com」を持つスレーブサーバを用意し、ゾーン転送を行うとします。

しかし、192.168.1.0/24内にあるスレーブサーバからのリクエストは内部ゾーンのみにマッチしますので、外部ゾーン「dns-test.com」のゾーン転送が受け取れないということになります。

1台のDNSサーバで両方のゾーンのスレーブサーバを構築しようとするとIPアドレスが2つあるホストを使うか、rsyncやsftpなど、ファイルを転送するツールを使ってゾーンファイルを取得する手段が必要になります。


本日はココまで!
・1台のDNSサーバで内部向け、外部向けゾーンを構築する場合はVIEWを使う。
・VIEWで送信元のアドレスにマッチさせて、内部・外部ゾーンの情報提供を振り分ける
・VIEWは頭から評価される。
・スレーブサーバを立てる場合、ゾーン転送の問題が発生する。