![为什么 D-Link 路由器的 DNS 不返回本地主机名?](https://linux22.com/image/1347679/%E4%B8%BA%E4%BB%80%E4%B9%88%20D-Link%20%E8%B7%AF%E7%94%B1%E5%99%A8%E7%9A%84%20DNS%20%E4%B8%8D%E8%BF%94%E5%9B%9E%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA%E5%90%8D%EF%BC%9F.png)
我有一台 D-Link DIR-600。您可以在此处查看其部分配置:
如您所见,我设置了两个固定主机名,“wilson”和“sheldon”。但是,如果我尝试通过名称访问它们,无论从 LAN 中的哪台计算机,无论是 Ubuntu 还是 Windows,都无法正常工作:
$ nslookup wilson
Server: 192.168.178.1
Address: 192.168.178.1#53
** server can't find wilson: NXDOMAIN
$ nslookup wilson.local
Server: 192.168.178.1
Address: 192.168.178.1#53
** server can't find wilson.local: NXDOMAIN
$ nslookup stackexchange.com
Server: 192.168.178.1
Address: 192.168.178.1#53
Non-authoritative answer:
Name: stackexchange.com
Address: 69.59.197.21
除了将这些主机名添加到 /etc/hosts 之外,还有其他方法可以获取这些主机名吗?
答案1
在两个 matchine 上使用 Linux,请尝试getent hosts wilson.local
,或者简单地ping wilson.local
。这假设您已经安装了 avahi-daemon 和 nss-mdns,通常情况如此。
nslookup 和 dig 等特定 DNS 工具不会自动支持 MDNS(多播 DNS)上的 .local。它们会绕过标准 C 库进行名称解析,并且不会与 avahi-daemon 本身集成。
我还尝试在 /etc/resolv.conf 中设置“搜索本地”/要求 NetworkManager 使用“本地”作为本地域。即允许ping wilson
不使用 .local。但看起来 nss-mdns 没有实现它。
我没有 Windows 的说明。最简单的方法可能是使用 Apple 的 Bonjour。
这是 Linux 采用的 Apple 衍生系统。还有一个基于 Windows 的替代方案。Linux 可以使用 samba 中的“winbind”守护程序集成到其中。我也没有这方面的说明 :)。
我认为我的 Netgear DG834 也不会返回本地 DNS 名称。有趣的是,我认为如果他们愿意的话,他们可以返回。我的路由器和其他路由器使用 dnsmasq,并且默认dnsmasq 配置已返回本地 DNS 名称。我已经亲自测试过 - 我在 Linux 服务器上运行 dnsmasq,并禁用/忽略路由器的 DHCP/DNS 服务。