我正在学习如何设置自己的网络和邮件服务器,几天来我一直对这个问题感到困惑,而且网上的文章(包括 Server Fault)对“子域”和“主机名”这两个术语的使用似乎不一致。
据我了解:
- 主机名唯一地标识网络中的一台计算机
- 域名和子域名必须具有指向一个或多个主机的 DNS A 记录
假设我的 Web 服务器位于1.2.3.4
,我将主机名设置为development
(通过在 bash shell 中运行确认hostname
),并且我正在设置 A 记录,如下所示:
@ -> 1.2.3.4
www -> 1.2.3.4
mx -> 1.2.3.4
mx -> 9.8.7.6
然后,我有www
和mx
子域指向我的 Web 服务器,其主机名为development
。mx
子域也指向两个主机(用于冗余)。
为什么需要主机名?我的机器已经可以通过其 IP 地址来识别。
我读到过一篇文章,说主机名很重要,因为它会在某些消息中发送。但如果我的服务器既是邮件服务器,又是文件服务器、数据库服务器等,我应该将主机名设置为什么?我当然不希望收到我邮件的人看到发件人地址development
。一台机器只能有一个主机名,对吗?我应该将我的电脑设置hostname
为abc.example.com
还是只是abc
?
主要问题
如果在同一台机器上托管多台服务器,如何设置主机名?
答案1
主机名可以方便地唯一标识网络上的主机。它是一个完全内部的名称,可以是任何您想要的名称。主机名不必与其任何 DNS 名称相关。
例如,名为 abc 的主机可以拥有指向它的 DNS 记录,例如 www.example.com、mail.example.com 等等。
如果您在 LAN 内运行本地 DNS,您还可以为主机指定一个本地 DNS 名称 abc 或 abc.localdomain,这样您就可以http://abc
在浏览器中输入该名称。同样,这只会帮助您识别 LAN 内的主机。
答案2
回答您的问题 - 主机名应该是对您或您的组织有意义的名称。
主机名
主机名仅由主机使用。当未指定上下文特定身份时,系统和服务会将其用作默认(人类可读?)身份。
它可能用于日志文件中;它可能在您的 shell 上使用,以指示您正在管理哪个主机;正如您所指出的,您的邮件服务器的默认域名是您的主机名,但这需要进行配置。
DNS
在您的情形下,互联网上的任何事物都会使用 DNS,尝试找到通往您服务器的路径。这就是全部 - 一个指向 IP 地址的名称。您有多个指向同一服务器的记录,应用程序和服务可以使用它来决定如何处理请求,例如显示哪个网站,或将电子邮件发送到哪个邮箱。您需要告诉服务域名对它们意味着什么,但它们对主机本身没有任何实际意义。
说这两者毫无关联是错误的,因为通常会有一个内部管理的 DNS 基础设施(在 LAN 或 WAN 上),或者像 NetBIOS 或 MDNS 这样的分散名称发现方法。在这些情况下,主机名将用于在该命名服务中识别或注册主机。但是,从您对环境的描述来看,它们目前似乎没有任何关系。
答案3
主机名可以是任何你想要的,不一定非要从服务器的 FQDN 中获取,例如 abc.example.com 的主机名是 abc,尽管这样做很常见。这其实没什么大不了的,只是 example.com 下的其他服务器可能很容易识别出 abc 服务器。
然而,问题可能在于,如果想要为同一台机器上托管的每个服务器服务设置多个 FQDN,如问题中提到的 mail.example.com、db.example.com、web.example.com、ftp.example.com 和 dns.example.com 等,它们都在 abc.example.com 机器上。
原因可能是服务器管理员不希望服务器服务以 abc.example.com 的身份进行通信,而是希望例如 mail.example.com 以其自己的 FQDN 进行通信。
为此,他或她可能希望在自己的 FQDN 中保护每个服务器服务,而不仅仅是服务器主 FQDN abc.example.com。
如果是这样,我认为编辑 /etc/hosts 并在服务器的固定 IP 行(无论是 127.0.1.1 还是 192.168.0.1 或静态公共 IP)中添加服务器服务所需的所有 FQDN 可能是解决方案,例如:
abc.server.fixed.ip abc.example.com web.example.com mail.example.com dns.example.com other-services.example.com abc-server-preferred-name