CentOS 7 DNS无法下载服务器,绝大多数情况是DNS配置被NetworkManager覆盖、/etc/resolv.conf写错或者yum源域名解析超时,按本文顺序排查,5分钟内能定位问题。
先搞清楚是“DNS解析失败”还是“下载源不可达”
很多朋友一上来就改DNS,改完还是不行,我遇到过一个情况:ping baidu.com报未知主机,但ping 114.114.114.114通,这是典型的DNS解析失败,和服务器本身没半毛钱关系,另一种情况是DNS解析正常,curl -I http://mirrors.aliyun.com能返回响应头,但yum install卡在“Could not resolve host”或者长时间无响应,这两种场景的解决路径完全不同。
判断方法很简单:先执行nslookup mirrors.aliyun.com,看能否返回IP,如果返回IP,说明DNS没问题,问题出在yum源连接上;如果返回server can't find,那就是DNS配置的事,记住这个基础判断,后面所有操作都围绕它展开。
CentOS 7 DNS无法下载服务器的3个高发原因
NetworkManager不断覆盖resolv.conf
CentOS 7的默认网络服务是NetworkManager,它有个“烦人”的习惯:每次重启网络或DHCP续租,都会用自己的配置重新生成/etc/resolv.conf,你手动写的nameserver 8.8.8.8,过几分钟就被覆盖成路由器的地址,尤其是云服务器,虚拟化平台的DHCP会把内网DNS塞进来,而那个内网DNS往往解析不了外网域名。
DNS服务器本身响应慢或不支持TCP查询
国内网络环境下,盲目使用8.8.8或1.1.1并不总是好选择,某些ISP会阻断来自国外DNS的UDP 53端口请求,导致解析超时,还有一种情况:你配的DNS服务器只支持UDP查询,但glibc解析器在多次重试后会改用TCP,而防火墙恰好拦截了TCP 53,于是ping域名永远卡在“unknown host”。
yum源使用了域名,但系统hosts文件有残留坏记录
/etc/hosts里如果写过0.0.1 mirror.centos.org这类测试条目,之后忘了删,那么所有指向该域名的软件下载请求都会发到本机,自然下载不了任何东西,这个原因比较隐蔽,因为它不影响nslookup

测出的结果,但实际使用却完全走不通。
一步步修复:从检查到重启服务
第一步:查看当前系统使用的DNS配置
先跑这个命令看看实际生效的DNS是什么:
cat /etc/resolv.conf
如果里面只有nameserver,没有search后缀,且地址不是你想要的,继续往下看,再用nmcli dev show | grep DNS看NetworkManager认为的DNS是什么,两者不一致时,问题基本锁定。
第二步:临时测试哪个DNS能用
用dig或nslookup手动指定不同DNS服务器来验证。
nslookup mirrors.aliyun.com 223.5.5.5 nslookup mirrors.aliyun.com 119.29.29.29 nslookup mirrors.aliyun.com 8.8.8.8
哪个能快速返回IP,就把哪个设为永久配置,注意观察返回延时,超过200ms的DNS即使能用也不推荐,因为yum下载时每次都会先解析域名,延迟高会让下载过程显得很“卡”。
第三步:彻底禁用NetworkManager的DNS覆盖功能
有两种做法,推荐第二种。
-
直接停用NetworkManager(但会影响你以后用
nmcli管理网络)systemctl stop NetworkManager systemctl disable NetworkManager systemctl restart network
-
修改NetworkManager配置,让它不要更新resolv.conf
vi /etc/NetworkManager/NetworkManager.conf
在
[main]段下面加一行:dns=none
然后重启NetworkManager:
systemctl restart NetworkManager
行业共识认为,对于只有静态IP的服务器,dns=none是最省心的方案,它能保留你手动写的DNS,同时不影响NetworkManager管理其他网络接口。
第四步:编辑resolv.conf并设置只读权限
不管用哪种方式,最终都要保证/etc/resolv.conf正确,推荐配置两个国内公共DNS加一个内网DNS:
vi /etc/resolv.conf
写入:
nameserver 223.5.5.5 nameserver 119.29.29.29 nameserver 10.0.0.2

