FQDN是如何确定的?

我正在使用Ubuntu,并使用Puppetpipe理我的主机。 直到一两台机器之前,我的主机parsing为hostname.backend.example.com。 最后两台机器parsing为hostname.staging.internal。 对于这些名字是如何到达的,我感到有点困惑。

# /etc/resolv.conf nameserver 173.203.4.8 nameserver 173.203.4.9 domain backend.example.com 

 # /etc/hosts 10.182.230.38 web01.staging.internal web01 127.0.0.1 localhost localhost.localdomain 

/ bin / hostname回复如下:

 # hostname -a web01 # hostname -A 108-166-97-91.static.cloud-ips.com web01.staging.internal # hostname -I 108.166.97.91 10.182.230.38 

存在将108.166.97.91映射到web01.backend.example.com的DNSlogging。 为什么,在哪里和如何主机名拿起web01.staging.internal而不是公共DNSlogging?

hostname命令返回来自DNS和/etc/hosts

hostname等同于uname -n并且是框的实际“主机名”或“节点名”。
所有其他hostname参数使用此节点hostname查找信息。

所以在继续之前,我应该解释/etc/hosts文件格式。
第一个字段是相当明显的,它的IP地址上的所有主机名应该解决。 第二个字段是该IP的主要主机名。 剩下的字段是别名。

所以如果你运行hostname -f它将首先尝试parsing你的nodename的IP。 根据您在/etc/nsswitch.confconfiguration的hosts: entry条目的不同,这个方法会有所不同。

  • 如果您已将其configuration为使用dns,则它将使用/etc/resolv.confconfiguration的search域,直到从DNS获得IP返回。
  • 如果已将其configuration为使用文件,它将在/etc/hosts中查找以查找主要主机名或别名为当前节点名( uname -n )的行,然后返回该行中的主要主机名。

一旦拥有IP,它就会尝试对该IP进行反向查询。 再次,它将使用DNS和您的主机文件基于您的nsswitch.conf 。 在使用你的hosts文件的情况下,它将返回主条目(这是文件中的IP之后的第一个字段)。

hostname -a只能与主机文件一起工作,因为在DNS中进行反向查找只会给出1个结果。 通过主机文件,它返回匹配行中的声明(这是第一个条目之后的所有内容,主要主机名)。

例子
如果您的节点名称是'foobar',并且在/etc/hosts有一个条目,例如:

 127.0.0.1 foobar.example.com foobar localhost.localdomain localhost 

然后你会得到以下的命令结果:

 # hostname foobar # uname -n foobar # hostname -f foobar.example.com # hostname -a foobar localhost.localdomain localhost