BINDのviewを用いた内部向けDNS構築メモ
社内ネットワーク向け DNS サーバを立てたくて、BIND の view を用いて設定を行ってちょっとはまったのでメモを残しておく。
環境
- BIND 9.3.6 (CentOS 5.5 標準)
viewについて
- BIND 8 から使用できる、接続条件によって見える情報を変える仕組み。以下のように記述する
view view_name { match-clients { list; }; match-destinations { list; } // and other options }
実際の記述
- 内部ネットワークに 192.168.100.0/24 と 192.168.200.0/24 という2つのネットワークがあり、両方から内部 DNS を参照したい場合は acl を設定したほうが楽。
- 192.168.100.1 に対外ルータがあって、外部 DNS の解決はそちらに投げる。
- ついでに Google Public DNSも設定してみる。
- この内部ネットワーク向けDNSサーバでも、内部向けの名前解決を行いたいので、内部向けのゾーンファイルは別ファイルにして、localhost_resolver, internal の2つの view で include している。
acl "internal-acl" { 127/8; 192.168.100/24; 192.168.200/24; }; options { directory "/var/named"; dump-file "data/cache_dump.db"; statistics-file "data/named_stats.txt"; memstatistics-file "data/named_mem_stats.txt"; allow-query { internal-acl; }; allow-transfer { internal-acl; }; forwarders { 192.168.100.1; 8.8.8.8; 8.8.4.4; }; }; view localhost_resolver { match-clients { localhost; }; match-destinations { localhost; }; recursion yes; include "/etc/named.rfc1912.zones"; include "/var/named/named.internal.zones"; }; view internal { match-clients { internal-acl; }; match-destinations { localnets; }; recursion yes; include "/etc/named.root.hints"; include "/var/named/named.internal.zones"; };
デバッグ
- どの view を参照して応答を返しているのか分からず苦労をしたので、障害時にはqueriesログを残しておくと良い。
logging { channel debug { file "data/named.debug"; severity debug; print-category yes; print-severity yes; print-time yes; }; category queries { debug; }; };