因此,我理解主机名应该(至少在 Debian 系统中)设置在 中/etc/hostname
。要获取 FQDN(通过hostname -f
),系统会从主机名中找到 IP /etc/hosts
,然后返回行中的第一个条目。
因此,如果主机名是,server1
并且位于/etc/hosts
:
192.0.2.1 server1.example.com server1
它将返回server1.example.com
。所以这就是许多网站上的描述。但我在想:为什么不将主机名分配给环回地址?就像你对所做的那样localhost
:
127.0.0.1 server1.example.com server1 localhost
使用这种方法,您无需知道外部 IP 地址。此外,可能使用 FQDN 的应用程序将直接在系统上发出请求,而不是通过网络。
那么,为什么不这样做呢?为什么互联网上大多数示例都使用外部 IP 地址?
答案1
它可以出于多种原因,这是一个坏主意
如果您确实有一个 IP(并且与其他主机通信),强烈建议将主机名放在外部已知 IP 的前面。
某些协议可能会说“告诉对方您的主机名及其 IP 地址”,“好的。对方,我是 foo.localnetwork(127.0.0.1)”。对方将收到此数据包,在 IP 级别上是外部 IP,但在协议级别上是 127.0.0.1 IP,因此如果该协议需要使用公布的信息而不是 IP 级别的信息,则交换可能会很困难(例如,SIP 可能会出现问题...)
此外,一些服务仅绑定在持有与主机名关联的 IP 的接口上,因此这些服务只能通过环回设备与主机通信,而不能与其他任何人通信......
答案2
这是默认设置,至少在新的 Ubuntu 版本中是如此。
这是我的/etc/hosts
配置:
127.0.0.1 localhost.localdomain localhost
127.0.1.1 sprinkler.internal.lan sprinkler
它不会造成任何问题,事实上,它还有一个额外的好处,就是某些操作不需要有效的 DNS。
我个人倾向于添加更多条目,例如本地 apt repo、一些构建器等。