近期有些网友想要了解CentOS7删除resolv.conf后仍被DHCP覆盖的根治的相关情况,小编通过整理给您分析,根据自身经验分享CentOS7删除resolv.conf后仍被DHCP覆盖的根治有关知识。
CentOS7删除resolv.conf后仍被DHCP覆盖的根治
昨晚刚把CentOS7删除resolv.conf后仍被DHCP覆盖这坑填平,顺手把全过程记下来,谁踩谁省三小时。别急着骂娘,先看完再动手,保准一次到位。
坑是怎么来的
很多人以为直接把/etc/resolv.conf删了,再手写一份就万事大吉,结果重启网卡或者抓个新IP,文件瞬间又被DHCP端下来的DNS冲成渣。CentOS7默认启用NetworkManager,它乖乖听DHCP的话,谁给IP就照单全收,包括DNS。删文件只是掩耳盗铃,源头的DHCP指令没断,resolv.conf永远会被覆盖。
治标三板斧(别急着用)
网上流传的chmod +i、chattr +i、把resolv.conf设成空文件,只能算临时止血。NetworkManager一旦检测到接口状态变化,依旧能绕开权限强行写入。锁文件挡不住它,根源在DHCP客户端配置。
根治第一步:让网卡别接DNS
1. 找到你正在用的网卡名,ip addr一看就明白,假设叫ens33。
2. 进目录/etc/sysconfig/network-scripts/,编辑ifcfg-ens33,尾部追加两行:
PEERDNS=no
DNS1=114.114.114.114
PEERDNS=no就是告诉DHCP:老子IP照收,DNS别塞给我。DNS1写你自己想用的地址,多写几条也行,DNS2、DNS3依次排。
根治第二步:把NM也绑住
NetworkManager自带dns插件,默认把DHCP给的DNS往resolv.conf里灌。让它闭嘴,新建文件/etc/NetworkManager/conf.d/90-dns-none.conf,内容就三行:
[main]
dns=none
保存后运行:
systemctl restart NetworkManager
这一步等于给NM戴上嚼子,它不再碰resolv.conf。
根治第三步:手写一份干净的resolv.conf
现在你可以放心写自己的/etc/resolv.conf,例如:
nameserver 223.5.5.5
nameserver 8.8.8.8
保存后加把“软锁”防手滑:
chattr +i /etc/resolv.conf
以后谁再改,先要去掉i属性,至少能挡掉脚本误操作。
多网卡环境别漏
服务器要是双网卡、多VLAN,每个ifcfg-*都得加上PEERDNS=no,别只改一个。重启网络后检查:
systemctl restart network
cat /etc/resolv.conf
只要看到的IP是你写的那几行,就宣告胜利。
云主机特别提示
阿里云、腾讯云、AWS这类控制台也能推DNS,它们靠cloud-init或者自己的agent。把控制台的“自动分配DNS”关掉,或者把cloud-init的manage_resolv_conf设为false,双保险更安心。
一句话总结
不让DHCP塞DNS,不让NM写文件,再手动锁resolv.conf,三条红线一起拉,CentOS7就再也翻不了浪。









