如何在 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
文件并确保:
<machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>
那里有一条线- 没有其他带有 的行
<some IP> <hostname>
,这包括带有127.0.0.1
和::1
(IPv6) 地址的行。
请注意,除非您使用 NIS,否则(none)
是运行命令时的正确输出domainname
。
要检查您的 DNS 域名是否设置正确,请使用命令并检查vs (FQDN)dnsdomainname
的输出。hostname
hostname -f
NIS 与 DNS 域
当我第一次遇到这个问题时,我很困惑。该命令似乎domainname
早于互联网的普及。它不是 DNS 域名,而是显示或设置系统的NIS(网络信息服务)又名 YP(黄页)域名(由主 NIS 服务器提供服务的一组计算机)。该命令仅显示标准库函数返回的名称getdomainname(2)
。 (nisdomainname
和ypdomainname
是该命令的替代名称。)
显示 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 中剥离主机名部分和第一个点来确定域名部分。
配置域名
更新相关的 DNS 名称服务器
/etc/hosts
就我而言,我已经在本地 LAN 的 DNS 服务器中为我的新 CentOS 7 机器添加了一个条目,因此当我hostname
使用-d
或选项运行时在文件中找不到 FQDN 时-f
,本地 DNS 服务能够完全解析我的新主机名的 FQDN。使用
/etc/hosts
文件如果尚未配置 DNS 服务器,则可以在文件中指定完全限定域名
/etc/hosts
。最常见的方法是指定系统的主 IP 地址,后跟其 FQDN 及其短主机名。例如,172.22.0.9 nodename.domainname nodename
摘自hostname
手册页
hostname
您无法使用或更改 FQDNdnsdomainname
。
/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。