VPS提示Temporary failure in name resolution怎么办?按解析链逐层排查

先判断IP网络是否正常,再检查系统解析器、上游DNS和容器网络,避免用写死配置掩盖根因。
发布于
3

VPS执行 apt updatecurlping 域名时出现 Temporary failure in name resolution,通常表示系统没有把域名解析为IP地址。它不等于网站一定宕机,也不应该一上来就把 /etc/resolv.conf 写死。

更稳妥的做法是把解析链拆成五层:基础网络、系统解析配置、本地解析服务、上游DNS和应用或容器环境。先用只读命令确认故障在哪一层,再做最小改动。

第一步:区分“没网络”还是“只解析失败”

ip route
ping -c 3 1.1.1.1
getent hosts example.com

如果默认路由不存在,或者连已知IP都不可达,问题在基础网络、网卡、路由或云平台侧,改DNS不会解决。若IP可达而 getent hosts 失败,才继续检查域名解析链。某些环境会禁用ICMP,因此还可使用已有业务允许的TCP连接做对照,避免仅凭Ping下结论。

第二步:查看系统实际使用的解析配置

ls -l /etc/resolv.conf
cat /etc/resolv.conf

重点看它是普通文件,还是指向systemd-resolved、NetworkManager或其他管理器生成文件的符号链接。若文件里没有有效的 nameserver,或指向一个并未运行的本地地址,解析就会失败。

不要直接删除符号链接并写入公共DNS作为长期方案。这样可能暂时恢复,但会绕过系统网络管理器,导致重启、DHCP续租、VPN切换或云初始化后再次冲突。

第三步:检查systemd-resolved状态

Ubuntu等系统常由systemd-resolved管理DNS,可先查看:

systemctl status systemd-resolved --no-pager
resolvectl status
resolvectl query example.com
journalctl -u systemd-resolved --since "-30 min" --no-pager

如果服务未运行、上游DNS为空或某个网卡绑定了错误DNS,应回到实际网络管理入口修正。系统使用NetworkManager、netplan、cloud-init还是静态网络文件,决定了配置应该写在哪里。先确认所有者,再修改,避免多个组件互相覆盖。

第四步:验证上游DNS与防火墙路径

配置里出现DNS地址不代表它一定可达。检查到上游的路由,并确认本机防火墙、云安全组和网络策略没有阻断DNS流量。传统DNS常使用UDP 53,响应较大或重试时也可能使用TCP 53;只放行一种传输可能产生偶发失败。

如果仅某个上游DNS异常,可在变更窗口内切换到云厂商推荐或组织批准的备用解析器,并记录变更前后的查询结果。企业内网域名可能只能由内部DNS解析,不能直接用公共DNS替代。

第五步:宿主机正常,容器里仍失败怎么办

Docker或其他容器有自己的网络命名空间与DNS转发配置。宿主机 getent 正常而容器失败时,分别检查容器的 /etc/resolv.conf、Docker内置DNS、网络驱动和容器到上游的出站规则。

docker exec <container> cat /etc/resolv.conf
docker exec <container> getent hosts example.com
docker network inspect <network>

不要把宿主机的 127.0.0.1 直接当作容器内可用DNS;在容器里,它通常指容器自身。若使用编排平台,还要核对平台DNS服务与网络策略。

常见现象与下一步

现象 更可能的位置 下一步
IP地址也不可达 网卡、路由或云网络 检查默认路由和平台状态
所有程序都无法解析 系统解析配置或上游DNS 检查resolv.conf与解析服务
只有容器失败 容器DNS或转发链 对照宿主机和容器配置
偶发超时 上游不稳定、丢包、TCP 53受阻 记录时间并对照多个查询
只解析不了内部域名 分域DNS或企业内网路径 恢复组织指定解析器与网络

恢复后如何验收

  1. getent hosts 验证系统解析器,而不只测试单个工具。
  2. 分别查询一个已知公网域名和业务域名,确认不是缓存造成的假恢复。
  3. 若涉及容器,在宿主机和容器内各验证一次。
  4. 重启网络服务或实例前先确认远程管理通道与回滚方案,避免失联。
  5. 检查一段时间内的日志,确认没有持续超时或频繁切换上游。

结论

Temporary failure in name resolution 是解析失败信号,不是一个固定答案。先确认IP网络,再沿 /etc/resolv.conf、本地解析服务、上游DNS、防火墙和容器网络逐层排查。把修复放在真正管理网络配置的组件里,才能避免重启后故障复发。

常见问题(FAQ)

Temporary failure in name resolution是什么意思?
它表示当前解析器暂时无法把域名转换为IP地址。原因可能是基础网络中断、resolv.conf无效、本地解析服务异常、上游DNS不可达或容器DNS配置错误。
可以直接修改/etc/resolv.conf解决吗?
不建议未确认管理方式就直接写死。该文件可能由systemd-resolved、NetworkManager、netplan或cloud-init生成,手工修改可能在重启或续租后被覆盖。
为什么VPS宿主机能解析,Docker容器却不能?
容器使用独立网络命名空间和DNS转发。应对照宿主机与容器的resolv.conf、Docker内置DNS、容器网络和出站规则,注意容器里的127.0.0.1通常指容器自身。
DNS主要使用UDP 53,为什么还要检查TCP 53?
传统DNS通常先用UDP,但响应过大、截断或特定重试场景可能改用TCP。只放行UDP可能造成部分域名或偶发查询失败,因此应按实际网络策略同时核对。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600