如何在 CentOS 7.0 上设置完全限定主机名?

如何在 CentOS 7.0 上设置完全限定主机名?

如何在 CentOS 7.0 上设置完全限定主机名?

我在网上看到了一些帖子,例如使用:

$ sudo hostnamectl set-hostname nodename.domainname

但是,运行域名不会返回任何内容:

$ domainname
(none)

还:

$ hostname
nodename.domainname

然而,

$ hostname -f
hostname: Name or service not known
$ hostname -d
hostname: Name or service not known

一些调试输出:

$ cat /etc/hostname
nodename.domainname

$ grep ^hosts /etc/nsswitch.conf
hosts:      files dns

答案1

要设置主机名 使用hostnamectl,但只能与主机名一起使用,如下所示:

hostnamectl set-hostname nodename

要设置(DNS) 域名编辑/etc/hosts文件并确保:

  1. <machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>那里有一条线
  2. 没有其他带有 的行<some IP> <hostname>,这包括带有127.0.0.1::1(IPv6) 地址的行。

请注意,除非您使用 NIS,否则(none)是运行命令时的正确输出domainname

要检查您的 DNS 域名是否设置正确,请使用命令并检查vs (FQDN)dnsdomainname的输出。hostnamehostname -f

NIS 与 DNS 域

当我第一次遇到这个问题时,我很困惑。该命令似乎domainname早于互联网的普及。它不是 DNS 域名,而是显示或设置系统的NIS(网络信息服务)又名 YP(黄页)域名(由主 NIS 服务器提供服务的一组计算机)。该命令仅显示标准库函数返回的名称getdomainname(2)。 (nisdomainnameypdomainname是该命令的替代名称。)

显示 FQDN 或 DNS 域名

要检查域名系统(互联网)域名,您应该运行dnsdomainname命令或hostname使用-d, --domain选项。 (请注意,该dnsdomainname命令不能用于设置 DNS 域名 - 它仅用于显示它。)

要显示FQDN(完全合格域名)系统的,使用hostname选项运行-f, --fqdn, --long(同样,该命令不能用于设置域名部分)。

上述命令使用系统的解析器(由gethostbyname(3)标准库中的函数实现,由 POSIX 指定)来确定 DNS 域名和 FQDN。

名称解析

在现代操作系统(例如 RHEL 7)中,inhosts用于/etc/nsswitch.conf解析主机名。在 CentOS 7 计算机中,此行配置为(CentOS 7 的默认设置):

hosts:      files dns

这意味着当解析器函数查找主机名或 IP 地址时,它们首先检查/etc/hosts 文件接下来尝试DNS 服务器哪些列在/etc/resolv.conf.

当运行hostname -f以获取主机的 FQDN 时,解析器函数会尝试获取系统主机名的 FQDN。如果该主机未在文件中或相关 DNS 服务器中列出/etc/hosts,则尝试失败并hostname报告Name or service not known

运行获取域名时hostname -d,执行相同的操作,通过从 FQDN 中剥离主机名部分和第一个点来确定域名部分。

配置域名

  1. 更新相关的 DNS 名称服务器

    /etc/hosts就我而言,我已经在本地 LAN 的 DNS 服务器中为我的新 CentOS 7 机器添加了一个条目,因此当我hostname使用-d或选项运行时在文件中找不到 FQDN 时-f,本地 DNS 服务能够完全解析我的新主机名的 FQDN。

  2. 使用/etc/hosts文件

    如果尚未配置 DNS 服务器,则可以在文件中指定完全限定域名/etc/hosts。最常见的方法是指定系统的主 IP 地址,后跟其 FQDN 及其短主机名。例如,

     172.22.0.9  nodename.domainname nodename
    

摘自hostname手册页

hostname您无法使用或更改 FQDN dnsdomainname

/etc/hosts,设置 FQDN 的建议方法是使用DNS 或 NIS将主机名设为完全限定名称的别名。例如,如果主机名是“ursula”,则可能有一行内容如下/etc/hosts

127.0.1.1    ursula.example.com ursula

从技术上讲:FQDN 是 getaddrinfo(3) 针对 gethostname(2) 返回的主机名返回的名称。 DNS 域名是第一个点之后的部分。

因此,这取决于解析器的配置(通常在 中 /etc/host.conf)如何更改它。通常,hosts 文件在 DNS 或 NIS 之前解析,因此最常见的是更改 /etc/hosts.

答案2

在 Centos7 上,使用 nmtui 设置主机名并提供 nodename.domainname / FQDN 格式给出一致的结果。主机名 [d/f/s] 都提供正确的预期结果。它不存储在 /etc/resolv.conf 或 /etc/hosts 中。但 FQDN 作为单行条目写入 /etc/hostname。

答案3

对我来说,/etc/hostname 文件包含 FQDN 而不是主机名(例如,主机名而不是 hostname.example.com)。一旦我从 /etc/hostname 中的主机名中删除了域,“hostname -f”命令就可以正常工作。

我认为这是在我安装 CentOS 7 VM 时引入的。我应该只输入主机名,而不是完全限定的域名。

答案4

与 OP (RHEL7) 类似的问题,并通过从文件中列出的短主机名中删除尾随空格来解决它/etc/hostname。其次是systemctl restart systemd-hostnamed。现在使用hostname -f命令显示 FQDN。

相关内容