我有一台 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
诸如、host
和nslookup
查询之类的程序域名系统仅有的。它们不查询其他主机名源,例如/etc/hosts
、NIS 或 LDAP。
在大多数设置中,在本地顺利添加主机名的最简单方法是运行 DNS 服务器。无论如何,运行 DNS 缓存对于性能来说都是一个好主意。换句话说,本地没有运行 DNS 服务器这一事实是需要修复的问题,而不是需要解决的问题。
域名解析是一个常见的选择:它应用广泛、体积小(在许多基于 Linux 的路由器上使用)并且易于配置。 Dnsmasq 缓存 DNS 请求,并可以从主机文件中提供其他名称。它还提供了适合小型网络的基本 DHCP 服务器,但您不必使用该部分。如果您有一台隔离计算机,请在其上运行 Dnsmasq。如果您有本地网络,请在路由器上运行 Dnsmasq(或其他已有的等效软件)。看如何使用主机名从 LAN 访问计算机了解更多信息,包括如何设置 Dnsmasq。