Mik*_*her 3 domain-name-system linux
CentOS 7。我的问题是一个看似常见的问题,nslookup
可以解决主机,但ping
不能。然而,像弄乱avahi 或 /etc/nsswitch.conf这样的常见答案无济于事,因为我的 VPS 既没有运行 Avahi 也没有运行 NetworkManager。(换句话说,我可以/etc/nsswitch.conf
通过设置中断hosts: files
并ping
继续工作)
/etc/resolv.conf
如下:
nameserver 10.44.13.246
nameserver 10.32.72.88
nameserver 10.32.72.86
Run Code Online (Sandbox Code Playgroud)
第一个名称服务器指向dnsmasq
在我的另一个 VPS 上运行的实例,最后两个是托管服务提供商的 DNS 服务器。我希望按顺序查询它们(最后两个只是最后的退路)。
现在,对于该dnsmasq
实例中定义的任何主机,nslookup
始终有效,并且ping
在某些时候也有效——主机将正确解析,然后中断,然后几分钟后又会正常。但是,如果我etc/resolv.conf
像这样删除上游 DNS 服务器,
nameserver 10.44.13.246
#nameserver 10.32.72.88
#nameserver 10.32.72.86
Run Code Online (Sandbox Code Playgroud)
然后ping
立即开始工作100% 的时间。这直接与 resolv.conf 文档相矛盾,它说在没有option rotate
指令的情况下,服务器按顺序查询,直到发送响应。
nscd
正在运行并且正在被命中,因为我可以看到这些有问题的查询的缓存命中/未命中计数器上升。
我该如何解决这个问题?
我没有对更大问题的直接答案,但对其中一些不同的部分有答案。
关于ping
vsnslookup
值得注意的是,这ping
只是一个使用 OS 解析器库(即getaddrinfo
/gethostbyname
调用)的常规程序的示例,而nslookup
(以及dig
等)是 DNS 客户端程序,它们自己进行 DNS 查询,而不是使用解析器库,为了方便起见,他们碰巧从系统解析器的配置文件中选择了他们的默认服务器。
这是什么意思的是,nslookup
用于测试系统解析器的行为(即如何不好resolv.conf
,nsswitch.conf
等等),而例如ping
是用于测试DNS坏。
可以注意到,在 Linux 领域,我会考虑getent ahosts
(例如getent ahosts www.example.com
)一个更好的选择来测试解析器行为,并且dig
比nslookup
测试 DNS更可取。
关于你可以做什么来了解正在发生的事情
正如Hangin 在安静的绝望中建议的那样,您可能想要使用strace
(也许也是ltrace
为了更高级别的视图),我建议使用它getent ahosts
而不是ping
不获得ping
实际目的的所有噪音,而您重新尝试观察什么只是副作用。getent ahosts
只是做你正在尝试调查的一件事。
关于 resolv.conf 中的内容
当“错误”的服务器被查询时,你所说的关于“破坏”的事情让我想知道你为什么把所有这些服务器resolv.conf
放在首位。将具有不同行为(以某种方式对您的使用实际上很重要的方式不同)的服务器全部放在列表中通常真的不是一个好主意。
归档时间: |
|
查看次数: |
3164 次 |
最近记录: |