BIND 中每个视图的单独区域例外

BIND 中每个视图的单独区域例外

问题:按查询源网络分离区域并为 LAN 客户端和 WAN 客户端返回不同的记录。

我在家里的一台小型 alix 路由器上用 Bind 9.4 实现了这个功能。一个视图名为“lan”,另一个视图名为“wan”。“lan”视图只有 root.hints 文件和一个区域。

“wan”视图有许多其他区域,包括“lan”视图中一个区域的副本,但记录不同。

从 LAN 查询 domain1.tld 会给我本地记录。从 WAN 查询 domain1.tld 会给我外部记录。从 LAN 查询 domain2.tld 会给我与 WAN 相同的记录,因为它仅存在于 WAN 视图中。

现在我正尝试在更大的范围内重新实现这一点,突然我的视图无法查询其自身之外的任何内容。根据绑定用户列表,这是很自然的,他们建议我将所有视图复制到我的 LAN 视图中。

我希望这里有人有更好的解决方案,因为这意味着我必须在多个视图中复制和维护数千个区域文件。这是不可行的。

我家里的配置与此类似。

acl lanClients {
 192.168.22.0/24;
 127.0.0.1;
};

view "intranet" {
 match-clients { lanClients; };
 recursion yes;
 notify no;

 // Standard zones
 //
 zone "." {
  type hint;
  file "etc/root.hint";
 };

 zone "domain1.tld" {
  type master;
  file "intranet/domain1.tld";
 };
};

view "internet" {
 match-clients { !localnets; any; };
 recursion no;
 allow-transfer { slaveDNS; };

 include "master.zones";
};

来自 LAN 的 domain1.tld 请求提供本地记录,来自 WAN 的请求提供远程记录。这在家里和我的新 Bind 9.7 中都运行良好。

不同之处在于,在家里,我不知何故设法让我的 LAN 从 master.zones 中的域获取远程记录,而无需在“内部网”视图中将这些区域指定为重复。

使用 Bind 9.7 进行更大规模的尝试,除了视图中指定的区域外,我没有得到任何结果。我遗漏了什么?我已尝试对 Bind 9.7 进行相同的配置。

答案1

每个视图都有一组单独的区域,因此一个视图不会回答仅在另一个视图中指定的区域,因此您的行为在某种程度上是可以预料到的。但是,一旦您的所有 WAN 区域都从父区域正确委托给您的服务器,intranet视图就会遵循委托链,返回您自己的服务器,并自行查询该区域。

我猜你的问题是 - 你正在测试你的服务器,但尚未委派区域,或者你的查询的 BIND 来源落入lanClientsACL 并因此产生无限循环。

诀窍是使用query-source 1.2.3.4;,其中1.2.3.4是一些不属于lanClientsACL 的外部接口 IP。

另一个选择是添加forward only;forwarders 1.2.3.4;到您的内部网视图 - 这样委派链就不重要了,而且这也可以在 NAT 后面工作。

无论如何,bind 本身所做的查询必须从视图中排除lanClients

相关内容