
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 - 目前方式)
- 將以下行新增至
/etc/sysconfig/network-scripts/ifcfg-<inf>
:DNS1=8.8.8.8 DNS2=8.8.4.4 DOMAIN=mydomain.com
- 重啟
「靜態」resolv.conf(舊方法)
PEERDNS=no
在/etc/sysconfig/network-scripts/ifcfg-<inf>
- 手動添加正確的行
/etc/resolv.conf
(即搜尋、名稱伺服器)(這本質上是
更多資訊和細節
我由於網路錯誤而提出這個問題。
伺服器是運行在KVM環境下的CentOS 7虛擬機器。
作業系統是透過 SolusVM 控制面板範本安裝的。
安裝 CentOS 7 後,我採用了兩種方法之一來更改主機名,但我不記得是哪一種:
hostname myserver.mydomain.com
;或者- 使用 SolusVM 控制面板的主機名稱選項卡
我相當確定,我只做了後者,因為我有一個 init GIT 提交,它顯示hostname
並resolv.conf
使用舊主機名,但hosts
有一個帶有靜態 IP 和新主機名/域的條目。請參閱下文以了解差異。
似乎由於某種原因,這項變更並未持續存在,當虛擬機器透過 SolusVM(或 KVM 管理器)掛起並導致重新啟動時,主機名稱會恢復為原始名稱systemd
。
然後我發現在 CentOS 7 中主機名稱應該使用hostnamectl set-hostname myserver.mydomain.com
. [1]
執行此操作並重新啟動後,我發現我沒有 DNS 解析,例如nslookup google.com
,ping 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)
初始狀態:
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
即不存在)
運行命令
hostnamectl set-hostname myNEWhostname.myNEWdomain
- 重啟。重新啟動後,我重新 ssh 回到虛擬機器。
- 試
nslookup google.com
,ping google.com
, 得到以下錯誤:ping: unknown host google.com
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
- 搜索後,我發現
/etc/sysconfig/network-scripts/ifcfg-eth0
沒有DNS1
、DNS1
、 和DOMAIN
條目,這nameserver
導致/etc/resolv.conf
. - 我透過以下方式附加以下內容
sudoedit /etc/sysconfig/network-scripts/ifcfg-eth0
:
DNS1=8.8.8.8
DNS2=8.8.4.4
DOMAIN=myNEWdomain.com
- 我再次運行命令
hostnamectl set-hostname myNEWhostname.myNEWdomain
- 但我還是沒有DNS,
nslookup
還是ping
失敗。 - 我嘗試按照建議重新啟動 NetworkManager
systemctl restart NetworkManager.service
- 仍然沒有 DNS,所以我運行命令
reboot
- 重新啟動後,我再次透過 ssh 登錄,一切正常。
ping
並且nslookp
都成功了。 - 現在,我檢查
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
)