我最近在 VPS 上设置了 MTA,在配置它时我意识到我对 Unix 中主机名的概念和实现感到非常困惑。
我对 DNS 有深入的了解,并且熟悉它的前身文件hosts
,但我对经典的内部网络没有经验,因为我一直使用直接连接到互联网的服务器。
如果你搜索这个主题,就会有很多相互矛盾的解释,所以,首先,我想要求对主机名进行彻底的介绍(不仅仅是简单的,而是复杂的、多层次的名称),完全独立于主机名。 DNS 和互联网,和 然后解释它们与 DNS 的关系,以及令人困惑的“完全限定域名”术语(这与 DNS 或其他内容中的相同)。
我还想知道典型 Unix 机器(或至少在 Debian/Ubuntu 上)上的哪些文件和命令在管理主机名中发挥着作用,特别是:
/etc/hostname
(简单或复杂的名称?这是带有 A 记录的东西吗?)的角色和正确设置- 关于设置主机名的作用和正确设置
/etc/hosts
(不仅仅是为了解析?什么名称和指向哪里?) - 任何其他文件
- 如何在不重新启动的情况下应用对主机名的更改?
更详细的答案比试图简化主题的答案更受欢迎,因为后一种类型有很多答案,这就是混乱的根源。
答案1
根据 slm 的评论,系统主机名由内核维护在内存中,用户态软件获取它的正确方法是通过gethostname()
系统调用。
默认主机名实际上被编译到(linux)内核中,因此如果您自己使用,则可以这样设置。我认为发行版内核通常使用localhost
(也可以为空)。
因为大多数人可能不想仅仅为了设置主机名而编译内核,所以还有一个系统调用来设置它,sethostname()
;这由诸如 之类的命令使用hostname
。通常在启动期间,init 服务将使用来自 的值来执行此操作/etc/hostname
。然而,这不是强制性的。
对主机名的设置没有任何限制,但请注意,它与主机名不同完全限定域名(完全限定域名)。 FQDN 是主机名加上您的域名。如果您使用以下方法设置域名,您的主机名中可能不应该有任何点。
/etc/hosts 在设置主机名方面的作用和正确设置(不仅仅是为了解析?什么名称和指向哪里?)
它用于 DNS 解析,但帕特里克(Patrick)解释了如何使用它来设置域名的工作原理这里。这是对主机名的查找,然后使用 IP 地址进行反向查找;与仅仅设置它相比,有点迂回和混乱,hostname --fqdn
但看起来更常见。
这样做并不会阻止domainname
返回(none)
,但也许这无关紧要。
答案2
首先,系统的主机名在系统引导时被初始化。主机名不与内核一起编译。
在 Debian 中/etc/init.d/hostname.sh
作为启动脚本的一部分运行。该脚本从中读取主机名/etc/hostname
并使用hostname
命令来设置它。
系统的主机名只是为了识别它自己。即使系统未连接到网络,系统也需要为自己命名,主要用于日志记录和其他目的。例如,所有日志消息都有主机名。这只是为了表明自己的身份。
/etc/hosts
主机名与它完全没有任何关系/etc/hostname
。
应该/etc/hostname
只包含主机名部分而不是 FQDN。
下面可以告诉你其中的区别。
$ hostname
kannan
$ hostname -d
oongil.com
$ hostname -f
kannan.oongil.com
现在是 FQDN 部分。
如果您的系统是大型网络的一部分并且需要唯一地标识自己,则主要需要 FQDN。
/etc/hosts
文件包含系统主机名和 FQDN 的查找表,在此处映射
127.0.1.1 kannan.oongil.com kannan
在基于 Debian 的系统中,127.0.1.1 映射到系统 FQDN。因此,当hostname -fqdn
调用时,系统会查询/etc/hosts
以获取此信息。
内容的顺序/etc/hosts
非常重要。
如果您不想/etc/hosts
查询 FQDN,则可以更改 中的顺序/etc/nsswitch.conf
。
我的配置如下,这里/etc/hosts
先查询然后DNS。
主机:文件 mdns4_minimal [NOTFOUND=return] dns mdns4
如果您需要了解更多主机名和完全合格域名参考这个Debian 邮件线程。