主机文件似乎被忽略

z4y*_*4ts 23 domain-name-system linux ubuntu hosts

我有几乎全新的 Ubuntu 桌面盒。操作系统是两周前安装的,并从 karmic 存储库更新。上周我的 DNS 没有问题。但本周发生了一些变化。我不确定是什么和什么时候,也不确定我是否更改了任何配置。

所以现在我有一些非常奇怪的情况。根据日志名称解析应该可以正常工作。

/etc/hosts

127.0.0.1   localhost test
127.0.1.1   desktop
Run Code Online (Sandbox Code Playgroud)

/etc/host.conf

order hosts,bind
multi on
Run Code Online (Sandbox Code Playgroud)

/etc/resolv.conf

# Generated by NetworkManager
search search servers obtained via DHCP
nameserver 192.168.0.3
Run Code Online (Sandbox Code Playgroud)

/etc/nsswitch.conf

passwd:         compat
group:          compat
shadow:         compat

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis
Run Code Online (Sandbox Code Playgroud)

但如果事实并非如此。

user@test ~>ping 测试

PING localhost (127.0.0.1) 56(84) bytes of data.
[skip]
Run Code Online (Sandbox Code Playgroud)

ping 没问题。

用户@测试 ~> 主机测试

test.mydomain.com has address xx.xxx.161.201
Run Code Online (Sandbox Code Playgroud)

我怀疑 NetworkManager 可能会导致这种不当行为,但不知道从哪里开始检查。有什么想法、建议吗?

Aln*_*tak 23

使用此配置,大多数应用程序将很乐意与您从/etc/hosts.

然而host不看/etc/nsswitch.conf。这是设计使然,并非偶然,因为host专门是一个 DNS 查找程序。 /etc/hosts不是 DNS,它(大部分)是我们拥有 DNS之前使用的。

这同样也适用于dignslookup-它们是DNS具体了。


tyl*_*erl 20

host命令(连同dignslookup)是bindDNS 实用程序的一部分。作为 DNS 解析器实用程序,它单独进行 DNS 解析。

如果您有兴趣从任何libnss驱动数据存储中获取条目,您可以使用该getent程序。例如,要获取主机条目,请像这样使用它:

getent hosts google.com
Run Code Online (Sandbox Code Playgroud)

在此之前,该决议顺序设置了下hosts:/etc/nsswitch.conf安排妥当,这包括/etc/hosts如果“文件”是lised作为选项之一。

  • 我相信现在应该使用 `getent ahosts` 而不是 `getent hosts`,因为 `getent hosts` 使用的是过时的 `gethostbyaddr()` 或 `gethostbyname*()`。如果我理解正确的话,`getent hosts` 模拟过去使用的 UNIX C 程序有多老,而 `getent ahosts` 模拟现代程序应该工作的方式。 (3认同)