![在分割水平 DNS 的情况下,当 DNS 服务器查询其无法控制的域时,其行为是否正确?](https://linux22.com/image/761288/%E5%9C%A8%E5%88%86%E5%89%B2%E6%B0%B4%E5%B9%B3%20DNS%20%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E5%BD%93%20DNS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9F%A5%E8%AF%A2%E5%85%B6%E6%97%A0%E6%B3%95%E6%8E%A7%E5%88%B6%E7%9A%84%E5%9F%9F%E6%97%B6%EF%BC%8C%E5%85%B6%E8%A1%8C%E4%B8%BA%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE%EF%BC%9F.png)
因此,我们的一家云提供商在虚拟机之间提供低延迟、零费率的“内部网络”选项。内部网络上的接口位于 10.xxx IP 空间中。当我们的一台服务器查询内部网络上另一台服务器的主机名时,我们希望它解析为内部网络上的地址,而不是公共可路由地址,因为后者会产生传输计费。
我们已经实现了一个小型服务器,它就是用来做这件事的,当源 IP 是 10.xxx IP 时,它会返回内部地址。
我们不想让内部服务器成为虚拟机的唯一主 DNS 服务器。我们希望它成为客户端列表中的第一个服务器,然后是公共 DNS 服务,如 1.1.1.1。
那么,如果内部 DNS 查询 google.com(我们不拥有该网站),我们应该返回给客户端的正确响应是什么?我们应该直接忽略该请求,还是应该返回 NxDomain 响应?
感谢您的任何建议!
答案1
如果您使用递归服务器,它应该响应从权威基础架构解析的正确答复。如果您返回NXDOMAIN
,DNS客户端将信任该答案并且不会继续使用其他服务器。如果您不回复任何内容,那只会导致不必要的超时延迟。
此外,DNS客户端通常不具备理解此类条件解析的功能,但DNS服务器却具备。因此,可以考虑的一种选择是在每台服务器上安装本地DNS服务器,以执行有条件转发。在这种情况下,您要配置的唯一 DNS 服务器resolv.conf
是localhost
即127.0.0.1
。
这些示例采用 BIND 配置格式,因为您没有在问题中指定您的风格。
options {
forwarders { 1.1.1.1; };
}
zone "example.com" {
type forward;
forward only;
forwarders { 10.8.8.8; };
};
或者,如果与内部 DNS 服务器的连接不稳定,服务器也可以通过区域传输托管内部区域的副本:
zone "example.com" {
type slave;
file "/etc/bind/db/example.com";
masters { 10.8.8.8; };
};
当然,主服务器也应该允许传输。