Fedora 20 的 DNS 解析问题

Fedora 20 的 DNS 解析问题

我有一个新建的 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 并使用其中写入的内容解析名称。

相关内容