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


14

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

mongodb@mongodb:/var/hadoop/hadoop-1.2.1/bin$ host mongodb
Host mongodb not found: 2(SERVFAIL)

我的/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
  • 我的第一个问题是:既然/etc/hosts是从IP映射到主机名,为什么这台机器不能将主机名解析mongodb为IP 192.168.10.10?相反,当我运行时host localhost,它可以解决并显示:

    localhost has address 127.0.0.1
    
  • 我的另一个问题:根据/etc/hosts文件,主机名localhost应该已经解析为192.168.10.10而不是回送IP地址127.0.0.1。有人可以向我解释吗?

Answers:


30

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

希望改变localhost映射到127.0.0.1比任何其他,这会对很多事情奇怪和微妙的影响。我认为/etc/hosts是按照编写的顺序进行解析的,因为您有:

192.168.10.10   localhost
127.0.0.1       localhost

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


5
/etc/hosts直接查询DNS服务器时,不会对DNS解析产生任何影响host。但是,许多系统工具和实用程序都使用localhost定义,期望它是一个环回地址,并使用系统名称解析(/etc/hosts在查询DNS之前进行查看)来解析名称,而不是严格使用DNS(可能并不总是存在)。
DopeGhoti 2014年

1
我也可以分享有关/etc/hosts文件问题的经验localhost。过去,我们曾使用过一些软件,该软件会127.0.0.2 localhost在主机文件中插入a ,并且最后一个localhost条目使它成为有效条目,从而导致各种软件和许可问题。因此,我的建议是将其127.0.0.1 localhost作为/etc/hosts文件中的第一个条目,并确保localhost该文件中没有其他条目。而且我还将验证任何ipv6内容。
罗恩,2016年

5
有点儿古怪,如果这是您在nsswitch.conf中配置主机查找的方式,则两者都执行ns查找,这可能是dns查找。
symcbean

1
@symcbean-您所说的正确。我不会叫那个学究的。
DarkHeart '16

2
值得注意的非明显例外是,如果您/etc/resolv.conf指向直接在设备上运行的DNS服务器(例如缓存dnsmasq),并且该服务器/etc/hosts在查询外部服务器之前正在咨询您的本地服务器。然后,间接地,类似这样的命令host将受到您的影响/etc/hosts-这是一种不常见的设置,但是我见过设备附带的命令,如果有人不知道这种特殊设置,则使用这种系统的人的经验似乎会与该答案相冲突。 。
mtraceur

9

除了DopeGhoti的答案以外/etc/hosts,还可以使用以下getent hosts <some_hostname>命令来测试解析(包括优先级)。


-3

在/ etc / hosts中,我在IP和主机名之间包含多个空格而不是使用TAB时遇到了类似的问题。更改为TAB后,可以通过ping解析主机名。

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

另请参阅/superuser//a/938366/467479


5
这让我感到惊讶。的联机帮助页上hosts说:Fields of the entry are separated by any number of blanks and/or tab characters. 也许您的情况是IP和主机名之间有一些多余的不可打印字符?
dr_

绝对没有不可打印的字符。我在将此内容发布到这里之前检查了此内容;)
Thomas Lauria 2015年

我没有制表符,我运行SLES 11.x,从dvd全新安装后,我的/ etc / hosts文件127.0.0.1后跟7个空格,然后是localhost。因此,我会有点犹豫地将问题具体固定在多个空格字符上,并最终使用制表符作为解决方案。
罗恩

忘记提及选项卡与空间的关系也可能在特定版本或Linux发行版中发生,这可能是一个错误吗?如果是这种情况,则您应该能够使用制表符或空格输入各种IP地址/主机名条目,然后对它们执行ping操作,以查看其是否得到解决...只是不使用localhost
ron

不幸的是,我不记得我在哪台机器上(也就是发行版)遇到了问题...-我认为它是在virtualboximages.com/上的Ubuntu 15.05上进行的…… 我将对此进行评估。
托马斯·劳里亚
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.