Fedora 20 的 DNS 解析问题

6 fedora dns host-name-resolution

我有一个刚刚连接到我的网络的新建 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 的标准本地主机条目

/etc/resolv.conf 如下:

#Generated by Network Manager
search xyz.local
nameserver 192.168.xxx.xxx
Run Code Online (Sandbox Code Playgroud)

我的界面脚本是

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
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 3

您的部分问题可能是由于您的搜索路径是通过 NetworkManager 自动生成的:

search xyz.local
Run Code Online (Sandbox Code Playgroud)

这行确实应该是这样的:

search xyz.local.
Run Code Online (Sandbox Code Playgroud)

末尾的句点至关重要,因为它会告诉 DNS 解析器停止。所以它不会对你做这样的事情:

mysql.xyz.local.xyz.local
Run Code Online (Sandbox Code Playgroud)

您可以通过尝试临时手动添加句点来解析主机名来确认这一点。

$ nslookup mysql.xyz.local.
Run Code Online (Sandbox Code Playgroud)

广泛解析此域

要解决此问题,您需要更改 DHCP 服务器上域的定义,以便将域作为xyz.local..

/etc/nsswitch.conf

用于解析主机名的方法由文件控制/etc/nsswitch.conf。NSS 符号代表名称服务切换,您可以通过手册页阅读更多相关信息man nss

这是我的文件中控制主机名解析方式的行:

$ grep ^hosts /etc/nsswitch.conf
hosts:      files dns mdns4_minimal
Run Code Online (Sandbox Code Playgroud)

它首先查看我的本地文件,/etc/hosts然后查询 DNS 第二。