ubuntu 服务器无法解析 LAN 主机名

ubuntu 服务器无法解析 LAN 主机名

有点卡在这儿。

我有两台机器无法解析 LAN 主机名,除非 /etc/hosts 中有特定条目

但局域网上的其他机器解析主机名。

我的局域网:

  • 1 个 Cisco 路由器,运行 DD-WRT v24-sp2,启用 DNSMasq。我已使用 LAN 上的主机名和 IP 对其进行了配置。
  • 1 x Kubuntu 12.10(只要在路由器上输入 DNSMasq,就能正确解析所有主机名)
  • 2 x NAS(也能正确解析所有名称)

  • 1 x Ubuntu Server 12.04(除非将本地主机名输入到 /etc/hosts 中,否则不会解析本地主机名)

  • 1 x XBMCLive (Dharma)(相同 - 除非条目位于 /etc/hosts 中,否则不会解析)

如何让最后 2 个使用路由器上的 DNSMasq 条目?每台机器都设置为使用路由器作为名称服务器,并且所有单元都正确解析外部地址。

谢谢。

更多信息:

在服务器上,如果我 ping 另一台电脑(wstation)

$ ping wstation
PING wstation.local.domain (x.x.x.x) 

如果我接着追加。当地的

$ ping wstation.local
PING wstation.local.local.domain (x.x.x.x)

并直接

$ ping 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_req=1 ttl=64 time=0.387 ms
64 bytes from 10.0.0.4: icmp_req=2 ttl=64 time=0.316 ms
64 bytes from 10.0.0.4: icmp_req=3 ttl=64 time=0.312 ms
64 bytes from 10.0.0.4: icmp_req=4 ttl=64 time=0.280 ms
64 bytes from 10.0.0.4: icmp_req=5 ttl=64 time=0.322 ms
^C
--- 10.0.0.4 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.280/0.323/0.387/0.038 ms                                                                       

答案1

关于您当前的输出

ping wstation
PING wstation.local.domain

清楚地表明您的 PC 正在附加.local.domain非 FQDN 查询。这是配置不当或至少是您的设置错误。(除非您故意使用后缀.local.domain

名称解析和句点

许多人不知道的一件重要的事情是,全名应始终以句点 ( .) 结尾。如果您省略它,则机器将尝试在本地搜索域(例如 mydomain.tld)内解析它。因此在这种情况下,查询mypc.local将变成mypc.local.mydomain.tld。为了防止这种情况,查询时期。

解析器配置

解析器配置在这里非常重要。在 Ubuntu(和 Debian)中,这是在文件中配置的/etc/network/interfaces(假设您没有运行 NetworkManager):

iface eth0 inet static
   address 192.168.3.3
   netmask 255.255.255.0
   gateway 192.168.3.1
   dns-nameservers 192.168.3.45 192.168.8.10
   dns-search foo.org bar.com                      # <-- these are the search domains

Linux 中的名称解析也可以通过其他方式完成。不仅仅是查询本地 DNS 服务器来完成所有这些操作。查看您的解析配置/etc/nsswitch.conf文件:hosts

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

这意味着首先尝试文件(即文件/etc/hosts),然后是 mDNS,之后才查询真正的 DNS 服务器。mDNS 在 Linux 中使用 Avahi 实现,在 Apple 设备上称为 Bonjour。它.local默认使用后缀并通过广播消息工作。与 ARP 的工作方式非常相似,但后者适用于 DNS。

所有这些系统都可能非常令人困惑,在与 mDNS 设备混合使用的常规 DNS 设置中,情况会更加混乱.local。我猜这就是为什么你现在感到困惑,为什么一个设备可以工作,而另一个却不能:它们并不都采用相同的解决方法。

理清事情

  • 除非您想完全依赖 mDNS,否则请避免使用.local。从您的问题中我了解到您希望自己在一个中心位置进行配置,所以我的方法是避免使用它。
  • 配置您的本地 DNS 服务器(您的情况是 DD-WRT 设备)以使用特殊域名,例如my.home。对于 dnsmasq,这是一个单一设置,但在常规设置中,应在 DNS 服务器和 DHCP 服务器上配置此项(因为它是通过 DHCP 宣布的)。
  • 将所有 PC 配置为具有一个简单且唯一的主机名。它们在 DHCP 请求中使用此主机名,并在路由器上运行的 dnsmasq 中使用此主机名来解析它们。或者,手动配置它们,以便不必依赖 DHCP。
  • 删除所有剩余的配置,以防/etc/resolv.conf您过去曾摆弄过它。
  • 配置网络中的 PC 以用作my.home本地搜索域。这可以通过 DHCP 自动完成,或者如果使用静态地址则通过文件/etc/network/interfaces或网络管理器完成:

    在此处输入图片描述

  • 现在简单名称解析(ping hostname)和全名(ping hostname.my.home)都应该可以工作了。

答案2

根据 gertvdijk 的回答,我刚刚注释掉了 nsswitch.conf 中的行

sudo vim /etc/nsswitch.conf

.
.
.
hosts:          files dns # mdns4_minimal [NOTFOUND=return] dns

答案3

我遇到过类似的问题,因为 /etc/hosts 中的 IP 和主机名之间有多个空格,而我使用的是 TAB。改用 TAB 后,主机名就可以通过 ping 解析了。

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

另请参阅https://superuser.com/a/938366/467479

相关内容