真正稳定生效的方式是写进网卡配置文件:在/etc/sysconfig/network-scripts/ifcfg-ens33中添加DNS1/DNS2,重启network服务,并禁用NetworkManager的DNS接管(dns=none),否则会覆写resolv.conf。

直接改 /etc/resolv.conf 看似最快,但大概率重启网络或重启后失效——因为 NetworkManager 或 network 服务会覆盖它。真正稳定生效的方式是写进网卡配置文件。
改网卡配置文件(推荐,持久生效)
CentOS 7 默认用 network 服务管理传统网卡(如 ens33),DNS 配置应写入对应接口的 ifcfg 文件:
- 查网卡名:
ip -br a或ls /sys/class/net/,常见为ens33、eth0 - 编辑配置:
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33 - 在文件末尾追加(支持多个,空格分隔):
DNS1=114.114.114.114DNS2=8.8.8.8 - 重启网络:
sudo systemctl restart network - 验证:
cat /etc/resolv.conf应已同步更新,且nslookup google.com可通
禁用 NetworkManager 覆盖(如果启用了 NM)
若系统同时运行 NetworkManager(常见于桌面版或最小化安装后手动启用),它默认会接管 DNS 并覆写 /etc/resolv.conf:
- 确认状态:
systemctl is-active NetworkManager - 临时禁止接管:在
/etc/NetworkManager/NetworkManager.conf的[main]段下加一行:dns=none - 重启 NM:
sudo systemctl restart NetworkManager - 此时再改 ifcfg 文件或手动改
/etc/resolv.conf才不会被覆盖
直接改 /etc/resolv.conf(仅临时调试)
该文件由 resolver 库直接读取,修改后立即生效,但风险明确:
- 执行:
echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf - 立刻生效,
dig @1.1.1.1 github.com可验证 - 但只要执行
systemctl restart network或dhclient -r && dhclient,内容就会被还原 - 注意:不要删掉原有
search或domain行,否则本地主机名解析可能失败
最易被忽略的是 NetworkManager 和 network 服务共存时的冲突——不检查谁在管 DNS,只改 resolv.conf 就像往漏水的桶里灌水。


















