我在 Linux 机器上有一个应用程序,它使用反向查找来解析主机名。问题是,我的 resolve.conf 中有两组 DNS 服务器(总共 4 台服务器),每组对应不同的 IP 范围。它对一个 IP 范围(无论哪个恰好在列出的第一个服务器中)工作正常,但如果我尝试 nslookup 另一个范围,它会报告未找到:3(NXDOMAIN)。如果它只是尝试列表中的下一个服务器,它会成功......有没有办法让它这样做?DNS 服务器仅对其各自的范围具有权威性。
答案1
我将安装 dnsmasq,使其成为(127.0.0.1)唯一的名称服务器,并使用“服务器”dnsmasq.conf 指令将其配置为查询此服务器或该服务器以获取此域或该域。
如果有办法从 DNS 服务器尝试 NXDOMAIN 上的不同服务器,那就是使用具有该功能的本地 DNS 服务器。Linux 解析器不允许这样做。PowerDNS 可以配置为针对每个查询运行命令,因此作为最后的手段,您始终可以这样做。
答案2
回复@cstamas,只是为了澄清如何使用 dnsmasq 解决 VPN 问题。
假设您的计算机位于 IP 地址为 10.1.0.0/16 的 homenetwork.test 域中,DNS 服务器为 10.1.0.1。该 DNS 服务器只能查询 worknetwork.test 域的“外部”域名。它对 homenetwork.test 和 1.10.in-addr.arp 具有权威性(内部)。
现在,您连接 VPN 以加入工作网络,并且现在通过该接口有了一条通往 10.2.0.0/16 的新路由,以及一个新的 DNS 服务器 10.2.0.1,该服务器对 worknetwork.test 和 2.10.in-addr.arpa 具有权威性。如果您使用其中一个名称服务器,则只能解析 worknetwork.test 和 homenetwork.test 域中的一个。
如果您同时使用两个 DNS 服务器(和 RES_ROTATE),情况就不会更好,因为有时您只能解决其中一个。
现在,如果你使用
dnsmasq --no-resolv --no-negcache --no-host --conf-file= \
--server=/worknetwork.test/10.2.0.1 \
--server=/2.10.in-addr.arpa/10.2.0.1 \
--server=10.1.0.1
并且在 resolv.conf 中有“nameserver 127.0.0.1”,您将使用 10.2.0.1 来解析 worknetwork.test 和 10.2.xx IP 地址以及您的家庭 DNS 服务器来解析其余地址。
答案3
你提供的信息太少,所以开始起来很难,但我会尝试......
首先,您所说的服务器是权威 DNS 服务器(提供有关您设置的区域的信息),对吗?如果是这样,您应该在 resolv.conf 中设置一个仅递归的服务器(仅为您解析 DNS 名称,不提供信息)。您可以将其安装为在本地主机上进行监听学校说。
另一方面,如果服务器返回 nxdomain,则表示:“我知道这个名称,我是它的权威服务器,但这个名称不存在。”标准 DNS 解析算法到此停止。所以就是这样,没有办法解决这个问题。您应该将权威 DNS 服务器设置为不对该名称具有权威性。