网络知识

DNS 解析异常会导致哪些访问问题

说明 DNS 在访问过程中的位置、解析异常时的典型症状、如何用系统命令验证解析是否正常,以及缓存、hosts 与解析污染各自对应什么表现。

本文解决的问题:网站打不开但网络是通的,怀疑是 DNS 问题,想知道怎么确认。

DNS 的作用是把域名翻译成 IP 地址。它处在访问链条的最前面——在浏览器发出任何实际请求之前,必须先知道要连到哪个 IP。因此 DNS 出问题时,表现往往是「完全打不开」而不是「打开很慢」,这一点是判断的重要线索。

一次访问中 DNS 在哪一步

当你在浏览器输入一个网址,实际发生的顺序是:

  1. 浏览器检查自己的 DNS 缓存;
  2. 没有命中则查系统缓存;
  3. 再没有则查 hosts 文件是否有静态映射;
  4. 仍然没有,向配置的 DNS 服务器发起查询;
  5. 拿到 IP 后,才开始建立 TCP 连接;
  6. 连接建立后,才有 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 里写入内容,卸载时却不一定清理干净。

文件位置:

  • WindowsC:\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。

INVITE CODE

准备注册 FlyingBird 飞鸟?

AMM
复制并前往注册

打开注册页面后,如系统要求填写优惠码,请粘贴 AMM。价格、套餐与可用状态请以用户中心实时页面为准。