私は次の設定を持っています:
- DNSサーバーはインターネットからアクセスでき、ゾーンに対する権限があります。
foo.com
- DNSサーバーはローカルでのみアクセスでき、そのゾーンに対する権限が必要です。
test.lab.foo.com
私が達成したいもの:
外部世界の DNS クエリが最初の DNS サーバーに到達し、そのゾーンに属するレコードを取得したら、2 番目のtest.lab.foo.com
DNS サーバーに再帰要求を行い、レコードを転送したいと思います。
特にゾーン転送を実行したり、インターネットから2番目のDNSサーバーにアクセスできるようにしたくありません。
私の設定は次のとおりです。 (ここでは重要だと思われる部分のみコピーしました。)
最初のDNSサーバーで
options {
allow-recursion {
localnets;
localhost;
internal;
my-datacenter;
mc-office;
};
};
zone "test.lab.foo.com" {
forward only;
forwarders {
<private IP of second DNS server>;
};
type forward;
};
zone "foo.com" {
file "/etc/bind/zones/foo.com.zone";
type master;
};
私の質問:
allow-recursion
ブロックに許可されているローカルネットワークにある場合は、期待どおりに機能します。インターネットでDNS検索を試みると、NOERRORが発生し、空の応答が表示されます。
allow-recursion
デバッグ中にリストを調整して追加しましたany
。それから私は働き始めました。しかし、私のDNSサーバーがどんな種類の再帰も許可したくありません。実際、私は「外部」クエリがこの特定の領域に対してのみ再帰的に行われることを望みます。
allow-recursion
1つの地域だけを設定する方法は何ですか?
答え1
この問題は、2a0a:e5c0:2:f::a でホストされるドメインの例として c1.k8s.ooo を使用して、次の構成で解決できます。
options {
...
allow-recursion { ::/0; 0.0.0.0/0; };
};
zone "c1.k8s.ooo" {
type forward;
forward only;
forwarders { 2a0a:e5c0:2:f::a; };
};
zone "." {
type hint;
file "/dev/null";
};
その機能は次のとおりです。
- まず、バインディングを開放型レゾルバに変えます(悪いことです)。
- 目的地がある地域を定義します。
- これにより、組み込みの
zone "."
ルートヒントのサポートが削除され、バインディングが必要なドメイン以外には何も確認できなくなります。
次のようなものを使用することに注意してください。
zone "." {
type forward;
forward only;
forwarders { };
};
バインドにはルート領域が組み込まれているため、外部からの再帰は中断されません。