我遇到过需要使用 4 个 DNS 服务器 + 1 个外部服务器(ISP 或 8.8.8.8)的情况。虽然普通 DNS 客户端只考虑 DNS 服务器的第一个答案,无论是 IP 还是未找到,但我的请求永远不会“到达”能够提供正确答案的第二台或第三台服务器。
一些背景信息:
- 有 4 个完全隔离的区域,有自己的 DNS 服务器:子网 1.1.1.0/24,域:domain1.net,DNS 服务器 ns.domain1.net .... 子网 4.4.4.0/24,域:domain4.net,DNS 服务器 ns.domain4.net
- 正确答案始终只有一个 DNS 服务器知道
我已经从一台外部机器设置了到每个区域的 SSH 隧道,因此我拥有到 DNS 服务器的网络连接。但是,如果我将所有 DNS 服务器都放在我的 /etc/resolv.conf 上,并查找 my-machine.domain4.net,我将无法解析该请求,因为第一个请求的服务器是 ns.domain1.net,它总是会显示“找不到名称”。
我知道 dnsmasq,但我的例子过于简单了;而实际上我有 4 个区域和数百个域+子域。每隔几天,这个域列表就会增加或删除,因此在 dnsmasq 条件转发器中自己管理它们会非常麻烦。
有没有办法跳过“未找到”的答案并询问下一个服务器?
Windows、Linux、Mac、Docker、专用 VM 解决方案对我来说都很好。
谢谢
答案1
让所有 DNS 服务器向前他们将请求发送到他们不知道的 FQDN 的相应服务器。DNS 中没有“如果我不喜欢答案则跳过并询问其他人”模式或“随机重定向”,这很快就会陷入递归循环。
但您可以(也应该)指定哪些区域应该重定向到哪里。如果您在每个 DNS 中都这样做,那么每个请求都会得到正确的答复。
例如:
- 具有 domain1.net 的子网 1 具有 DNS ...
- 将“domain2.net”转发到 Subnet2 的 DNS
- 将“domain3.net”转发到 Subnet3 的 DNS
- 将“domain4.net”转发到 Subnet4 的 DNS
- 具有 domain2.net 的子网 2 具有 DNS ...
- 将“domain1.net”转发到 Subnet1 的 DNS
... 等等。
例如,在 BIND 中,您可以执行以下操作:
zone "domain2.net" {
type forward;
forward only;
forwarders { 2.2.2.200 };
};