主机名-它们的全部含义是什么?


54

我最近被迫“执行”一些系统管理员的工作,尽管我一直在阅读,试验和学习很多东西,但我绝对不喜欢这样做。

服务器配置的一个基本方面是我无法掌握主机名

例如在Ubuntu中,应该这样设置主机名(根据Linode Library):

echo "plato" > /etc/hostname
hostname -F /etc/hostname

文件:/ etc / hosts

127.0.0.1        localhost.localdomain        localhost
12.34.56.78      plato.example.com            plato

我假设这plato是一个任意名称,那plato.example.com就是FQDN。

现在我的问题是:

  • 它是强制性的吗?
  • 目的是什么?
  • 在哪里需要/使用它?
  • 为什么不能将“ localhost”定义为每台计算机的主机名?
  • 我是否需要为plato.example.comFQDN 设置DNS条目?
  • 应该plato.example.com用作我的IP的反向DNS条目吗?

此外,是否有任何“最佳做法”来选择主机名?我见过人们使用希腊字母,行星名称甚至是神话人物……当我们用完字母/行星时会发生什么?

抱歉,这是一个愚蠢的问题,但是我从来没有对网络配置感到太热心。


3
我认为Chris S在这里是基地。这个问题-什么是系统主机名以及它与DNS的关系-是一个有效的问题。
larsks 2011年

@克里斯·S:我明白了,相信我。我曾经尝试阅读过一次,但整个过程让我非常困惑。我并不希望成为SA,只是想稍微了解一些基础知识。
Alix Axel

这应该去社区Wiki
lynxman 2011年

1
@lynxman:我不在乎,但是为什么呢?
Alix Axel

1
因为它非常有趣:)
lynxman 2011年

Answers:


28

如今,系统可能具有多个接口,每个接口具有多个地址,并且每个地址甚至可能具有与其关联的多个DNS条目。那么“系统主机名”到底意味着什么?

许多应用程序在其他地方进行通信时,会将系统主机名用作默认标识符。例如,如果您要在中央服务器上收集系统日志消息,则所有消息都将标记有原始系统的主机名。在理想的情况下,您可能会忽略这一点(因为您不一定要信任客户端),但是默认行为(如果您将所有系统都命名为“ localhost”)将导致您收到大量日志消息将无法与特定系统关联。

正如其他人指出的那样,如果您发现自己远程访问多个系统,则系统主机名也是有用的标识符。如果您有五个连接到名为“ localhost”的系统的窗口,那么将很难保持它们的连续性。

同样,我们尝试使系统主机名与用于管理系统访问的主机名匹配。这有助于避免在引用系统时(在电子邮件,对话,文档等中)造成混乱。

关于DNS:

您想要为您的应用程序提供适当的正向和反向DNS条目,以避免混淆。您需要一些转发条目(名称-> IP地址),以便人们可以方便地访问您的应用程序。出于很多原因,使反向条目匹配很有用-例如,如果在日志中找到相应的IP地址,它可以帮助您正确识别应用程序。

请注意,这里我说的是“应用程序”而不是“系统”,因为-特别是对于Web服务器-通常在系统上有多个IP地址,并与不同的主机名和服务相关联。

/etc/hosts随着管理越来越多的系统,尝试快速维护文件中名称到ip的映射变得很困难。本地主机文件很容易就DNS不同步,从而可能导致混乱,并在某些情况下出现故障(例如,由于某些内容试图绑定到系统上不再存在的ip地址)。


感谢您的答复,我是否应该(或需要)维护/ etc / hosts文件而不是仅仅依靠DNS条目仍然感到困惑。
Alix Axel

8
我通常会忽略/etc/hostsDNS。这减少了我需要维护有关名称->地址映射信息的位置的数量。在我维护的大部分系统上,/etc/hosts仅包含的单个条目localhost
larsk's

