Centos

如何在 CentOS 7.0 上設置完全限定的主機名?

  • August 23, 2021

如何在 CentOS 7.0 上設置完全限定的主機名?

我在網上看過一些文章,例如使用:

$ sudo hostnamectl set-hostname nodename.domainname

但是,執行 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

要設置主機名 ,請使用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 的普及。它不是 DNS 域名,而是顯示或設置系統的NIS(網路資訊服務)又名 YP(黃頁)域名(一組由主 NIS 伺服器提供服務的電腦)。此命令僅顯示getdomainname(2)標準庫函式返回的名稱。(nisdomainname並且ypdomainname是此命令的替代名稱。)

顯示 FQDN 或 DNS 域名

要檢查DNS (Internet) 域名,您應該執行dnsdomainname命令或hostname使用-d, --domain選項。(請注意,該dnsdomainname命令不能用於設置 DNS 域名 - 它僅用於顯示它。)

要顯示系統的FQDN(Fully Qualified Domain Name),請hostname使用-f, --fqdn, --long選項執行(同樣,此命令不能用於設置域名部分)。

上述命令使用系統的解析器(由gethostbyname(3)標準庫中的函式實現,由 POSIX 指定)來確定 DNS 域名和 FQDN。

名稱解析

在現代作業系統(例如 RHEL 7)中,hosts條目 in/etc/nsswitch.conf用於解析主機名。在您的 CentOS 7 機器中,此行配置為(CentOS 7 的預設設置):

hosts:      files dns

這意味著當解析器函式查找主機名或 IP 地址時,它們首先檢查文件中的條目/etc/hosts 然後嘗試./etc/resolv.conf

在執行hostname -f以獲取主機的 FQDN 時,解析器函式會嘗試獲取系統主機名的 FQDN。如果主機未在/etc/hosts文件中或相關 DNS 伺服器中列出,則嘗試失敗並hostname報告Name or service not known.

hostname -d執行獲取域名時,進行相同的操作,通過從FQDN中剝離主機名部分和第一個點來確定域名部分。

配置域名

  1. 更新相關的 DNS 名稱伺服器

就我而言,我已經在本地 LAN 的 DNS 伺服器中為我的新 CentOS 7 機器添加了一個條目,因此當我使用or選項/etc/hosts執行時在文件中找不到 FQDN時,本地 DNS 服務能夠完全解析我的新主機名的 FQDN。hostname``-d``-f 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內容如下:

127.0.1.1    ursula.example.com ursula

從技術上講:FQDN 是 getaddrinfo(3) 為 gethostname(2) 返回的主機名返回的名稱。DNS 域名是第一個點之後的部分。

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

引用自:https://unix.stackexchange.com/questions/239920