注意 - 我相信我的标题就是它的意思......
我在我的服务器上使用 dnsmasq 并将 DNS(通过 DHCP)设置为客户端:
192.168.2.1 (local server)
ISP DNS 1
ISP DNS 2
这至少有效 - 在我的 Ubuntu 客户端中sudo nmcli dev list | grep DNS
给出
IP4.DNS[1]: 192.168.2.1 (local)
IP4.DNS[2]: 122.56.237.1 (ISP 1)
IP4.DNS[3]: 210.55.111.1 (ISP 2)
但是,如果我执行ping mail.mydomain.org
它会返回外部互联网地址而不是本地网络。
nslookup
显示 Ubuntu 的网络管理器正在工作(与nmcli
上面匹配),并指出我的域的外部 IP 是非权威的。当我更改为 时server 192.168.2.1
,搜索只会给我本地 IP。
我的(客户的)resolve.conf 最终是
nameserver 172.20.1.153
nameserver 172.20.1.6
nameserver 127.0.1.1
初级在底部吗?这就是 nslookup 似乎使用的...
那么怎么会发生这种情况呢?我应该做什么来修复它? (我当然想保留一个辅助 DNS)。我尝试过只使用本地 DNS 服务器,但是无论我更改什么配置,dnsmasq 似乎都无法转发任何内容(文档也没有帮助,因为默认情况下它似乎应该“仅转发”)。
请注意,虽然我的分析是在 Ubuntu 上进行的,但同样的情况也发生在 Mac 上。
答案1
DNS 解析器列表和NS
记录集本质上都不是有序的,因此不存在“主要”。客户可以自由查询他们想要的任何一个,按照他们想要的顺序。特别是对于解析器,客户可能默认情况下,按照提供给客户端的顺序使用服务器,但是,正如您所发现的,它们也可能不是。
答案2
在我看来,最简单的方法是让本地解析器也进行递归查找。您可以使用 ISP 解析器的 IP 配置本地解析器,然后仅使用本地解析器配置所有客户端。如果有的话,它会用自己的信息进行响应,并且通过 LAN 上的服务器进行的时间损失是微不足道的。