我有一个新建的 Fedora 20 服务器,刚刚连接到我的网络。它是在 VirtualBox 主机上运行的虚拟服务器。一切似乎都正常,但我在名称解析方面遇到问题。
(我应该说,名称解析是由 Windows 服务器在单独的硬件上提供的,该硬件适用于网络上的所有其他计算机。)
从命令行我可以解析外部主机,例如unix.stackexchange.com
.我可以很高兴地解决这个问题并对其进行 ping 操作,就像我尝试过的所有其他外部主机一样。
然而,我的本地网络(我们称之为xyz.local
)是不同的。我的 F20 机器上的网络接口位于DOMAIN=xyx.local
网络脚本中(完整脚本如下)。从命令行我可以解析,例如,,server-01
但不能解析server-01.xyz.local
。
我可以解析短形式的别名,即使规范名称是长形式,因此,例如,ping mysql
成功解析为其 alias linux-04.xyz.local
,但我既不能解析mysql.xyz.local
也不能解析linux-04.xyz.local
。
显然我错过了一些东西。谁能建议什么?
/etc/hosts 仅包含 127.0.0.1 的标准 localhost 条目
/etc/resolv.conf如下:
#Generated by Network Manager
search xyz.local
nameserver 192.168.xxx.xxx
我的界面脚本是
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="Wired connection 1"
UUID=<uuid>
ONBOOT=yes
IPADDR0=192.168.xxx.xxx
PREFIX0=24
GATEWAY0=192.168.xxx.xxx
DNS1=192.168.xxx.xxx
HWADDR=<mac>
DOMAIN=xyz.local
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
答案1
您的部分问题可能是由于您的搜索路径是通过 NetworkManager 自动生成的:
search xyz.local
这行确实应该是这样的:
search xyz.local.
末尾的句点至关重要,因为它会告诉 DNS 解析器停止。所以它不会对你做这样的事情:
mysql.xyz.local.xyz.local
您可以通过尝试临时手动添加句点来解析主机名来确认这一点。
$ nslookup mysql.xyz.local.
广泛解析此域
要解决此问题,您需要更改 DHCP 服务器上域的定义,以便将域作为xyz.local.
.
/etc/nsswitch.conf
用于解析主机名的方法由文件控制/etc/nsswitch.conf
。 NSS 符号代表名称服务切换,您可以通过手册页阅读更多相关信息man nss
。
这是我的文件中控制主机名解析方式的行:
$ grep ^hosts /etc/nsswitch.conf
hosts: files dns mdns4_minimal
它首先查看我的本地文件,/etc/hosts
然后查询 DNS 第二。
答案2
该问题是由于 nsswitch.conf 文件中的关键字“mdns4_minimal”引起的。该关键字告诉解析器所有以 local 结尾的内容都应该使用 mdns 进行查询。删除该关键字(以及通常在方括号中给出的其他选项)应该就足够了。
更多详细信息你可以在我的邮政
nslookup 解决所有问题的原因是因为它不查找 nsswitch.conf 而是直接使用 /etc/resolv.conf。另一方面,ping 取决于解析器,该解析器首先查看 nsswitch.conf 并使用其中写入的内容解析名称。