zoneについて
zoneには以下に記載するような様々な種類のzoneが存在します。ここではそれぞれのゾーンについて説明していきます。
- ゾーンのclassについての説明はコチラ
- ゾーンのオプション設定について説明はコチラ
ゾーンの種類別説明
master
zone zone_name [class] { type master; [ allow-query { address_match_list }; ] [ allow-query-on { address_match_list }; ] [ allow-transfer { address_match_list }; ] [ allow-update { address_match_list }; ] [ update-policy local | { update_policy_rule [...] }; ] [ also-notify { ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] }; ] [ check-names (warn|fail|ignore) ; ] [ check-mx (warn|fail|ignore) ; ] [ check-wildcard yes_or_no; ] [ check-integrity yes_or_no ; ] [ dialup dialup_option ; ] [ file string ; ] [ masterfile-format (text|raw) ; ] [ journal string ; ] [ max-journal-size size_spec; ] [ forward (only|first) ; ] [ forwarders { [ ip_addr [port ip_port] ; ... ] }; ] [ ixfr-base string ; ] [ ixfr-from-differences yes_or_no; ] [ ixfr-tmp-file string ; ] [ maintain-ixfr-base yes_or_no ; ] [ max-ixfr-log-size number ; ] [ max-transfer-idle-out number ; ] [ max-transfer-time-out number ; ] [ notify yes_or_no | explicit | master-only ; ] [ notify-delay seconds ; ] [ notify-to-soa yes_or_no; ] [ pubkey number number number string ; ] [ notify-source (ip4_addr | *) [port ip_port] ; ] [ notify-source-v6 (ip6_addr | *) [port ip_port] ; ] [ zone-statistics yes_or_no ; ] [ sig-validity-interval number [number] ; ] [ sig-signing-nodes number ; ] [ sig-signing-signatures number ; ] [ sig-signing-type number ; ] [ database string ; ] [ min-refresh-time number ; ] [ max-refresh-time number ; ] [ min-retry-time number ; ] [ max-retry-time number ; ] [ key-directory path_name; ] [ auto-dnssec allow|maintain|create|off; ] [ zero-no-soa-ttl yes_or_no ; ] };
masterの持っているzone情報のレプリカを保持しているのがslave。
masters設定で複数個のマスターが指定され、自分の持っているzone情報を更新するときにデータを参照する先が指定されている。mastersの要素として他のマスターのリストを与えることもできる。デフォルトではデータ転送は53番ポートから送信されるが、設定により変更することもできる。マスター間での認証についてはTSIGキーにより実現される。
zone情報が書き換わった時や、namedがリロードしたとき等、slave内でfileを指定するとzoneデータは指定ファイルに出力される。fileを指定しておくことはnamed起動時にzone情報を取得を抑制できるため高速起動という意味でも推奨されます。
大量のzoneが単一サーバで設定されている場合、ディレクトリ階層を複数用意しておくといい。1000000個以上のファイルが1個のディレクトリ内にあると多くのOSでは処理速度が遅くなるため、ディレクトリ階層は工夫するといい。example.com の場合、ex/example.com という具合。ただ、最初の2文字分の名前のディレクトリを用意したのみだが、有効な場合もある。
slave
zone zone_name [class] { type slave; [ allow-notify { address_match_list }; ] [ allow-query { address_match_list }; ] [ allow-query-on { address_match_list }; ] [ allow-transfer { address_match_list }; ] [ allow-update-forwarding { address_match_list }; ] [ update-check-ksk yes_or_no; ] [ dnssec-dnskey-kskonly yes_or_no; ] [ dnssec-secure-to-insecure yes_or_no ; ] [ try-tcp-refresh yes_or_no; ] [ also-notify { ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] }; ] [ check-names (warn|fail|ignore) ; ] [ dialup dialup_option ; ] [ file string ; ] [ masterfile-format (text|raw) ; ] [ journal string ; ] [ max-journal-size size_spec; ] [ forward (only|first) ; ] [ forwarders { [ ip_addr [port ip_port] ; ... ] }; ] [ ixfr-base string ; ] [ ixfr-from-differences yes_or_no; ] [ ixfr-tmp-file string ; ] [ maintain-ixfr-base yes_or_no ; ] [ masters [port ip_port] { ( masters_list | ip_addr [port ip_port] [key key] ) ; [...] }; ] [ max-ixfr-log-size number ; ] [ max-transfer-idle-in number ; ] [ max-transfer-idle-out number ; ] [ max-transfer-time-in number ; ] [ max-transfer-time-out number ; ] [ notify yes_or_no | explicit | master-only ; ] [ notify-delay seconds ; ] [ notify-to-soa yes_or_no; ] [ pubkey number number number string ; ] [ transfer-source (ip4_addr | *) [port ip_port] ; ] [ transfer-source-v6 (ip6_addr | *) [port ip_port] ; ] [ alt-transfer-source (ip4_addr | *) [port ip_port] ; ] [ alt-transfer-source-v6 (ip6_addr | *) [port ip_port] ; ] [ use-alt-transfer-source yes_or_no; ] [ notify-source (ip4_addr | *) [port ip_port] ; ] [ notify-source-v6 (ip6_addr | *) [port ip_port] ; ] [ zone-statistics yes_or_no ; ] [ database string ; ] [ min-refresh-time number ; ] [ max-refresh-time number ; ] [ min-retry-time number ; ] [ max-retry-time number ; ] [ multi-master yes_or_no ; ] [ zero-no-soa-ttl yes_or_no ; ] };
masterの持っているzone情報のレプリカを保持しているのがslave。
masters設定で複数個のマスターが指定され、自分の持っているzone情報を更新するときにデータを参照する先が指定されている。mastersの要素として他のマスターのリストを与えることもできる。デフォルトではデータ転送は53番ポートから送信されるが、設定により変更することもできる。マスター間での認証についてはTSIGキーにより実現される。
zone情報が書き換わった時や、namedがリロードしたとき等、slave内でfileを指定するとzoneデータは指定ファイルに出力される。fileを指定しておくことはnamed起動時にzone情報を取得を抑制できるため高速起動という意味でも推奨されます。
大量のzoneが単一サーバで設定されている場合、ディレクトリ階層を複数用意しておくといい。1000000個以上のファイルが1個のディレクトリ内にあると多くのOSでは処理速度が遅くなるため、ディレクトリ階層は工夫するといい。example.com の場合、ex/example.com という具合。ただ、最初の2文字分の名前のディレクトリを用意したのみだが、有効な場合もある。
stub
zone zone_name [class] { type stub; [ allow-query { address_match_list }; ] [ allow-query-on { address_match_list }; ] [ check-names (warn|fail|ignore) ; ] [ dialup dialup_option ; ] [ delegation-only yes_or_no ; ] [ file string ; ] [ masterfile-format (text|raw) ; ] [ forward (only|first) ; ] [ forwarders { [ ip_addr [port ip_port] ; ... ] }; ] [ masters [port ip_port] { ( masters_list | ip_addr [port ip_port] [key key] ) ; [...] }; ] [ max-transfer-idle-in number ; ] [ max-transfer-time-in number ; ] [ pubkey number number number string ; ] [ transfer-source (ip4_addr | *) [port ip_port] ; ] [ transfer-source-v6 (ip6_addr | *) [port ip_port] ; ] [ alt-transfer-source (ip4_addr | *) [port ip_port] ; ] [ alt-transfer-source-v6 (ip6_addr | *) [port ip_port] ; ] [ use-alt-transfer-source yes_or_no; ] [ zone-statistics yes_or_no ; ] [ database string ; ] [ min-refresh-time number ; ] [ max-refresh-time number ; ] [ min-retry-time number ; ] [ max-retry-time number ; ] [ multi-master yes_or_no ; ] };
stubゾーンはslaveゾーンに似ている。違う点はマスターゾーンの全てのレコードのコピーを持つのではなく、NSレコードのみを持っている点。stubゾーンはDNSの標準ゾーンではなくBindの独自実装。
stubゾーンは親ゾーンにNSレコードを指定して、レコード管理等のコストを排除するために使うことができる。この使い方は推奨されていないがBind9を使っていて特定の場合のみサポートされている。
Bind4 や Bind8 ではNSレコードを含むzone情報を子ゾーンから親ゾーンに向けて転送していた。それは場合によっては子ゾーンの設定をするだけで親ゾーンの設定を省略することができた。Bind9ではこのようにstubゾーンと親ゾーンのレコードが混在することはない。
Bind9のマスターに子ゾーンが設定されている親ゾーンがある場合、全てのslaveサーバに同じ設定をしてやる必要がある。
stubゾーンは与えられたドメインに対して応答を返すことを強制するような使い方もできる。
static-stub
zone zone_name [class] { type static-stub; [ allow-query { address_match_list }; ] [ server-addresses { [ ip_addr ; ... ] }; ] [ server-names { [ namelist ] }; ] [ zone-statistics yes_or_no ; ] };
static-stabゾーンは以下の場合を除いてstubゾーンに似ています。ゾーン情報はファイルに記載することで設定され、
再帰問い合わせに対してローカルの設定情報が優先さる。ゾーン情報はserver-addressesとservernamesで設定される。
ゾーン情報はNSレコード、A(or AAAA)のグル―レコードで管理される。それらの情報 rndc dumpdb -all で確認することができます。設定されたRRはグローバル設定よりもローカル設定が優先されます。
Static-stubゾーンに対して、RDビット(Recursion Desired)をOFFにしたクエリは拒否(REFUSED)の応答が返ることになる。
データはファイルにStaticに設定されているため、static-stubゾーンに対するメンテナンスは特に必要ない。
例えば、定期的なリフレッシュ等は必要ない。各static-subゾーンはBind内部で設定されたNSレコードか、A(or AAAA)のグル―レコードで管理されることになる。
forward
zone zone_name [class] { type forward; [ forward (only|first) ; ] [ forwarders { [ ip_addr [port ip_port] ; ... ] }; ] [ delegation-only yes_or_no ; ] };
forwardゾーンはドメインに基いて転送設定を行うゾーンです。ゾーン中で設定された転送設定に従い転送を行う。
転送設定がなければフォワーディングを行うことはなく、options設定でそれらを調整することができる。
そのため、転送設定を行いたい場合にはグローバル設定でforwarders設定をする必要がある。逆に転送設定を行いたくない場合も同じく設定してやる必要がある。
hint
zone zone_name [class] { type hint; file string ; [ delegation-only yes_or_no ; ] [ check-names (warn|fail|ignore) ; ] // Not Implemented. };
rootネームサーバの初期値を設定するのがhintゾーン。Bind初期セットアップの時、hintゾーンに記載されている情報を元にrootサーバにアクセスする。
INクラスに対してhintゾーンが与えられなかった場合、Bindのコンパイル時に組み込まれるroot情報がデフォルトとして用いられる。
delegation-only
zone zone_name [class] { type delegation-only; };
delegation-onlyゾーンは .com, .net. .org 等のゾーンに対して委譲設定を行う場合に利用される。
このゾーンに指定されたドメインからのどんな回答も明示的な委譲なのか、暗黙的な委譲なのかに関わらずNXDOMAIN として扱われることになる。
このゾーンはrootゾーンでは適用することができない。また、末端のゾーンでも適用すべきではない。このゾーンはforwardersゾーンでのみ効果がある。※root-delegation-onlyも参照してください。