为什么不将主机名分配给 /etc/hosts 中的环回地址?

git*_*rik 7 hostname hosts-file

所以我知道主机名应该(至少在 Debian 系统中)设置在/etc/hostname. 要获取 FQDN(通过hostname -f),系统会从主机名中找到 IP /etc/hosts,然后返回该行中的第一个条目。

所以如果主机名是server1,这是在/etc/hosts

192.0.2.1    server1.example.com    server1
Run Code Online (Sandbox Code Playgroud)

它将返回server1.example.com。所以这就是它在许多网站上的描述方式。但我在想:为什么不将主机名分配给环回地址?就像你做的那样localhost

127.0.0.1    server1.example.com    server1    localhost
Run Code Online (Sandbox Code Playgroud)

使用这种方法,您不必知道外部 IP 地址。此外,可能使用 FQDN 的应用程序将直接在系统上发出请求,而不是通过网络。

那么,为什么不这样做呢?为什么互联网上的大多数示例都使用外部 IP 地址?

Oli*_*lac 5

出于多种原因,这可能是个坏主意

  • 如果你有一个 ip(并与其他主机通信),强烈建议将主机名放在外部已知的 ip 前面。

    • 一些协议可能会说“告诉其他人你的主机名和它的 IP 地址”“好的。其他人,我是 foo.localnetwork(127.0.0.1)”。另一个人将收到此数据包,在 IP 级别为外部 IP,但在协议级别为 127.0.0.1 IP,因此如果该协议需要使用广告信息而不是IP 级别的(例如,SIP 可能有问题...)

    • 此外,某些服务仅绑定在持有与主机名相关联的 ip 的接口上,因此这些服务只能通过环回设备与主机对话,没有其他人...

  • 今天早上我遇到了第二个案例。将服务器配置为在特定端口上侦听由其完全限定域名给出的 IP 地址,然后使用“telnet”测试连接,然后告诉远程协作者服务器已启动并正在运行。他无法连接。事实证明,服务器软件和 `telnet` 都没有进行 DNS 查找:两者都解析为 `127.0.1.1`,所以我的 `telnet` 命令正在连接,但无法进行远程连接。 (2认同)

小智 4

这是默认设置,至少在新的 Ubuntu 版本上是这样。

这是我的/etc/hosts配置:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   sprinkler.internal.lan sprinkler
Run Code Online (Sandbox Code Playgroud)

无论如何,这都不是问题,而且事实上,它还有一个额外的效果,即某些操作不需要有效的 DNS。

我个人倾向于添加更多条目,例如本地 apt 存储库、一些构建器等。