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

相關內容