我的工作场所有一个内联网,其中的域名包括server01.foo.local
、server02.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
不会?
答案1
虽然我并不完全清楚为什么它不能按预期工作,但似乎与 mDNS 服务(Linux 中的 Avahi、Mac/Windows 中的 Bonjour/Zeroconf)和使用 .local 作为域的内部路由名称的 Windows 网络存在很大冲突。似乎发生的情况是,当 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
如果将其更改为:
hosts: files dns mdns4_minimal [NOTFOUND=return] myhostname
在搜索顺序中将 dns 向前移动,这应该可以暂时解决问题。或者,如果您知道根本不需要 mDNS,只需删除“mdns4_minimal [NOTFOUND=return]”部分。
看着Red Hat 跟踪器上的这个错误,这似乎是一个长期存在的问题,目前还没有明显的解决办法。不过,如果有人能提供更多有关为什么会出现这种情况的见解,我将不胜感激。
答案2
如果您使用域,我建议您使用另一种解决方案。首先,这不是一个好主意,因为它似乎是用于某些多播动态发现的.local
标准/惯例。.local
但如果你坚持的话,只需删除nss-mdns
软件包或libnss-mdns
取决于你的发行版的软件包,问题就会得到解决。如果你不需要该功能,那为什么还要保留它呢?
这里是yum info nss-mdns
:
Summary : glibc plugin for .local name resolution
URL : http://0pointer.de/lennart/projects/nss-mdns/
License : LGPLv2+
Description : nss-mdns is a plugin for the GNU Name Service Switch (NSS)
: functionality of the GNU C Library (glibc) providing host name
: resolution via Multicast DNS (aka Zeroconf, aka Apple Rendezvous,
: aka Apple Bonjour), effectively allowing name resolution by common
: Unix/Linux programs in the ad-hoc mDNS domain .local.
:
: nss-mdns provides client functionality only, which means that you
: have to run a mDNS responder daemon separately from nss-mdns if
: you want to register the local host name via mDNS (e.g. Avahi).
答案3
您可以检查以下事项:
/etc/host.conf 中是否有一条命令,指定在查询 DNS 之前检查 /etc/hosts?
server01 是否在 /etc/hosts 中?
/etc/resolv,conf 中是否有
search foo.local
?这会将 foo.local 附加到您查找的任何主机名
我想知道您的名称服务器是否设置正确。如果您仍有 nslookup,它会返回什么server01
,server01.foo.local
以及 ip 地址(反向查找)?