/etc/hosts 中的主机名和 IP 地址映射

wuc*_*ang 16 ip hostname

在我的 linux 机器上,当我运行时hostname,它显示mongodb,但是当我运行时host mongodb,它显示:

mongodb@mongodb:/var/hadoop/hadoop-1.2.1/bin$ host mongodb
Host mongodb not found: 2(SERVFAIL)
Run Code Online (Sandbox Code Playgroud)

我的/etc/hosts文件:

192.168.10.10   mongodb
192.168.10.10   localhost
127.0.0.1       localhost
#127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Run Code Online (Sandbox Code Playgroud)
  • 我的第一个问题是:既然/etc/hosts是从IP映射到主机名,为什么这台机器无法将主机名解析mongodb为IP 192.168.10.10?相反,当我运行时host localhost,它可以被解析并显示:

    localhost has address 127.0.0.1
    
    Run Code Online (Sandbox Code Playgroud)
  • 我的另一个问题:根据/etc/hosts文件,主机名localhost应该已解析为 192.168.10.10 而不是环回 IP 地址 127.0.0.1。任何人都可以向我解释这一点吗?

Dop*_*oti 31

host(和nslookup)公用事业明确查询DNS服务器时,没有咨询的/etc/hosts在默认的系统配置文件。如果你去tracerouteping那个地址,你会看到它正确解析。

希望改变localhost映射到127.0.0.1比其他任何东西!这会对许多事情产生奇怪而微妙的影响。我认为/etc/hosts是按照它的编写顺序解析的,因为你有:

192.168.10.10   localhost    # do NOT do this!
127.0.0.1       localhost 
Run Code Online (Sandbox Code Playgroud)

...第二个条目可能会覆盖第一个条目。

  • `/etc/hosts` 在直接查询 DNS 服务器时对 DNS 解析没有*任何*影响,这正是 `host` 所做的。然而,许多系统工具和实用程序 * 使用 * `localhost` 定义,期望它是一个环回地址,并使用系统名称解析(在查询 DNS 之前查看 `/etc/hosts`)来解析名称,而不是严格执行到 DNS,它可能并不总是存在。 (5认同)
  • 有点迂腐,两者都进行 ns 查找,如果这是您在 nsswitch.conf 中配置主机查找的方式,这 * 可能 * 是 dns 查找。 (5认同)
  • 一个值得注意的非明显例外是,如果你的 `/etc/resolv.conf` 指向直接在你的设备上运行的 DNS 服务器(比如缓存 `dnsmasq`),并且该服务器正在查询你本地的 `/etc/hosts`在查询外部服务器之前。然后,间接地,像 `host` 这样的命令将受到你的 `/etc/hosts` 的影响 - 这是一种不常见的设置,但我见过设备附带的一种,使用这种系统的人的经验似乎与此冲突如果有人不知道这种特殊的设置,请回答。 (2认同)

HBr*_*ijn 11

除了 DopeGhoti 的答案之外,为了测试您的解析,包括/etc/hosts优先级,您可以使用该getent hosts <some_hostname>命令。