为什么我的主机名在 /etc/hosts 中显示地址为 127.0.1.1 而不是 127.0.0.1?

Tom*_*Tom 241 linux hostname defaults loopback localhost

这可能是一个有点菜鸟的问题,但我正在查看新安装的 Xubuntu 上的 /etc/hosts 并看到了这一点:

127.0.0.1 localhost
127.0.1.1 myhostname
Run Code Online (Sandbox Code Playgroud)

在我使用过的大多数 'nix 中,第二行被省略,如果我想将我的主机名添加到主机文件中,我会这样做:

127.0.0.1 localhost myhostname
Run Code Online (Sandbox Code Playgroud)

在任何实际意义上,这两个文件之间有区别吗?

Dan*_*man 186

两者之间没有太大区别;127/8(例如:127.0.0.0=> 127.255.255.255)都绑定到环回接口。

原因记录在Ch的 Debian 手册中5 网络设置 - 5.1.1。主机名解析

归根结底,这是一个错误解决方法;原始报告是316099

  • 实际原因:“将系统主机名与后者相关联会产生不良影响,使 'localhost.localdomain' 成为与系统主机名关联的规范主机名。也就是说,'hostname --fqdn' 返回了 'localhost.localdomain'。” (7认同)

ein*_*lum 54

总结链接到的信息:

  • /etc/hosts将机器的完全限定域名翻译成其永久 IP 地址时有一个条目(值得商榷)很有用。
  • debian-installer,更具体地说,它的netcfg组件目前(至少到 2013 年 3 月)创建了这个条目。
  • 如果机器不知道有一个永久的 IP 地址,debian-installer 仍然希望它有那种条目。
  • 地址127.0.1.1使用环回接口,由您自己的机器回答,就像127.0.0.1但是是一个不同的条目/etc/hosts,可以与127.0.0.1if/when 必要时分开考虑。

Thomas Hood 解释添加此条目如下:

[这] 将确保如果 UNIX 主机名解析,那么它将始终是它自己的规范主机名

但:

从长远来看,UNIX 主机名根本不应该放在 /etc/hosts 中。

  • .. 所以... ?我必须为我的 fdqn 使用 127.0.0.1 吗?还是 127.0.1.1?还是静态局域网ip? (2认同)

Bri*_*mas 14

我自己很好奇,我不喜欢任何其他答案,因为他们似乎至少没有回答我正在寻找的问题。

答案: 回顾这个文档,似乎 Thomas 说的是“在环回上给它另一个专用 ip 使其成为规范的”。

两者都指向您的环回。使用以下 127.0.1.1 是环回上的实际 IP,而 127.0.0.1 是设备本身或环回上的另一个 IP。两者都在同一个子网中,代表环回,但由 ip 分隔。它们是等效的 dns 明智的,但由于具有专用 ip 而分开。

关键是,您可以像这样将所有条目放在一行上

127.0.0.1 localhost localhost.domain www.myfakednsname.com myakednsname.com 
Run Code Online (Sandbox Code Playgroud)

如果您的主机名是本地的,这意味着没有映射到实际 Internet ip 的全局 Internet DNS 条目,那么在这种情况下,Thomas 说您需要拥有第二个条目行,像这样将其专用于(规范)。

127.0.0.1 localhost localhost.localdomain
127.0.1.1 myfakednsname
Run Code Online (Sandbox Code Playgroud)

  • 好的反对票,不知道为什么。我仍然相信这是最好的答案,否则我不会这么说,在登陆这里之后。最初的答案有帮助,但没有捕获所有细节。我会选择这个。 (2认同)

小智 6

我读了几个答案,坦白说我有点困惑。

我首先尝试了解什么是规范主机

我能说的是 @cmroanirgo 说得对,在我的 Ubuntu 笔记本电脑上调用

hostname --fqdn 
Run Code Online (Sandbox Code Playgroud)

/etc/hosts这样配置

127.0.0.1   localhost 
127.0.1.1   laptop
Run Code Online (Sandbox Code Playgroud)

返回laptop,而更改文件如下

127.0.0.1   localhost laptop
Run Code Online (Sandbox Code Playgroud)

返回localhost

我不知道这会产生什么影响,除了以下事实:如果您有绑定到主机名的软件,并且您需要在机器内部与它对话,则不要期望能够使用“localhost”主机名在此设置中完成这项工作,因为它们最终会解析两个不同的单独地址。

  • 一个示例含义:无人值守升级使用“socket.getfqdn()”(在 python 中)作为邮件主题。我希望 UNIX 主机名能够区分不同的机器(不是 localhost),因此 127.0.1.1 的变体似乎是正确的,或者至少对我来说更好。 (2认同)