如何在CentOS 7.0上设置标准主机名?


19

如何在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

Answers:


30

要设置主机名, 使用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域名设置是否正确,请使用dnsdomainname命令并检查hostnamevs hostname -f(FQDN)的输出。


NIS与DNS域

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

显示FQDN或DNS域名

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

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

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

名称解析

在现代操作系统(例如RHEL 7)中,该hosts条目/etc/nsswitch.conf用于解析主机名。在您的CentOS 7机器上,此行配置为(CentOS 7的默认设置):

hosts:      files dns

这意味着,当解析程序功能查找主机名或IP地址时,它们首先检查/etc/hosts 文件中的条目,然后再尝试在其中列出的DNS服务器/etc/resolv.conf

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

什么时候 hostname -d运行以获得域名,相同的操作被执行,并且域名部分是由汽提的主机名部分和从FQDN第一点来确定。

配置域名

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

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

2.使用/etc/hosts文件

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

172.22.0.9  nodename.domainname nodename

hostname手册页摘录

您无法使用hostname或更改FQDN dnsdomainname

推荐的设置FQDN的方法是使主机名成为使用/etc/hosts,DNS或NIS的标准名称的别名。例如,如果主机名是“ ursula”,则可能在一行中/etc/hosts显示以下内容:

27.0.1.1    ursula.example.com ursula

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

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


感谢您的回答。我已经更新了问题-不幸的是,该hostname -f命令在我的CentOS虚拟机上不起作用。
克里斯·斯诺

@SHC您可以编辑您的问题以同时包含的内容/etc/hostname和输出grep ^hosts: /etc/nsswitch.conf吗?我不知道很多关于网络管理器,但我也注意到,我/etc/NetworkManager/NetworkManager.conf包含在其行[keyfile]部分:hostname=<nodename>
安东尼·G-莫妮卡的大法官,2015年

1
@SHC我一直在研究这个问题,并从根本上修改了我的答案;现在,它应该更全面地解决您的问题。
Anthony G-Monica的正义

这个答案的观点与身体不一致。 hostnamectl set-hostname nodename.domainname没有设置DNS域名(这不是它设置NIS域名其一)。
sourcejedi '16

@sourcejedi我目前没有时间,但是如果有机会,我会尽力澄清我的答案。
安东尼G-莫妮卡的大法官,

1

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


0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.