CentOS7 hostnamectl set-hostname 與 /etc/resolv.conf 混淆

CentOS7 hostnamectl set-hostname 與 /etc/resolv.conf 混淆

CentOS7。網路一切正常。

# cat /etc/resolv.conf 
nameserver 192.168.1.1

然後我決定更改主機名稱。

# hostnamectl set-hostname host.domain
# reboot
# cat /etc/resolv.conf 
# Generated by NetworkManager
search domain


# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
#
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com

為什麼會hostnamectl set-hostname弄亂我的/etc/resolv.conf

答案1

只要重申一下,作為官方答案,MikeA 在問題評論中所說的話:

它不一定是 dhcpclient,但可能是 NetworkManager。如果您在同一個檔案中指定 DNS1、DNS2 和 DOMAIN,它應該會為您建立正確的 /etc/resolv/conf。

如果此檔案中沒有 DNS1、DNS2 和 DOMAIN,則需要手動將正確的行新增至 /etc/resolv.conf(即搜尋和名稱伺服器) - MikeA

我遵循了他的評論並取得了成功(更多詳細資訊請參閱下文)。

NetworkManager(CentOS 7 - 目前方式)

  1. 將以下行新增至/etc/sysconfig/network-scripts/ifcfg-<inf> DNS1=8.8.8.8 DNS2=8.8.4.4 DOMAIN=mydomain.com
  2. 重啟


「靜態」resolv.conf(舊方法)

  1. PEERDNS=no/etc/sysconfig/network-scripts/ifcfg-<inf>
  2. 手動添加正確的行/etc/resolv.conf(即搜尋、名稱伺服器)(這本質上是



更多資訊和細節


我由於網路錯誤而提出這個問題。

伺服器是運行在KVM環境下的CentOS 7虛擬機器。

作業系統是透過 SolusVM 控制面板範本安裝的。

安裝 CentOS 7 後,我採用了兩種方法之一來更改主機名,但我不記得是哪一種:

  • hostname myserver.mydomain.com;或者
  • 使用 SolusVM 控制面板的主機名稱選項卡

我相當確定,我只做了後者,因為我有一個 init GIT 提交,它顯示hostnameresolv.conf使用舊主機名,但hosts有一個帶有靜態 IP 和新主機名/域的條目。請參閱下文以了解差異。

似乎由於某種原因,這項變更並未持續存在,當虛擬機器透過 SolusVM(或 KVM 管理器)掛起並導致重新啟動時,主機名稱會恢復為原始名稱systemd

然後我發現在 CentOS 7 中主機名稱應該使用hostnamectl set-hostname myserver.mydomain.com. [1]

執行此操作並重新啟動後,我發現我沒有 DNS 解析,例如nslookup google.comping google.com導致 DNS/無解析錯誤。

似乎透過 SolusVM CentOS 7 安裝範本設定的任何 DNS 配置都被 NetworkManager 刪除了,儘管我不能確定是誰/什麼導致了這些更改,但從 GIT 中可以清楚地看出所做的更改到/etc/hostname/etc/resolv.conf/etc/machine-info在運行hostnamectl ...命令之後立即(再次參見下面的差異)。

以下是我為任何處於類似情況的人執行的具體步驟,用於故障排除或作為一個明確的示例:

目標:更新主機名稱.網域名稱 (fqdn)

(明確:myOLDhostname.myOLDdomain.com -> myNEWhostname.myNEWdomain.com)

  1. 初始狀態:

    • hostname:myOLDhostname.myOLDdomain.com
    • resolv.conf:
      # Generated by NetworkManager search myOLDdomain.com nameserver 8.8.8.8 nameserver 8.8.4.4
    • machine-info:(/dev/null即不存在)
  2. 運行命令hostnamectl set-hostname myNEWhostname.myNEWdomain

  3. 重啟。重新啟動後,我重新 ssh 回到虛擬機器。
  4. nslookup google.com, ping google.com, 得到以下錯誤:ping: unknown host google.com
  5. cat /etc/resolv.conf現在顯示:
    # Generated by NetworkManager
    search myNEWdomain.com


    # No nameservers found; try putting DNS servers into your
    # ifcfg files in /etc/sysconfig/network-scripts like so:
    # DNS1=xxx.xxx.xxx.xxx
    # DNS2=xxx.xxx.xxx.xxx
    # DOMAIN=lab.foo.com bar.foo.com
  6. 搜索後,我發現/etc/sysconfig/network-scripts/ifcfg-eth0沒有DNS1DNS1、 和DOMAIN條目,這nameserver導致/etc/resolv.conf.
  7. 我透過以下方式附加以下內容sudoedit /etc/sysconfig/network-scripts/ifcfg-eth0
    DNS1=8.8.8.8
    DNS2=8.8.4.4
    DOMAIN=myNEWdomain.com
  8. 我再次運行命令hostnamectl set-hostname myNEWhostname.myNEWdomain
  9. 但我還是沒有DNS,nslookup還是ping失敗。
  10. 我嘗試按照建議重新啟動 NetworkManagersystemctl restart NetworkManager.service
  11. 仍然沒有 DNS,所以我運行命令reboot
  12. 重新啟動後,我再次透過 ssh 登錄,一切正常。ping並且nslookp都成功了。
  13. 現在,我檢查cat /etc/resolv.conf並查看包含的nameserver條目:
    # Generated by NetworkManager
    search myNEWdomain.com
    nameserver 8.8.4.4
    nameserver 8.8.8.8

對於 GIT,我使用etckeeper(本質上管理 中的 GIT 儲存庫),它顯示了初始配置,並且明確地,在運行命令之前/etc,網路相關文件沒有其他更改。/etc/{hostname,resolv.conf,hosts}hostnamectl

答案2

您可以透過在主要部分中resolv.conf添加片段來告訴 Networkmanager 不要更改:nodns/etc/NetworkManager/conf.d/nodns.conf

[main]
dns=none

(別忘了systemctl restart NetworkManager

相關內容