当您处理群集(例如ganeti或Linux-HA / Corosync群集)时,/ etc / hosts用于在群集成员之间进行通信。仅依靠DNS是很不好的,因为您的DNS服务可能位于这些群集上,并且在节点更改过程中被迁移或脱机,因此/ etc / hosts和正确的主机名将为您提供很多帮助。
coredump

因此,关于“独特”,我们宁愿“尝试”成为“独特”,而不是“必须”具有独特性,对吗?因为那里有那么多服务器,而且它们都在同一个范围内,所以要实现实际的“唯一”是不可能的。这种理解正确吗?
shenkwen

10

您可以将每个主机名设置为“ localhost”,但是alix@plato ~ $通过ssh管理计算机时,在命令提示符中使用它非常方便。如果不这样做,远程管理服务器可能会变得非常混乱。

托管Web服务器或邮件服务器时,具有正确的FQDN非常重要。这些服务器应用程序喜欢知道它们在“谁”上运行。

为了选择一个好的命名方案,我请您参考这个非常受欢迎的问题

FQDN仅在对另一台计算机有意义时才有用。分为三个级别:

  • 本地网络上的一台计算机在其主机文件中有一个指向该计算机的条目
  • 您有一个在本地网络上运行的DNS服务器,并且每台将其用作DNS服务器的本地计算机现在都按名称知道plato。
  • 您注册了一个域名,现在全世界都知道plato.alixaxel.com指向的机器。

在向外部发送电子邮件或提供网页时,第三个是您想要的。对于大多数其他情况,您可以使用本地DNS甚至编辑主机文件。

在这种情况下,您只需组成一个域名(plato.alixnetwork可以用作FQDN)就可以在本地网络中使用。当您有一个希望与其他网络区分开来时,拥有“ alixnetwork”部分(域名)的唯一附加价值就是方便。


谢谢肯尼,我想我的主要疑问是,为什么对于Web /邮件服务器来说,拥有适当的FQDN很重要。另外,什么构成“适当的” FQDN?我是否应该将主机名放在域名之前,然后将其指向公共IP地址?我的印象是我必须使用主机名创建A / AAAA DNS条目,不是吗?
Alix Axel

这取决于您要实现的目标。如果您不使用plato向世界发送电子邮件或提供网页,则实际上无需为该计算机创建全局DNS记录。
肯尼·拉沙特

“您注册一个域名,现在全世界都知道plato.alixaxel.com名称指向的机器。” -我不明白。通过检查“ alixaxel.com”的DNS解析度,全世界是否不知道plato.alixaxel.com名称指向的机器?与在随机计算机中设置FQDN有什么关系?
shenkwen

8

基本概述。主机名只是指针;您可以为计算机引用的主机名分配一个特定的主机名,但是它可以有多个。某些服务(值得注意的邮件和HTTP)依赖域名来知道服务应位于何处以及如何获取它们。

很久以前,所有这些名称(它们再次只是指向IP地址的指针)都保存在名为的文件中hosts。随着系统的发展,他们无法在参与各种互连网络的所有相关计算机之间保持文件同步。因此,发明了DNS系统。当您进行名称查找时,它仍然会先检查主机文件,然后再检查DNS系统。Windows可能还会检查其他系统,例如WINS或NetBIOS。

将条目放入hosts文件中时,并没有将其分配给计算机。在配置文件中(在* nix系统上)和Windows系统中的“系统属性”(Windows系统也可以具有NIC特定的后缀)来完成将主机名分配为计算机使用的主机名的操作。

hosts文件中的条目(例如DNS系统)只是从主机名到IP地址的映射。为了使用主机名“ localhost”(没有什么特别的,它是与其他主机名一样的主机名),必须将其映射到回送接口(因此它将始终指向本地计算机)。为了确保此功能有效,所有计算机都在其hosts文件中带有此默认映射,但是如果您不想使用该主机名,则可以将其删除。

