
一、怎么判断是DNS问题
很多人一遇到"网站打不开"就以为是网络断了,其实有个很干净的判断方法:ping IP通,但ping域名不通。比如你能 ping 8.8.8.8 通、却 ping www.baidu.com 不通,这就是典型的DNS(域名系统)解析失败——网络本身是通的,只是服务器把域名翻译成IP这一步卡住了。
域名解析,就是计算机一问"这个网址对应哪个IP",由DNS服务器回答。回答不出来、回答慢、回答错,就表现为域名解析失败。
二、四类常见根因
服务器DNS解析失败通常逃不出以下四类,先对着症状归类:
| 根因 | 典型表现 | 常见场景 |
|---|---|---|
| DNS服务器不可达 | nslookup 直接超时/报错 | 写的DNS地址不可用、防火墙拦53 |
| DNS配置错误 | 改了配置后突然全域名失败 | /etc/resolv.conf被覆盖、用了内网断掉的DNS |
| 解析缓存污染/过期 | 部分域名通、部分不通 | 本地cache或上层DNS缓存了错误结果 |
| 系统hosts被篡改 | 固定域名解析到错误IP | /etc/hosts、C:WindowsSystem32driversetchosts被改 |
三、先跑三条命令定位
不管Linux还是Windows,先用这三条命令把问题钉死:
nslookup 域名:看DNS能否正确解析。正常会返回IP;报"Non-existent domain"是域名本身问题,"connection timed out"是DNS服务器连不上。nslookup 域名 DNS服务器IP:指定一个公共DNS(如223.5.5.5阿里、114.114.114.114)再解析。如果换DNS就通了,说明是你的DNS服务器配置有问题,不是网络故障。cat /etc/resolv.conf(Linux)/ipconfig /all(Windows):查看当前实际使用的DNS地址是否合理。
四、Linux下修改DNS与清缓存
在Linux服务器上,重点看两处——DHCP会覆盖你手改的DNS:
- 临时生效:编辑
/etc/resolv.conf,写入nameserver 223.5.5.5(可多行),一行一个DNS。 - 永久生效:改了也会被网卡配置覆盖,需在系统本身的服务(systemd-resolved 或 NetworkManager)里设置,或把网卡配置改成"不覆写resolv.conf"。
- 清缓存:systemd 系用
resolvectl flush-caches;没开systemd-resolved的通常无本地缓存,重启网卡或服务即可。
五、Windows下修改DNS与清缓存
Windows服务器的处理更直观:
- 改DNS:打开"网络和共享中心"→ 更改适配器设置 → 手动填入首选/备用DNS(如阿里223.5.5.5、腾讯119.29.29.29)。
- 清缓存:管理员CMD执行
ipconfig /flushdns,然后ipconfig /renew重新获取网络配置。 - 查hosts:检查
C:\Windows\System32\drivers\etc\hosts是否被加入异常条目。
六、内网自建DNS的检查要点
很多企业服务器用内网自建DNS或路由器做DNS转发,这类"DNS解析不出来"要从源头查:
- 自建DNS服务器的解析链路是否正常、上游DNS是否可达、是否被污染。
- 是否有泛解析/错误记录把域名解析到了错误或已失效的IP。
- 内网域名(如服务名db.intra)如果解析不到,检查DNS里是否建了对应的正向/反向区域。
只要记住"换公共DNS能通,就是自己的DNS有问题"这个黄金判断,DNS故障九成能快速锁定。如果确认公共DNS也解析不出来,那问题在域名本身、防火墙还是运营商线路,再用traceroute逐跳查。平时建议给服务器配置主备两个不同运营商DNS,减少单点全挂的风险。
延伸阅读:

