CentOS配置DNS重启失败:原因分析与解决方案
问题现象
在CentOS系统中修改DNS配置后,执行 systemctl restart network
或 nmcli connection reload
命令时出现错误提示,例如:
Failed to restart network.service: Unit network.service not found
或DNS配置在重启后自动恢复为默认值,导致网络解析异常。
常见原因
1. NetworkManager与传统network服务冲突
CentOS 7/8默认使用NetworkManager管理网络。手动修改/etc/resolv.conf
会被NetworkManager覆盖。
2. systemd-resolved服务干扰
启用systemd-resolved时,DNS请求会被重定向到127.0.0.53,导致自定义配置失效。
3. 配置文件权限错误
/etc/sysconfig/network-scripts/ifcfg-ethX
文件权限异常(如属主非root)导致读取失败。
4. 语法错误
DNS配置文件中存在格式错误,如缺少引号、拼写错误:
DNS1=8.8.8.8, DNS2=8.8.4.4 # 错误:逗号应改为分号
解决方案
方法一:通过NetworkManager配置(推荐)
- 编辑网卡配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-ens192
- 增加参数:
DNS1="8.8.8.8" DNS2="1.1.1.1" PEERDNS="no" # 禁止自动修改resolv.conf
- 应用配置:
nmcli connection reload nmcli connection up ens192
方法二:禁用systemd-resolved
systemctl stop systemd-resolved
systemctl disable systemd-resolved
rm /etc/resolv.conf # 删除符号链接
echo "nameserver 8.8.8.8" > /etc/resolv.conf
方法三:使用chattr锁定配置文件
chattr +i /etc/resolv.conf # 禁止任何修改
chattr -i /etc/resolv.conf # 需要修改时解除锁定
验证与测试
# 检查DNS配置
cat /etc/resolv.conf
# 测试解析
nslookup example.com
# 查看NetworkManager状态
nmcli device show ens192 | grep DNS
预防措施
- 优先使用
nmcli
或nmtui
工具配置网络 - 检查
/etc/NetworkManager/NetworkManager.conf
中[main]
部分是否包含dns=none
(避免冲突) - 定期备份网络配置文件:
cp /etc/sysconfig/network-scripts/ifcfg* ~/backup/