Linux下域名解析失败的根本原因是系统无法通过DNS服务器把域名转换成IP地址,排查时先确认/etc/resolv.conf和网络连通性,再用dig和nslookup逐层定位,通常能从“本地配置错误”和“上游DNS服务异常”两个方向找到突破口。
怎么判断域名解析失败是哪种类型
DNS解析失败在Linux上表现多样,先判断类型能省下大量时间,常见的现象包括:ping域名提示“Name or service not known”,curl报Could not resolve host,但通过IP访问服务正常,另一种情况是nslookup有响应,但ping依然失败。
先用三个命令做基础验证:
ping -c4 8.8.8.8:确认本机到外网的IP连通性,如果不通,DNS问题暂时放一边,先查网卡和路由。dig example.com:直接向/etc/resolv.conf里的DNS服务器发查询请求,如果status显示NOERROR,说明DNS服务器正常。cat /etc/resolv.conf:检查当前生效的nameserver指向哪里,很多人改了配置文件,却忽略了服务或网络管理工具会覆盖它。
如果IP能通、域名查询无结果,基本可以锁定是DNS链路问题,多数情况下,问题出在/etc/resolv.conf被清空、DNS服务器不可达,或者本地缓存了错误结果。
linux dns配置错误排查:从resolv.conf开始
/etc/resolv.conf是Linux域名解析的核心配置,它指定了nameserver地址和搜索域,排查配置错误时,按以下顺序操作。
- 查看当前配置内容:
cat /etc/resolv.conf,至少应包含一行nameserver 你的DNS地址。 - 确认文件权限:
ls -l /etc/resolv.conf,正常应为-rw-r--r--,但用NetworkManager或systemd-resolved的环境下,它可能是指向动态生成文件的软链接。 - 检查配置是否被覆盖:Ubuntu 18.04以上用systemd-resolved管理DNS,直接改resolv.conf重启后会被重置;CentOS 7上NetworkManager也容易覆盖手动改动。
- 测试DNS服务器连通性:
ping 223.5.5.5或nc -uvz 223.5.5.5 53,能ping通不代表UDP 53端口一定开放,需要专门测端口。
如果resolv.conf里nameserver为空或写错,系统会退回

0.0.53这类本地回环地址,这时需要看systemd-resolved的状态:systemd-resolve --status(较新版本用resolvectl status)。
centos 7域名解析超时解决思路
CentOS 7是个常见场景,它的网络配置由NetworkManager接管,手动改resolv.conf经常在重启后失效。CentOS 7域名解析超时通常和DNS服务器响应慢或配置被重置有关。
建议先检查当前生效的DNS:nmcli dev show eth0,看IP4.DNS字段,如果显示的不是想要的值,用以下方式修改:
nmcli con mod "System eth0" ipv4.dns "223.5.5.5 114.114.114.114" nmcli con up "System eth0"
如果只想临时测试,直接改resolv.conf加nameserver,然后用nslookup验证,若解析超时,但换成8.8.8立刻恢复,说明原DNS服务器不可用或防火墙拦截了UDP 53出口。
另一个常见坑是/etc/nsswitch.conf里的hosts行配置,如果hosts: files dns顺序被改成dns files,系统会先查DNS再查本地hosts文件,导致本地条目失效,表现也是“超时”。
ubuntu系统域名解析失败原因与本地修复
Ubuntu是另一个重灾区,因为新版Ubuntu使用systemd-resolved,默认监听0.0.53这个回环地址。Ubuntu系统域名解析失败原因中,最常见的是resolv.conf软链接指向丢失或systemd-resolved缓存污染。
查看ls -l /etc/resolv.conf,如果它显示为broken symlink,解析必然失败,修复方式:
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
如果指向的不是预期文件,也可以直接用resolvconf机制管理,这里有个区别:/run/systemd/resolve/resolv.conf包含完整DNS服务器列表,而stub-resolv.conf只指向0.0.53,前者更适合需要多条nameserver的场景。
Ubuntu下还有个容易忽略的问题:/etc/hosts文件里的条目和DNS冲突,检查hosts里有没有历史遗留的IP映射,比如把localhost或主机名映射到错误IP,会导致解析行为怪异。
用dig和nslookup定位上游还是本地问题
dig和nslookup是排查linux dns配置错误的两个基础工具

