即使重新启动后, /usr/bin/host 也不会拾取对 /etc/hosts 的更改

即使重新启动后, /usr/bin/host 也不会拾取对 /etc/hosts 的更改

我有一台 Ubuntu Server 12.04 ( amd64) 机器,当我进行更改时/etc/hosts,即使重新启动后,更改也不会生效。我正在用来/usr/bin/host测试,但其他程序似乎也没有接收到它。

这是一台服务器,nscd尚未dnsmasq安装。此外,该文件/etc/nsswitch.conf包含以下行:

hosts:          files dns

所以我希望它能起作用。我还检查了mtime文件的 因编辑而发生变化,并尝试运行service networking restart(尽管困难重重)以及resolvconf -u.

所有命令都根据root需要运行。该计算机具有手动配置的网络,/etc/network/interfaces而不是通过网络管理器(也未安装)。

基本上我想要实现的是可以操纵一些主机的IP。原因是在我们的网络内部,我获得了一个没有路由的 IP,但我可以通过 HTTPS 使用该服务的外部 IP。

我缺少什么?

笔记:本地没有运行 DNS 服务器,并且nameserver中的行/etc/resolv.conf(以及 中的相应行interfaces)指向为我提供错误 IP 的 DNS 服务器。

另请注意:我在网上搜索并阅读了“类似问题”,但我的案例似乎没有被涵盖。

/etc/host.conf是:

# The "order" line is only used by old versions of the C library.
order hosts,bind
multi on

答案1

host 命令不检查主机文件。从联机帮助页:

host is a simple utility for performing DNS lookups.

如果您想在尊重主机文件的同时测试查找,请使用 ping 或 getent。

$ tail -1 /etc/hosts
127.0.0.1   google.com
$ ping -c1 google.com | head -1
PING google.com (127.0.0.1) 56(84) bytes of data.
$ getent ahosts google.com
127.0.0.1       STREAM google.com
127.0.0.1       DGRAM  
127.0.0.1       RAW    

答案2

host实用程序用于 DNS 查找。它不关心主机文件或解析主机名的非 DNS 方法。如果您想查看系统在正常情况下如何解析主机名(考虑到 nsswitch.conf),您可以使用getent.该host实用程序应保留用于 DNS 测试。这是一个例子:

$ host foobar.com
foobar.com has address 69.89.31.56
foobar.com mail is handled by 0 foobar.com.
$ getent hosts foobar.com
10.188.14.16    foobar.com

答案3

dig诸如、hostnslookup查询之类的程序域名系统仅有的。它们不查询其他主机名源,例如/etc/hosts、NIS 或 LDAP。

在大多数设置中,在本地顺利添加主机名的最简单方法是运行 DNS 服务器。无论如何,运行 DNS 缓存对于性能来说都是一个好主意。换句话说,本地没有运行 DNS 服务器这一事实是需要修复的问题,而不是需要解决的问题。

域名解析是一个常见的选择:它应用广泛、体积小(在许多基于 Linux 的路由器上使用)并且易于配置。 Dnsmasq 缓存 DNS 请求,并可以从主机文件中提供其他名称。它还提供了适合小型网络的基本 DHCP 服务器,但您不必使用该部分。如果您有一台隔离计算机,请在其上运行 Dnsmasq。如果您有本地网络,请在路由器上运行 Dnsmasq(或其他已有的等效软件)。看如何使用主机名从 LAN 访问计算机了解更多信息,包括如何设置 Dnsmasq。

相关内容