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