此外,正如其他人指出的那样,将主机名分配给计算机非常有用。连接到计算机后,您可以在登录时或根据提示或其他任意数量的位置显示计算机的主机名。这使得识别您连接的计算机更加容易。如果您在DNS中设置了该主机名或将其放入所有hosts文件中,则可以通过引用其主机名连接到计算机,而不必始终知道其IP地址。(如果计算机使用DHCP,则更有用,因为地址可能会更改。如果计算机更新DNS,则DNS记录将指向新的IP地址;您仍然可以在不知道新IP地址的情况下进行连接,因为您知道DNS名称)。

hostsDNS和DNS 都有许多其他用途,但是如果您阅读所有这些内容,我怀疑您比答案有更多问题。


4
尽管您最初对问题感到沮丧,但还是花+1抽出时间写出一个好的答案。
肯尼·拉沙特

很棒的解释!如果我的理解是正确的,/etc/hosts则不需要将FQDN放在中,将主机名放在DNS条目中将获得相同的结果,对吗?
Alix Axel

2
@Alix,正确,如果该条目位于DNS中(并且DNS正常工作),则将其包含在hosts文件中将是多余的。此外,hosts文件中的条目将覆盖DNS(有时可用于测试,但是当您忘记它时很烦人)。请注意,所有这些都是关于A和AAAA记录的,还有其他类型的主机名记录,但是为了清楚起见,我将其省略。
克里斯·S

谢谢克里斯,这使一切更加清晰。
Alix Axel

5

曾经的主人应该被赋予一个有意义的名字。主机名可以用作多种用途:

1-它可以帮助您识别当前正在使用的工具。

2-使用在/etc/hosts和/或DNS记录中配置的名称比记住许多IP地址更容易。

3- Localhost是引用当前计算机的保留名称(地址127.0.0.1)。

4- DNS记录对于使服务器可公开访问很有用。

为每个服务器选择一个合适的名称可以帮助您进行很多管理。此外,它还可以帮助您的客户端访问服务器。


2

顺带一提:正确地进行DNS解析和反向解析是此星球上每个IT安装的绝对基石。永远不要低估维护良好的DNS和正确的主机名解析的必要性!


我不明白为什么它很重要。我有一台托管许多网站的linode服务器。我不了解设置主机名的目的,只是将其保留为“ ubuntu”。该服务器已经运行了两年,我从未感到任何不便。我不是在问您的答案,我只是想了解为什么主机名很重要。就我而言,什么时候希望我正确设置主机名?
shenkwen '17

1
@shenkwen-如果老实说只有一台服务器,则可以随心所欲地命名它,这显然无关紧要。一旦服务器数量大于1,就需要管理新的问题,正确的命名是一个重要的工具。
mfinni

1

免责声明:主要问题是关于Linux系统的,所以如果您对问题的Windows方面不感兴趣,请随时忽略此答案。

无论如何,在Windows系统中,除了在其他答案中提到的所有要点之外,主机名实际上是OS本身用于联网和身份验证的目的。特别:

  • 无论是域成员还是非域成员,每个系统都必须在同一网络(即,在同一IP子网)中具有唯一的名称,否则将发生命名冲突,并且各种网络服务(主要是文件和打印共享)都不会工作。
  • 属于同一Active Directory域的成员的所有系统都必须具有唯一的名称,而不管网络边界如何。
  • 在域环境中,系统的主机名充当安全主体,并且可用于远程身份验证(将其视为计算机的用户帐户);可以为它分配权限和访问权限,并且可以出于安全目的将它们放在组中。这会影响使用内置帐户LocalSystemNetworkService用户帐户在系统上运行的所有进程,这些进程可以使用运行它们的系统的凭据向其他系统进行身份验证;这样,就可以NetworkService通过向SystemA的用户帐户授予对文件夹的权限,来像在SystemA上运行的进程一样访问SystemB上的共享文件夹。

-1

现在,许多站点和/或假定的“管理员”都在声明“主机名”属性包含操作系统实例的FQDN,这“破坏”了将“域名”附加到其后的任何解析:

主机名
system1.domain1.org

hostname
-无法解析system1.domain1.org.domain1.org


您可以为您的陈述提供参考来源吗?
Dave M
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.