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

有点卡在这里。

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

但LAN上的其他计算机可以解析主机名。

我的局域网:

  • 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另一台PC(wstation)

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

如果我然后追加.local

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

直接

 $ 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 

关于您当前的输出

 ping wstation PING wstation.local.domain 

清楚地表明您的电脑正在将.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 )都应该有效。

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

 sudo vim /etc/nsswitch.conf . . . hosts: files dns # mdns4_minimal [NOTFOUND=return] dns 

我在/ 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