我在公司内联网上运行 Ubuntu 18.04,它有两个子网和两个关联的 DNS 域,Ubuntu 机箱位于第一个子网中。我希望能够在两个子网上使用主机的短名称,而不是 FQDN。假设 DNS 域是 subnet1.com (192.168.1.0/24) 和 subnet2.com (192.168.2.0/24),我有:
nameserver 192.168.1.2
nameserver 192.168.2.2
search subnet1.com subnet2.com
在 中/etc/resolv.conf
。我的机器是linux.subnet1.com
,每个子网上还有另外两台机器,分别是盒子 a 和 b。所以如果我这样做,ssh boxa
一切都很好,但是当我这样做时,它会先尝试,然后才尝试并最终成功ssh boxb
,这会有一个漫长的延迟。boxb.subnet1.com
boxb.subnet2.com
当我在 Windows 上执行同样的事情时,会像在 Linux 上一样出现初始延迟,但随后它会记住哪些有效并且下一次会立即执行。
有没有办法可以大幅加快速度或在 Linux 上缓存结果?
在实际的机器上,我使用 dnsmasq 进行缓存,然后它依次查询这 2 个上游 DNS 服务器。但是,dnsmasq 只能看到 FQDN,因为解析器使用搜索列表来完全限定短主机名查询,因此除非存在某种奇怪的 dnsmasq 设置,即“确定忽略给定域并仅使用主机名部分进行通配符匹配”,否则解决方案可能就在解析器中。
我搜索了很久,但没有找到任何关于如何加快解析器中的搜索列表或缓存以前的结果以避免将来延迟的参考。
答案1
由于我是在内部网上,以前从来不需要为多个域设置搜索,所以我不熟悉预期超时等问题,因为 DNS 服务器故障超时可能很长,因此未知的 FQDN 需要一段时间才能失败似乎并不奇怪。然而事实并非如此。
第一个问题是 DNS 服务器速度慢或无法正确响应并显示“未知”消息。第二个问题是,在我的 dnsmasq 配置中,我启用了选项no-negcache
来解决由于 VMware vSphere 上的虚拟机来来去去等而导致 FQDN 来来去去和更改的问题。然而,这个问题比上面提到的延迟要小得多,因为人们总是可以刷新缓存。一旦做出这一改变,行为就与 Windows 上的行为完全相同。