Linux 主机:在 hosts 文件中设置主机名/FQDN 的目的是什么?

Linux 主机:在 hosts 文件中设置主机名/FQDN 的目的是什么?

我刚买了一个利诺德VPS 托管计划并遵循此指导设置。在“设置主机名”部分和“更新 /etc/hosts ”部分,它说这里要设置的 FQDN/主机名不需要与我将要托管的网站相关,这让我很困惑。

我通过阅读大量文章进行了研究,但仍然不太确定主机名/FQDN 在我的网络托管业务中扮演什么角色。以下是我设法找出的一些基本事实,如果有任何错误,请随时纠正我:

  1. FQDN 必须是类似 xxx.somedomain.com 的格式,如果省略“xxx.”那么它就不是 FQDN。
  2. 我认为可以将其xxx笼统地称为子域名,也可以称为“主机名”,根据https://kb.iu.edu/d/aiuv
  3. hosts在我的本地机器上,通过在文件中添加以下行

    63.117.14.58 www.yahoo.com 任意

所有对“www.yahoo.com”或“其他”的网络请求都将被重定向到 IP 地址 63.117.14.58(即 google.com 的 IP)。这是一种在本地机器上阻止不受欢迎网站的方法。

现在本教程建议将此行添加到我的服务器中的“hosts”文件中

12.34.56.78(//my server's IP) myhostname.anything.com myhostname

它提到,在上面这一行中,域名可能是也可能不是我要托管的域名,但主机名应该是我在前面的步骤中已经设置的主机名。我的问题是:

1)基于事实#3,我认为这行将服务器上的任何请求重定向myhostname.anything.commyhostname我的 IP 地址,但这是什么意思呢?myhostname.anything.com来自用户计算机的任何请求难道不应该已经转换为某个 IP 地址(无论是否是我的 IP 地址)吗?为什么我必须在我的服务器上重定向它?我对 HTTP 请求的工作方式的理解是,当用户在浏览器中输入域名时,浏览器将联系域服务器,域服务器将根据域的 DNS 记录将其定向到 DNS 服务器,然后 DNS 服务器将解析 IP 地址,然后浏览器从该 IP 地址获取数据。据我了解,这个过程似乎与我服务器上的“hosts”文件无关。

2)A.关于 FQDN,为什么主机名必须与我在服务器上设置的主机名相同,而域名却不必?

B.如果我在这里设置了不同的主机名,会发生什么情况?

C.在这里将我的域名设置或不设置为 FQDN 的目的是什么?

D.如果我只设置 FQDN 而不设置主机名,会发生什么情况?像这样

12.34.56.78(//my server's IP) myhostname.anything.com

有很多问题,但我相信其中一些问题的答案是重叠的,总的来说,我认为最大的问题是“设置主机名/编辑主机文件在我的网络托管业务中起什么作用?”

提前感谢您的时间。

答案1

回答这个问题会很困难,因为它从一个简单的前提开始,然后进入一个很深的兔子洞。让我们从头开始。

主机文件与 DNS

我认为这不需要太多解释,所以我会简短地介绍。hosts 文件的目的是定义不依赖 DNS 的主机到 IP 地址映射。对于服务器来说,其中最重要的是设备自己的名称,因为如果 DNS 服务器出现问题而导致设备无法通过名称引用自身,这是很愚蠢的。

只要我们只使用主机文件,我们就根本不需要使用域。DNS 不参与,所以谁在乎呢?不幸的是,随着我们网络的增长,让每台设备独立跟踪网络上所有设备的名称变得越来越不可持续。这导致我们使用 DNS,并引入了一些新的后勤障碍。

主机名与 FQDN

主机名是设备名称,或者您喜欢的节点名称。它是一个唯一标识名称,对设备所有者有意义,但对使用设备上的服务的人来说不一定有意义,甚至不一定是公开的。这就是 Linode 所说的名称不需要与您托管的服务有任何关系的意思。

例如,假设您拥有一家名为 Contoso 的公司,并且运营一个名为 的网站example.com。该网站托管在六台机器上,分别命名dalek01为 至dalek06。外界只需知道,只要他们接入www.example.comWeb 浏览器,就可以访问他们想要的网站。过于好奇的时间领主无需关心他们的请求是否www.example.com由 提供服务dalek03

主机名本身并不一定具有任何事物与 DNS 完全无关。它只是设备的名称,甚至不一定具有与之关联的域后缀。到目前为止,它很简单!

现在我们让事情变得有点棘手。故事时间到了!

  • 您的公司 Contoso 拥有多台台式机,可通过专用网络与 dalek 集群进行通信。
  • 当其中一台服务器出现问题时,您需要登录到出现问题的特定设备。我们不能直接连接到www.example.com,因为它由几台不同的机器托管。幸好我们有一个唯一标识出现问题的服务器的名称!
  • 由于我们拥有庞大的设备网络,因此我们最常使用 DNS 来管理它。这意味着我们需要将主机名粘贴dalek01dalek06某个 DNS 域中。幸运的是,我们拥有contoso.com(以我们公司的名字命名),与 完全独立www.example.com,后者可能是我们的客户之一。
  • 由于互联网不需要知道我们的内部 IP 地址,因此我们维护一个名为 的私有 DNS 域corp.contoso.com。我们所有的台式机都配置了 DNS 搜索后缀corp.contoso.com。这意味着,如果我们创建一个名为 的 DNS 条目,我们网络上的任何人都可以通过使用其 SSH 客户端dalek01.corp.contoso.com连接到 来访问该机器。方便!dalek01
  • dalek01知道它叫什么,dalek01因为我们把它放在 hosts 文件中。我们希望它知道它也叫什么,但我们不希望它依赖 DNS 来知道自己的名字。那样太愚蠢了。因此我们在 hosts 文件中dalek01.corp.contoso.com为 定义了一个别名,这样它就知道它的所有名字。dalek01.corp.contoso.comdalek01
  • 与此同时,人们继续使用www.example.com,却没有注意到您有六台dalek01通过命名的服务器dalek06,您的公司名为 Contoso(您的客户除外),或者为了方便您的员工,您通过 创建了 DNSdalek01记录dalek06.corp.contoso.com

综合起来

  • 您的主机名对您和运行服务器的人员有意义,但对使用其服务的人来说不一定有意义。
  • 除非您拥有共享专用网络的多台设备,否则主机名不需要存储在 DNS 中(或者根本没有 DNS 域)。
  • 服务器依赖 DNS 进行自身通信是愚蠢的。
  • 将主机名放入 DNS 中会导致需要在主机文件中定义 FQDN,这样它就不会依赖 DNS 使用 FQDN 与自身通信。(如上所述,这样做很愚蠢)

希望这涵盖了所有基础。

相关内容