DNS 解析异常会导致哪些访问问题
说明 DNS 在访问过程中的位置、解析异常时的典型症状、如何用系统命令验证解析是否正常,以及缓存、hosts 与解析污染各自对应什么表现。
本文解决的问题:网站打不开但网络是通的,怀疑是 DNS 问题,想知道怎么确认。
DNS 的作用是把域名翻译成 IP 地址。它处在访问链条的最前面——在浏览器发出任何实际请求之前,必须先知道要连到哪个 IP。因此 DNS 出问题时,表现往往是「完全打不开」而不是「打开很慢」,这一点是判断的重要线索。
一次访问中 DNS 在哪一步
当你在浏览器输入一个网址,实际发生的顺序是:
- 浏览器检查自己的 DNS 缓存;
- 没有命中则查系统缓存;
- 再没有则查 hosts 文件是否有静态映射;
- 仍然没有,向配置的 DNS 服务器发起查询;
- 拿到 IP 后,才开始建立 TCP 连接;
- 连接建立后,才有 HTTPS 握手和实际的页面请求。
第 1 到 4 步中的任何一步出问题,后面的步骤都不会发生。 这就是为什么 DNS 问题看起来像「网络断了」,尽管网络本身完全正常。
解析异常的四种典型症状
症状一:提示找不到服务器 IP。 浏览器显示「DNS_PROBE_FINISHED_NXDOMAIN」「找不到服务器 IP 地址」或类似提示。这是最明确的 DNS 错误。
症状二:部分网站打不开,其它正常。 DNS 是按域名逐个解析和缓存的,某一个域名的记录异常不会影响其它域名。如果所有网站都打不开,问题通常不在 DNS。
症状三:换网络就好了。 不同网络往往使用不同的 DNS 服务器。切换 Wi-Fi 与移动数据后恢复正常,是 DNS 问题的强信号。
症状四:能 ping 通 IP,但域名打不开。 这是最直接的证据——说明网络路径是通的,只是域名翻译不出来。
用命令验证
不需要任何额外工具,系统自带的命令就够了。
查询某个域名的解析结果:
nslookup feshuf.gsaat.my
如果返回了 IP 地址,说明解析正常。如果提示 server can't find 或超时,就是解析环节的问题。
指定 DNS 服务器再查一次:
nslookup feshuf.gsaat.my 1.1.1.1
这一条很关键。它绕开系统当前配置的 DNS,直接向公共 DNS 查询。
- 如果默认查询失败、指定后成功,说明问题在你当前使用的 DNS 服务器上;
- 如果两者都失败,说明该域名本身可能有问题,或者查询请求被拦截了。
对比不同 DNS 返回的结果:
分别向两三个公共 DNS 查询同一个域名,看返回的 IP 是否一致。返回结果差异很大时,可能存在解析被篡改的情况。
三个常见的本地原因
原因一:DNS 缓存过期
系统会缓存解析结果以提高速度。如果目标站点更换了服务器 IP,而你本地还缓存着旧记录,就会连到一个已经不存在的地址。
清除方法:
- Windows:以管理员身份打开命令提示符,执行
ipconfig /flushdns - macOS:终端执行
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - 浏览器:Chrome 可以访问
chrome://net-internals/#dns点击清除
清除缓存没有副作用,只是下一次访问需要重新查询。
原因二:hosts 文件残留
hosts 文件是一个静态映射表,优先级高于所有 DNS 查询。如果里面有一条针对某域名的记录,无论 DNS 怎么配置,系统都会直接使用 hosts 里的 IP。
这是「换了 DNS 也没用」的最常见原因。很多工具在安装时会往 hosts 里写入内容,卸载时却不一定清理干净。
文件位置:
- Windows:
C:\Windows\System32\drivers\etc\hosts - macOS / Linux:
/etc/hosts
用文本编辑器打开(Windows 需要管理员权限),检查是否有自己没添加过的条目。修改前请先复制一份原文件备份。
原因三:解析结果被拦截或篡改
在某些网络环境下,DNS 查询可能被中间设备拦截并返回错误的结果。表现是:域名能解析出 IP,但那个 IP 根本不是目标服务器。
判断方法是对比多个 DNS 的返回结果。如果本地 DNS 返回的 IP 与公共 DNS 差异明显,且连接该 IP 无响应,就值得怀疑。
换 DNS 不是万能药
更换公共 DNS 是常见建议,但它有代价,值得说清楚。
很多大型网站使用 CDN,会根据发起查询的 DNS 服务器位置返回离你最近的服务器 IP。使用运营商 DNS 时,返回的通常是本地节点;换成公共 DNS 后,返回的节点可能离你更远,结果是「解析成功了,但访问变慢了」。
所以合理的做法是:
- 遇到解析失败时,用公共 DNS 作为诊断工具验证问题所在;
- 是否长期切换,取决于实测效果,而不是「公共 DNS 一定更好」这个假设。
修改系统 DNS 设置前,请先记录原来的配置。
与其它问题的区分
| 现象 | 更可能是 |
|---|---|
| 所有网站都打不开 | 本地网络或链路问题 |
| 只有个别域名打不开 | DNS 解析 |
| 能打开但很慢 | 带宽、拥塞或丢包 |
| 能 ping 通 IP,域名不行 | DNS 解析 |
| 提示证书错误 | 系统时间不正确 |
如果你正在排查的是页面完全打不开,完整的分层排查顺序见注册页面打不开时的检查方法。如果是客户端连接问题,请看故障排查。
安全提示
- 修改 DNS 设置或 hosts 文件前请先记录原始内容,方便随时恢复。
- 不要使用来源不明的「DNS 优化工具」,它们可能会静默修改系统配置。
- hosts 文件里出现自己没有添加过的条目时要格外警惕。
本文相关常见问题
换公共 DNS 一定更好吗?
不一定。公共 DNS 在解析稳定性上可能更好,但它返回的服务器 IP 可能离你更远,导致访问速度下降。是否更好需要实测。
清除 DNS 缓存会有副作用吗?
没有。缓存清除后,后续请求会重新查询一次,只是第一次访问稍慢一点。
为什么有的网站正常有的不正常?
DNS 是按域名逐个解析的。某个域名的解析记录出问题,不影响其它域名,所以会出现「部分网站打不开」的现象。
手机能打开电脑打不开,是 DNS 问题吗?
很可能是。手机和电脑如果用的是同一个 Wi-Fi,DNS 服务器一般相同,但电脑上可能有 hosts 残留或本地缓存。先清缓存再检查 hosts。
准备注册 FlyingBird 飞鸟?
AMM打开注册页面后,如系统要求填写优惠码,请粘贴 AMM。价格、套餐与可用状态请以用户中心实时页面为准。