dig 从 DNS 服务器获取了正确的结果,但名称仍然无法解析

dig 从 DNS 服务器获取了正确的结果,但名称仍然无法解析

在什么情况下会发生以下情况?从内部网络上的给定 OSX 计算机:

$~ cat /etc/resolv.conf
nameserver 10.102.120.7
nameserver 10.102.120.2

从同一台机器:

$~ dig @10.102.120.7 in.local
<snip> ...
;; QUESTION SECTION:
;in.local.                      IN      A

;; ANSWER SECTION:
in.local.               43200   IN      A       10.102.123.30
<snip> ...

然而,该工作站无法 ping in.local,也无法加载该机器上由 apache 托管的页面。10.102.123.30 肯定已启动(我知道有 2 台 OSX 机器无法解析 in.local - 但网络上的其他机器可以)。我还检查了它们的 /etc/hosts,看看是否有任何东西可能会干扰... 不确定还要检查什么...

答案1

在 MacOS X 上, tld.local首先由 Multicast DNS Bonjour/Rendezvous 解析。这意味着如果您尝试将 DNS 服务器与 tld 一起使用.local,则不会使用该 DNS 服务器进行解析。

一些私有网络还使用“.local”域名来表示在其内部 DNS 服务器上注册的主机,即使它不是公共互联网上的有效顶级域名。如果您的 Mac 连接到这样的网络,您可能希望它通过使用单播 DNS 与 DNS 服务器对话来查找以“.local”结尾的主机名,就像它在互联网上查找主机名(例如“www.apple.com”)一样。

看:http://support.apple.com/kb/HT3473 和:http://support.apple.com/kb/TA20999

答案2

OS X 具有您可能需要刷新的操作系统级 DNS 缓存 - 例如 solaris/linux/bsd 上的 nscd。

尝试dscacheutil -flushcache(在 Leopard 上)或lookupd -flushcache(在 10.5.1 及之前版本上)。

答案3

你刚刚发现了原因使用 .LOCAL 不是一个好主意

答案4

我唯一能想到的是您没有使用 DNS 作为名称服务,或者名称已被缓存。

我更熟悉 Linux,但您可能正在寻找 OSX 的 /etc/ 等效文件中的 nsswitch.conf(或等效)文件,或者缓存守护进程(Linux 中的 nscd)配置(nscd.conf)或状态。

nsswitch.conf 控制名称解析方式。DNS 只是其中一种机制。其他机制包括文件 (/etc/host)、LDAP 和(我认为)NIS。

nscd 是一个名称缓存,当您对同一名称的重复请求时(例如,您从 Web 服务器加载 300 个页面),它通过将响应缓存适当的时间长度(例如,从示例 dig 输出中得出的 43200 秒)来帮助更快地解析名称

相关内容