我们公司控制着一个名为 的域名foobar.com
,该域名用于各种公共服务(wgwww.foobar.com
指向我们的网站)。该域在 DNS 服务中具有公共 DNS 记录。
我们有一些内部网络设备,我们希望为其分配名称以使用foobar.com
TLD 的子域。
Bind9如何配置为这样:
- 首先检查公共 DNS 服务器是否为某个 IP 地址定义了域
- 如果没有,则检查内部 DNS 服务器是否为某个内部 IP 地址定义了域
- 如果失败,则“正常”查找失败。
目前,我们的配置错误地在“开/关”基础上运行,例如,它要么读取公共 DNS 要么读取私有 DNS,而不是两者都读取。这使得它无法使用,因为我们想要同时访问公共和私有 DNS 记录。
DNS 服务器是单独管理的,私有 DNS 位于安装了 Bind9 的本地设备上。
我尝试过以下方法:
在私有 DNS 记录中有类似的内容
IN NS privatens.foobar.com ; the private (local) DNS IN NS publicns.foobar.com ; the public DNS
设置转发
named.conf.options
到公共 DNS 服务器options { forwarders { ... }; forward first; };
兼顾内部优先级
resolv.conf
这些似乎都不起作用。例子:
www.foobar.com
指向使用公共 DNS 的 Web 服务器。printer.office.foobar.com
是 CNAME,unique1.foobar.com
其中 A 记录是192.168.5.10
。我希望查询能够www.foobar.com
与公共 DNS 一起使用,并且查询printer.office.foobar.com
能够与私有 DNS 一起使用。
现在所有查询都可以printer.office.foobar.com
工作,但所有查询都会www.foobar.com
产生 NXDOMAIN 响应并在那里停止。
是否甚至可以读取单个域的两个不同区域(例如foobar.com
),或者它会忽略另一个区域?
编辑:
为了使问题更清楚,我制作了一张关于我们的网络和外部事物的超级漂亮的图表:
橙色内的任何内容都是我们的专用网络,外部无法访问。绿色里面的东西是设置了域名的公共服务器。192.168.5.1
是我们的路由器,192.168.5.5
是我们的私有 DNS 服务器,也是ns1.dnsprovider.com
第三方提供的 DNS 服务器。
192.168.5.100
假设我是我希望发生以下情况的用户:
- 查询时,
user1.foobar.com
我从 获取 DNS 结果privns.foobar.com/192.168.5.5
。 - 当查询
www.foobar.com
或sub.foobar.com
我从以下位置获取 DNS 结果时ns1.dnsprovider.com
答案1
一种可能的配置是具有不同的内部的和外部的对域的分配是 BIND 视图。通常此设置是在单个服务器中完成的。
BIND 视图允许您在同一域中拥有不同的记录,无论人们是从内部还是外部查看它,或者更有趣的是,相同的记录具有不同的 IP 地址。 (例如,通过 NAT 映射到其他地址的不同外部地址,不会给边界防火墙带来内部流量的负担)。
这种设置的优点是必须为同一域维护两个(或更多)单独的区域。
要定义视图,您只需在第一个视图中定义它响应的网络,其余部分将在第二个视图中显示。
如,在named.conf
:
acl networks1 { 192.168.1.0/24; 192.168.3.0/24; };
acl networks2 { 192.168.2.0/24; };
view "nets1" {
match-clients { networks1; };
recursion yes;
include "mydomain.view1";
}
view "nets2" {
match-clients { networks2; };
recursion yes;
include "mydomain.view2";
}