Bind9 で再帰問い合わせが基本無効になっていた件 from Bind9.4.1-P1

Bind9.4.1-P1から再帰問い合わせの回りの基本設定が変わっていて、昔の設定ファイルを使って立てようとしたらはまりました。どうやら、allow-query系に追加があったのが原因のようです。

問題になったのは allow-query-cache:「キャシュした情報をどのアドレス範囲に提供するか」です。ディフォルトだと「localnets localhost」です。他のDNSへ問い合わせた結果は普通キャシュされているので、それが使えず返答できなくなります。

しかもこのallow-query-cacheの値がallow-recursion:「再帰問い合わせをどのアドレス範囲に提供するか」のディフォルト値になっているので、localnets以外からの再帰問い合わせ(特にデバッグ時に)も失敗することになって、混乱に拍車が掛かってしまいました。以前は、ディフォルト値がallow-queryの値で「any」だったのが追い打ちでした。

設定ミスかな? 何かな? マニュアル読むかな? と思っていたら、@ITの会議室にちょうどその件にまとめてくれた人がいて助かりました。

以下は自分用メモとしての引用。(引用元)
く~らさん、回答者のanightsさん、ありがとうございます。
allow-query:
デフォルト値→{ any; }

allow-query-cache:
デフォルト値→{ localnets; localhost; };
ただし、設定されていなければ、"allow-recursion"の設定が適用される。
"allow-recursion"が設定されていなければ、"allow-query"の設定が適用される。
"allow-query"も設定されていなければ、デフォルト値が適用される。

allow-recursion:
デフォルト値→{ localnets; localhost; };
ただし、設定されていなければ、"allow-query-cache"の設定が適用される。
"allow-query-cache"が設定されていなければ、"allow-query"の設定が適用される。
"allow-query"も設定されていなければ、デフォルト値が適用される。

ここでいう設定とは、named.conf上に明記されていなければ、との解釈かなと思います。

つまり、特に明記しなければ、下記の設定値となるということになります。

allow-query { any; }
allow-query-cache { localnets; localhost; };
allow-recursion { localnets; localhost; };

ここまできて、queryとrecursionがごっちゃになっていたのでは、と思い
もう一度試してみました。

■named.confにそれぞれの設定を明記しない場合
 ・自ゾーンに対するquery → OK
 ・再起問い合わせ → 同一セグメントから:OK
           それ以外から:NG

■named.confにallow-query { any; }を明記した場合
 ・自ゾーンに対するquery → OK
 ・再起問い合わせ → OK

■named.confにallow-query { none; }を明記した場合
 ・自ゾーンに対するquery → NG
 ・再起問い合わせ → NG

■named.confにallow-query { none; } 及びallow-recursion { any; };を明記した場合
 ・自ゾーンに対するquery → NG
 ・再起問い合わせ → OK

2 コメント:

匿名 さんのコメント...

素晴らしい記事ありがとうございます!
bindの勉強最近はじめて、設定項目が参考資料ごとに違ってて参ってました。
ホントに助かります!

匿名 さんのコメント...

再起って再帰のことですか。