无法解析 .foo.local 域名

rho*_*amp 16 networking linux dhcp

我的工作场所有一个内网,域名如server01.foo.localserver02.foo.local等。我最近启动了 Fedora 16 实时环境进行测试,发现这些域名无法解析。

例如:

$ ping server01.foo.local
ping: 未知主机 server01.foo.local
$ ping server01
PING server01.foo.local (XXXX) ...

为什么会server01解析(并将名称打印为server01.foo.local),但server01.foo.local不会?

小智 22

虽然我不是 100% 同意为什么它不能按预期工作的原因,但似乎与 mDNS 服务(Linux 中的 Avahi,Mac/Windows 中的 Bonjour/Zeroconf)和 Windows 网络存在很大的冲突。使用 .local 作为域的内部路由名称。似乎发生的是,在 ping server01 时,它跳过使用 mDNS 进行解析,然后将搜索域 (foo.local) 附加到请求中,成功查询 server01.foo.local 的 DNS 服务器。但是,当使用 mDNS(使用 .local 作为默认机器扩展名)时,当您尝试 ping server01.foo.local 时,它实际上是通过 mDNS 广播寻找名称为“server01.foo”的机器;当它失败时,无论出于何种原因,它都不会转向直接的 DNS。一个很大的解决方法是不将您的域命名为 .local,这可能与大多数 Windows 管理员的域结构培训背道而驰。话虽如此:

如果 mDNS 在您的网络中无关紧要(这在企业中很常见,它倾向于运行专用 DNS 服务器而不是有时使用 mDNS 的家庭网络),那么更改搜索顺序是最简单的解决方法。

这可以在 /etc/nsswitch.conf 中找到。主机部分将列出顺序,Fedora 16 默认为:

hosts:      files mdns4_minimal [NOTFOUND=return] dns myhostname
Run Code Online (Sandbox Code Playgroud)

如果您将其更改为:

hosts:      files dns mdns4_minimal [NOTFOUND=return] myhostname
Run Code Online (Sandbox Code Playgroud)

您在搜索顺序中向前移动 dns 的位置,现在应该可以解决问题。或者,如果您知道根本不需要 mDNS,只需删除“mdns4_minimal [NOTFOUND=return]”部分。

查看Red Hat 跟踪器上的这个错误,似乎这是一个长期存在的问题,目前没有明显的修复。不过,如果有人能提供更多关于为什么会这样发生的见解,我们将不胜感激。