我们在受保护的环境中拥有 DNS 服务器,无法访问互联网,这些服务器仅解析我们编写的内部域。这些内部 DNS 服务器中的 root.servers 文件为空:
zone "."
{
type hint;
file "root.servers"; // root.server is empty file
};
这样,内部 DNS 仅解析内部名称。
然后我们在 DMZ 中有 DNS 服务器,它将内部域转发到 dmz,如下所示:
zone "internal" in
type forward;
forwarders { 10.10.10.1; 10.10.10.2; }; // internal DNSes
};
DMZ 中的这些 DNS 还会从解析互联网域的 DNS 转发互联网地址,如下所示:
zone "." in {
type forward;
forwarders { 172.20.10.1; 172.20.20.2; }; // DNSes resolving internet domains
};
这样,DMZ 中的 DNS 就可以解析内部和互联网域。多年来,它一直都是这样运作的。
现在,我们需要为 DMZ 中的某些服务器获取知名 CA 签名的证书。为此,我们创建了一个互联网子域。我们将其命名为 dmz.example.com。
我们在 DMZ 名称服务器中创建了一个区域 dmz.example.com,DMZ 解析这些域名。我们也想在内部网络中解析这些域名。为此,我们打开了从内部到 DMZ 的 DNS 访问,并在内部 DNS 中添加了一个区域,如下所示:
zone "dmz.example.com" in
{
type forward;
forwarders { 10.100.1.1; 10.100.1.2; }; // DMZ DNSes
};
现在,内部 DNS 无法解析 dmz.example.com,也无法访问 DMZ DNS 以获取有关此域的信息。我不明白为什么内部 DNS 不使用该区域配置?这是否与空的 root.servers 文件和区域“。”有关?
在 DMZ DNS 转发内部域的另一个方向上它可以工作。
我找到了一个解决方案,但我不确定我是否满意它,而且我对它了解得不是很好。
正如我在问题中写到的,内部 DNS 的 root.servers 文件是空的。这意味着所有针对互联网域的查询都会立即返回,没有任何答案。
我发现的解决方案是内部 DNS 不再使用 root.servers 文件,如下所示:
相反,我将“。”区域配置为转发区域:
随着“。”区域处理的改变,区域 dmz.example.com 也开始在内部 DNS 中工作。
我并不是 100% 满意该解决方案,因为内部 DNS 现在会尝试访问不存在的 IP 来获取有关 Internet 域的信息。以前,查询仅限于本地空文件 root.servers。现在,DNS 会尝试连接到不存在的 IP,然后返回空答案。如果我选择该 IP 不当,防火墙将忙于处理请求。如果有一天 IP 被占用,网络上的新设备将开始接收 DNS 查询。也许我可以创建一个虚拟接口来发送请求。这样,它就不会从计算机传到网络。
有人知道怎样才能让它在不转发“。”区域的情况下工作吗?
我找到了一个更好的解决方案,
forward only;
即向转发的外部区域添加配置行: