最近我被“迫使”执行一些系统管理工作,虽然这不是我非常喜欢做的事情,但我一直在阅读、实验和学习很多东西。
我一直无法掌握服务器配置的一个基本方面 -主机名。
例如,在 Ubuntu 中,应该像这样设置主机名(根据Linode 库):
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”定义为每台机器的主机名?
- 我是否必须为 FQDN 设置 DNS 条目
plato.example.com
? - 应该
plato.example.com
用作我的 IP 的反向 DNS 条目吗?
另外,选择主机名是否有任何“最佳实践”?我见过有人使用希腊字母、行星名称甚至神话人物... 当我们用完字母/行星时会发生什么?
抱歉,这是一个愚蠢的问题,但我对网络配置从来没有太过热衷。
答案1
如今,一个系统可能有多个接口,每个接口有多个地址,每个地址甚至可能有多个与之关联的 DNS 条目。那么“系统主机名”到底是什么意思呢?
许多应用程序在与其他地方通信时会使用系统主机名作为默认标识符。例如,如果您在中央服务器上收集系统日志消息,则所有消息都将使用原始系统的主机名进行标记。在理想情况下,您可能会忽略这一点(因为您不一定想信任客户端),但默认行为(如果您将所有系统命名为“localhost”)将导致一堆日志消息,而您无法将这些消息与特定系统关联起来。
正如其他人指出的那样,如果您发现自己远程访问多个系统,系统主机名也是一个有用的标识符。如果您有五个窗口连接到名为“localhost”的系统,那么您将很难将它们区分开来。
同样,我们尝试使系统主机名与我们用于系统管理访问的主机名相匹配。这有助于避免在提及系统时产生混淆(在电子邮件、对话、文档等中)。
关于DNS:
您希望为您的应用程序提供正确的正向和反向 DNS 条目,以避免混淆。您需要一些正向条目(名称 -> IP 地址)可使人们能够方便地访问您的应用程序。反向条目匹配有很多好处,例如,如果您在日志中找到相应的 IP 地址,它可以帮助您正确识别应用程序。
请注意,这里我谈论的是“应用程序”而不是“系统”,因为——特别是对于 Web 服务器——一个系统上通常有多个 IP 地址,与不同的主机名和服务相关联。
随着您管理的系统数量不断增加,尝试在/etc/hosts
文件中维护名称到 IP 的映射很快就会变得困难。本地主机文件很容易与 DNS 不同步,这可能会导致混乱,在某些情况下还会导致故障(例如,因为某些东西试图绑定到系统上不再存在的 IP 地址)。
答案2
您可以将每个主机名都设置为“localhost”,但当您通过 ssh 管理机器时,在命令提示符中使用它非常方便alix@plato ~ $
。如果不这样做,远程管理服务器可能会变得非常混乱。
当您托管 Web 服务器或邮件服务器时,拥有正确的 FQDN 非常重要。这些类型的服务器应用程序需要知道它们在“谁”上运行。
为了选择一个好的命名方案,我建议你这个非常受欢迎的问题。
FQDN 仅在对另一台计算机有意义时才有用。这有三个级别:
- 本地网络上的一台计算机在其 hosts 文件中有一个指向该计算机的条目
- 您的本地网络上运行着一个 DNS 服务器,并且每个使用它作为 DNS 服务器的本地计算机现在都知道 plato 的名字。
- 您注册了一个域名,现在全世界都知道 plato.alixaxel.com 这个名称指向哪台机器。
当向外界发送电子邮件或提供网页时,您需要第三个。对于大多数其他情况,您可以使用本地 DNS 甚至编辑 hosts 文件。
在这种情况下,您只需创建一个域名(plato.alixnetwork 可以作为 FQDN)即可在您的本地网络中使用。拥有“alixnetwork”部分(域名)的唯一附加价值是,当您想要将其与另一个本地网络区分开来时,它会很方便。
答案3
基本概述。主机名只是指针;您可以指定一个特定的主机名作为机器引用的主机名,但可以有多个。某些服务(尤其是邮件和 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 名称)。
和 DNS都有许多其他用途hosts
,但我想,如果您读完所有这些内容,您的疑问会比答案还多。
答案4
免责声明:主要问题是关于 Linux 系统,因此如果您对问题的 Windows 方面不感兴趣,请随意忽略此答案。
无论如何,在 Windows 系统中,除了其他答案中提到的所有要点之外,主机名实际上是由操作系统本身用于联网和身份验证目的;具体来说:
- 每个系统(无论是否是域成员)都需要有一个唯一的名称在同一网络中(即在同一个IP子网中),否则会引起命名冲突,导致各种网络服务(主要是文件和打印共享)无法工作。
- 无论网络边界如何,属于同一 Active Directory 域的所有系统成员都必须具有唯一的名称。
- 在域环境中,系统的主机名充当安全主体,可用于远程身份验证(只需将其视为机器的用户帐户即可);可以为其分配权限和访问权限,并可以出于安全目的将其放在组中。这会影响使用内置
LocalSystem
和NetworkService
用户帐户在系统上运行的所有进程,这些进程可以使用它们正在运行的系统的凭据向其他系统进行身份验证;这允许NetworkService
在 SystemA 上运行的进程通过向 SystemA 的用户帐户授予文件夹的权限来访问 SystemB 上的共享文件夹。