了解主机名

Joó*_*dám 6 networking hostname hosts domain

我最近在 VPS 上设置了 MTA,在配置它时我意识到我对 Unix 中主机名的概念和实现感到非常困惑。

我对 DNS 有深入的了解,并且熟悉它的前身hosts文件,但我对经典的内部网络没有经验,因为我一直使用直接连接到 Internet 的服务器。

如果有人搜索这个主题,那里有很多相互矛盾的解释,所以,首先,我想要求对主机名(不仅仅是简单的,而且是复杂的,多级名称)进行全面介绍,完全独立于DNS和互联网, 为自己的DNS关系的说明,以及错综复杂的“完全合格的域名”一词(这是一样的DNS,还是其他什么东西)。

我还想知道典型 Unix 机器上(或至少在 Debian/Ubuntu 上)上的哪些文件和命令在管理主机名方面发挥着作用,尤其是:

  • 角色和正确设置/etc/hostname(简单或复杂的名称?这是有 A 记录的东西吗?)
  • /etc/hosts设置主机名方面的角色和正确设置(它不仅仅是为了解析?什么名称和指向哪里?)
  • 任何其他文件
  • 如何在不重启的情况下对主机名应用更改?

更详细的答案比试图简化主题的答案更受欢迎,因为后一种类型有很多,这是混淆的根源。

gol*_*cks 3

根据 slm 的评论,系统主机名由内核维护在内存中,用户态软件获取它的正确方法是通过系统gethostname()调用。

默认主机名实际上被编译到(linux)内核中,因此如果您自己使用,则可以这样设置。我认为发行版内核通常使用localhost(也可以为空)。

因为大多数人可能不想仅仅为了设置主机名而编译内核,所以还有一个系统调用来设置它,sethostname(); 这由诸如 之类的命令使用hostname。通常在启动期间,init 服务将使用来自 的值来执行此操作/etc/hostname。然而,这不是强制性的。

对主机名的设置没有任何限制,但请注意,它与完全限定域名(FQDN)不同。FQDN 是主机名加上您的域名。如果您使用以下方法设置域名,您的主机名中可能不应该有任何点。

/etc/hosts 在设置主机名方面的作用和正确设置(不仅仅是为了解析?什么名称和指向哪里?)

它用于 DNS 解析,但 Patrick在这里解释了如何使用它来设置域名。这是对主机名的查找,然后使用 IP 地址进行反向查找;与仅仅设置它相比,有点迂回和混乱hostname --fqdn,但看起来更常见。

这样做并不会阻止domainname返回(none),但也许这无关紧要。