了解主机名

了解主机名

我最近在 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 邮件线程

相关内容