在网络使用中,“DNS解析失败”是最常见的问题之一。无论是服务器、网站还是本地电脑,一旦 DNS 出问题,就会表现为:无法访问域名、网页打不开、应用报错等。
本文将系统讲解 DNS 的工作原理、常见失败原因以及完整解决方案。
一、DNS是什么?
DNS(Domain Name System)是互联网的“电话簿”。
它的作用是:
把域名(如 google.com)转换成 IP 地址(如 142.250.x.x)
二、DNS解析失败的表现
常见现象包括:
- 网页无法打开
- 提示 “DNS_PROBE_FINISHED_NXDOMAIN”
- “无法解析域名”
- curl / ping 域名失败
- SSH / API 无法连接域名
三、DNS解析流程(理解原理)
用户输入域名
↓
本地DNS缓存
↓
系统DNS服务器
↓
递归解析(运营商 / 公共DNS)
↓
返回IP地址
↓
访问目标服务器
四、DNS解析失败的主要原因
1️⃣ 本地DNS缓存问题
现象
- 刚改过域名解析但无法访问
解决方法
清除缓存:
Windows:
ipconfig /flushdns
Linux(systemd):
sudo systemd-resolve --flush-caches
macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
2️⃣ DNS服务器不可用
当前使用的 DNS 服务器失效或不可达。
解决方法:更换公共 DNS
推荐:
| 服务商 | DNS |
|---|---|
| 8.8.8.8 / 8.8.4.4 | |
| Cloudflare | 1.1.1.1 |
| 阿里DNS | 223.5.5.5 |
Linux修改DNS:
sudo nano /etc/resolv.conf
添加:
nameserver 8.8.8.8
nameserver 1.1.1.1
3️⃣ 网络连接异常
现象
- 能连IP,不能连域名
排查:
ping 8.8.8.8
ping google.com
如果 IP 通,域名不通 → DNS问题
4️⃣ 防火墙或安全组拦截
DNS 使用 UDP 53 端口。
检查端口:
sudo ufw status
放行 DNS:
sudo ufw allow 53
5️⃣ DNS配置错误
常见错误:
- 手动写错 DNS
- resolv.conf 被覆盖
- DHCP配置异常
6️⃣ 域名本身未解析
例如:
- A记录未配置
- DNS记录未生效
- TTL未更新
7️⃣ 运营商DNS污染
部分网络环境可能导致:
- DNS劫持
- 解析错误IP
解决:
- 使用 1.1.1.1 或 8.8.8.8
- 使用 DoH / DoT
8️⃣ Docker / 容器内DNS问题
在 Docker 中常见:
容器无法解析域名。
解决方法:
docker run --dns 8.8.8.8 nginx
或修改 Docker daemon:
{
"dns": ["8.8.8.8", "1.1.1.1"]
}
五、DNS排查命令大全
1️⃣ 测试解析
nslookup google.com
2️⃣ 查看解析路径
dig google.com
3️⃣ 测试连通性
curl -v https://google.com
4️⃣ 查看当前DNS
cat /etc/resolv.conf
六、快速排查流程(非常重要)
遇到 DNS 问题按这个顺序:
Step 1:检查网络
ping 8.8.8.8
Step 2:检查域名
ping google.com
Step 3:检查 DNS
cat /etc/resolv.conf
Step 4:切换 DNS
改为:
- 1.1.1.1
- 8.8.8.8
Step 5:清缓存
sudo systemd-resolve --flush-caches
七、生产环境最佳实践
✔ 使用稳定DNS
推荐:
- Cloudflare(1.1.1.1)
- Google(8.8.8.8)
✔ 配置双DNS
nameserver 1.1.1.1
nameserver 8.8.8.8
✔ 使用监控
定期检测:
- DNS延迟
- 解析失败率
✔ 容器统一DNS配置(Docker)
Docker Compose 推荐配置:
dns:
- 8.8.8.8
- 1.1.1.1
八、总结
DNS 解析失败的本质通常是:
解析链路中某一环失败(本地 / 网络 / 服务器 / DNS服务)
核心解决思路:
- 检查网络连通性
- 更换 DNS
- 清理缓存
- 检查域名解析记录
- 排查防火墙与容器配置