问题:按查询源网络分离区域并为 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 来源落入lanClients
ACL 并因此产生无限循环。
诀窍是使用query-source 1.2.3.4;
,其中1.2.3.4
是一些不属于lanClients
ACL 的外部接口 IP。
另一个选择是添加forward only;
并forwarders 1.2.3.4;
到您的内部网视图 - 这样委派链就不重要了,而且这也可以在 NAT 后面工作。
无论如何,bind 本身所做的查询必须从视图中排除lanClients
。