先确认报错中的域名
curl 提示 Could not resolve host,或应用说“无法解析主机”时,先核对拼写:把 https://、端口、路径去掉,只保留主机名。例如 https://example.com/help 对应的检查输入是 example.com。
本文用于 Linux/Ubuntu 的名称解析排查,不承诺自动修复所有 DNS 问题。脚本已在 Ubuntu 24.04 运行验证,需要 Bash、getent、timeout 和 awk。它使用你的现有系统解析方式,不替你换成公共 DNS。
1. 下载并运行域名检查脚本
下载 dns-check.sh,或者进入你准备存放文件的目录,依次执行:
curl --fail --location --output dns-check.sh https://netgoeasy.com/scripts/dns-check.sh
less dns-check.sh
bash dns-check.sh example.com
在 less 中按 q 返回。将 example.com 换成出错的主机名。下载地址固定、公开访问;无法联网下载时,可从其他设备下载后复制过来。下载网站本身也需要能解析,下载失败不等于脚本已经做过检查。
不要把完整 URL、订阅链接或密码传给它。中文域名请使用对应的 ASCII/Punycode 形式;当前脚本不接受 IP 字面量、IPv6 地址或带端口的输入。
2. 看第一项:系统能不能取得地址
脚本先运行有时间上限的 getent ahosts,成功时显示去重后的地址。这个检查走系统的名称服务路径,结果也可能来自 hosts 或缓存,不能拿它证明某台外部 DNS 服务器正常。
下面是输出样式,不是某个服务的实测结果:
系统名称解析: 成功(结果可能来自 DNS、缓存或 hosts)
地址: 192.0.2.10
若你想先验证脚本能否在本机正常运行,可用本地主机名:
bash dns-check.sh localhost
localhost 通常由本机配置解析;即使这一步成功,也不能据此认定互联网 DNS 已恢复。
3. 第二项 resolvectl 为什么可能失败?
装有 resolvectl 时,脚本还会尝试通过 systemd-resolved 查询同一个名字。没有这个命令会跳过;有命令但没有运行中的服务或系统总线,也可能返回非零。
因此,容器里显示“systemd-resolved 查询失败”,不等于宿主机 DNS 出了问题;也不表示必须安装或启动这项服务。先看第一项能不能解析,以及你的实际应用是否仍失败。
| 检查结果 | 下一步做什么 |
|---|---|
| 系统解析成功,应用仍说无法解析 | 检查应用是否运行在另一个容器、网络空间,或使用自己的解析方式;在出错的环境里重跑 |
| 只有某一个名字失败 | 再查拼写,并与一个你确认存在的普通域名对照,不要先改全局 DNS |
| 多个普通域名都无法取得地址 | 对比同网络其他设备,再检查本机 DNS 和联网状态 |
| getent 成功,resolvectl 不可用 | 保留系统解析结果,不把服务不可用当成整体断网 |
| 命令超时 | 记录目标、时段与网络,再对照重试,不用反复刷新配置文件 |
脚本的退出状态为 0 时,表示这次系统名称解析取得了地址;1 表示没取到,2 表示输入有误,3 表示缺少依赖。resolvectl 的状态单独打印,不替代第一项的结果。
4. 需要继续查时,先读取配置,不覆盖文件
在自己设备上查看当前解析文件和管理方式:
ls -l /etc/resolv.conf
cat /etc/resolv.conf
如果它是符号链接,或内容提示由其他工具生成,直接覆盖可能会被下次联网重新生成。看到本机环回地址也不一定是错误,它可能指向本地解析服务。
使用NetworkManager的桌面用户,在“设置→网络”或Wi-Fi连接详情的IPv4/IPv6页,查看DNS是否自动;若故障紧接着你自己的一次手动DNS改动出现,先按原记录恢复自动或原地址,应用设置后重新连接,再对同一域名运行脚本。没有改动记录就不要猜填地址。
服务器或容器用户先在实际报错的环境中运行上面两条只读命令。容器解析成功不代表宿主机成功,反过来也一样;将各自结果分开。如果由Netplan或组织配置管理,交由管理者修改,不能用覆盖/etc/resolv.conf代替。
系统提供 resolvectl 且服务可用时,可在自己设备上进一步查看:
resolvectl status
resolvectl query example.com
状态输出可能含内网域名和 DNS 地址,不要原样公开。本文不要求重启服务,也不要求把某个公共 DNS 地址写进系统文件;定位到配置问题后再按对应管理方式做修改,并保留恢复办法。
5. 解析成功后,继续确认连接
取得地址只是第一层。接下来用原来的应用再次访问目标;如果报错变成连接超时、证书或登录问题,按新错误继续处理,不要把它们统称为 DNS 故障。终端代理残留可看Linux 代理检查与临时直连方法。
脚本不需要 sudo,不改 hosts、resolv.conf,也不上传结果。查询会使用系统现有的解析服务,目标名称可能被该服务记录;不要输入不适合发给当前解析器的敏感名称。只想查看工具用途,可回到脚本工具栏目。
参考资料
- Linux getent 手册 · 资料日期 2026-10-22
- systemd resolvectl 手册 · 资料日期 2026-10-22