作为 IP 抽象的域名与作为服务器名称的域名 - /etc/host{s,name} - 为什么?

作为 IP 抽象的域名与作为服务器名称的域名 - /etc/host{s,name} - 为什么?

域名是IP地址的抽象。无论该 IP 位于哪台计算机,域名都应该指向那里。那么为什么我们要使用 /etc/{hosts,hostname} 和/或 systemd 的 hostnamectl 将域名与计算机关联起来呢?我绝对一无所知,但这对我来说似乎是错误的。

我正在家里设置第一台可公开访问的服务器,使用动态 DNS 域名,因此遇到了这个主机/主机名问题。我不是唯一一个问它,但那个人没有得到答案。

答案1

/etc/hostname(请参阅man 5 hostname)中,您可以并且应该设置服务器的本地主机名。此名称可以在此服务器上运行的软件中使用。这只是一个字符串,在服务器外部不可见。

相反,该文件/etc/hosts用于将计算机名称解析为 IP 地址。您可以将其视为穷人的 DNS 服务器。在过去,在域名系统开发之前,大型主机文件实际上是在互联网上的计算机上发送的,以用名称映射统一的网络。如果您有正在运行的 DNS 服务器并且本地网络中不存在多于一台服务器,则通常无需在此处添加条目。

为了不依赖名称服务器,您可以在 中输入您自己的服务器及其 IP 地址/etc/hosts。但是,您应该注意,随着服务器数量的增加和地址范围的变化,维护此文件变得很繁琐。

答案2

DNS 名称与 IP 地址不是一对一的,例如域名可能仅用于电子邮件,因此它只有 MX 记录而没有 IP 地址。或者多个名称可以指向一个 IP 地址,这对于为多个具有单独域名的站点提供服务的 Web 服务器来说很常见。此外,单个域名可能指向多个 IP 地址,这对于负载平衡可能很有用。

在许多这样的情况下,区分 DNS 中的公共“服务名称”和标识系统并出现在日志和命令提示符中的内部名称可能会很有用。

/etc/hosts/etc/hostname真的没有关系吗?前者是 DNS 的替代品,而后者用于存储系统的“内部”主机名。

相关内容