,很多发行版默认不安装,需要先补上:apt install dnsutils。
执行dig @223.5.5.5 example.com,如果这条命令能返回A记录,而dig example.com走默认DNS超时,说明问题出在默认nameserver或systemd-resolved转发环节,继续执行dig +trace example.com,可以看到从根服务器到权威服务器的完整路径,快速判断是哪一层丢包。
nslookup更直观:
nslookup example.com nslookup example.com 8.8.8.8
第一条用默认DNS,第二条指定上游DNS,对比结果:第一条超时、第二条正常,就是本地DNS配置的问题;两条都超时,就是网络或出口防火墙的问题。
进程和防火墙导致的解析异常
DNS查询走UDP 53端口,某些环境里防火墙规则只放行TCP 53,导致解析异常,排查这类问题时,先检查本机防火墙:
iptables -L -n | grep 53firewall-cmd --list-all(CentOS 7及以上)ufw status(Ubuntu)
如果服务器位于云环境,安全组规则比iptables优先级更高,出方向规则限制了UDP 53时,域名解析表现为“偶尔成功、经常失败”,因为UDP丢包不会主动报错。
另一个隐藏因素是nscd服务,它负责缓存DNS查询结果,如果缓存了错误记录,即使上游DNS已恢复,本机依然解析失败,排查时执行sudo nscd -i hosts清除缓存,再重新解析,如果服务器上运行了dnsmasq或unbound,还要检查它们的监听地址和上游配置。
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 所有域名解析超时 | 防火墙拦UDP 53 | 检查iptables/安全组 |
| 部分域名解析失败 | 上游DNS污染或过滤 | 换公共DNS测试 |
| 重启后配置丢失 | NetworkManager覆盖 | 用nmcli或ifcfg文件持久化配置 |
| 本地有响应但应用报错 | hosts文件错误映射 | 检查/etc/hosts |
简米云服务器域名解析不了怎么办
简米云服务器域名解析不了,很多情况下是/etc/resolv.conf里的DNS被重置为内网地址,而该地址在VPC外不可用

,简米云ECS默认使用100.100.2.136和100.100.2.138这两个内网DNS,它们只在对应VPC内生效。
如果ECS迁移过VPC或自定义了网络配置,resolv.conf里可能残留旧的内网DNS地址,检查方式:
cat /etc/resolv.conf # 如果nameserver是10.x.x.x或172.x.x.x,确认是否属于当前VPC网段
简米云控制台的安全组规则也需要检查,出方向和入方向都必须放行UDP 53,否则ECS无法访问DNS服务器,常规配置是入方向放行TCP 22/443等,出方向全部放行,但有些高安全策略会把出方向设置为白名单,这时就需要显式添加UDP 53。
如果想改用公共DNS,简米云服务器上直接改resolv.conf通常就能生效,但要在重启后保持,建议同时修改/etc/sysconfig/network-scripts/ifcfg-eth0里的DNS1/DNS2字段,或使用nmcli con mod持久化。
域名解析失败怎么办:高频问答
为什么我改了resolv.conf,重启后又被还原?
因为/etc/resolv.conf被NetworkManager或systemd-resolved接管,CentOS 7使用nmcli con mod修改连接配置;Ubuntu 18.04以上使用netplan配置DNS,修改/etc/netplan/.yaml中的nameserver字段,然后执行sudo netplan apply生效。
IP能通,域名不通,但dig返回正常,可能是什么原因?
dig返回正常说明DNS查询链路没问题,此时重点看本地解析器,检查/etc/nsswitch.conf的hosts行,确认files是否在dns前面,同时查看/etc/hosts里有没有被错误的IP占位,另一个可能是ping命令本身走了IPv6而DNS只返回IPv4,可以尝试ping -4 example.com对比结果。
CentOS 7使用内置DNS解析超时,换8.8.8.8立刻恢复,怎么彻底解决?
CentOS 7内置DNS通常指向云服务商提供的地址,解析超时说明该地址在当前网络路径不可达或响应过慢,如果确认是本机到该DNS的UDP 53被阻断,可以编辑/etc/resolv.conf添加多个nameserver,例如nameserver 223.5.5.5和nameserver 119.29.29.29,并用chattr +i /etc/resolv.conf锁定文件防止其他进程改写,长期方案是用nmcli con mod写入连接配置,这样即使重启也不会丢失。