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
)