注意:不要写超过3个nameserver,系统只取前三个,写完保存后,给文件加不可修改属性,防止被再次覆盖:
chattr +i /etc/resolv.conf
想恢复修改时,用chattr -i /etc/resolv.conf解除锁定,这个方法在业内被称为“锁DNS”,是解决CentOS 7 DNS配置后无法解析的常用手段。
第五步:刷新本地解析缓存并测试
CentOS 7默认没有启动systemd-resolved,但如果你安装过nscd,需要清缓存:
systemctl restart nscd
然后重新测试:
ping -c 3 mirrors.aliyun.com yum repolist
如果yum repolist能正常列出仓库,再实际下载一个软件包验证:
yum install -y lrzsz
下载速度正常,说明问题彻底解决。
特殊情况:CentOS 7绑定DNS后不能下载软件,但网页能打开
这种“半好半坏”的情况多见于服务器用代理或改了hosts,网页能打开说明浏览器走了代理或者系统代理配置有效,而yum命令不走代理,所以域名解析和连接都走原始配置,这时候检查两个地方:
/etc/yum.conf里是否有proxy=配置,如果指向一个失效的代理,yum下载必失败。/etc/hosts里是否有对应域名的错误映射,用awk '!/^#/ {print}' /etc/hosts查看非注释行,把不认识的记录全部删掉。
业内专家指出,云服务器上这类问题有较大比例源于安全软件修改了hosts文件,比如某些“加速器”会在hosts里写入一大堆CDN域名映射,一旦这些IP失效,下载就会卡住。
CentOS 7 DNS服务器搭建失败的常见误区
如果你的目标不是“用DNS下载软件”,而是自己搭建一个DNS服务器,那情况又不一样,很多人在/etc/named.conf里配好了zone,但忘记了放行防火墙端口,搭建完成后用dig @127.0.0.1 example.com测试正常,换到另一台机器用dig @你的服务器IP example.com却超时,原因是没开TCP和UDP的53端口。
检查命令:

firewall-cmd --permanent --add-port=53/tcp firewall-cmd --permanent --add-port=53/udp firewall-cmd --reload
另一个容易踩的坑:如果把DNS服务器的监听地址设成了0.0.1,外部机器永远无法使用它,正确写法是监听所有地址:
listen-on port 53 { any; };
allow-query { any; };
快速预防:让DNS配置长期稳定
- 使用
nmcli con mod "系统 eth0" ipv4.dns "223.5.5.5 119.29.29.29",这样NetworkManager重启后也会用你指定的DNS,而不是DHCP给的。 - 在
/etc/sysconfig/network-scripts/ifcfg-eth0里加上DNS1=223.5.5.5和DNS2=119.29.29.29,这是最底层的配置,任何上层工具都绕不开。 - 定期用
cat /etc/resolv.conf检查有没有被修改,配上chattr +i后基本一劳永逸。
CentOS 7 DNS无法下载服务器的Q&A
问:为什么我改了/etc/resolv.conf后,重启网络又变回原来的DNS?
答:因为NetworkManager接管了网络配置,每次重启网络都会根据ifcfg文件或DHCP重新生成resolv.conf,按本文第三步配置dns=none或者直接在ifcfg-eth0中写DNS,才能永久生效。
问:用8.8.8.8测试ping域名通,但yum下载还是报Could not resolve host,这是怎么回事?
答:yum默认使用系统配置的DNS,不一定是你手动测试的那个DNS,检查/etc/resolv.conf里实际生效的nameserver,如果还是内网地址,说明你的手动设置没有被系统采用,确认yum源配置文件/etc/yum.repos.d/.repo里的baseurl域名是否拼写正确有时候是repo文件里用了$releasever变量,而变量值引用了不存在的镜像路径。
问:chattr +i锁住了resolv.conf,会不会导致NetworkManager报错?
答:不会,NetworkManager写入文件时会直接覆盖内容,文件被锁定后写入操作失败,但NetworkManager不会因此崩溃,它会在日志中记录一条错误,不影响系统其他功能,唯一需要注意的是,你在手动编辑resolv.conf前必须先执行chattr -i解除锁定。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/750205.html

