DNS 修改后仍打不开:沿权威解析与缓存逐层检查

DNS 修改后仍打不开:沿权威解析与缓存逐层检查原创封面

把域名故障改写成一个具体查询

DNS 修改后仍然无法访问网站,首先需要把描述改成可以重复的查询:哪一个完整名称、哪一种记录类型、从哪台解析服务器得到什么结果。主域名和子域名可能有不同记录,A 与 AAAA 也可能对应不同入口。记录查询时间和回答内容,再观察网站请求失败的位置。浏览器打不开不一定由 DNS 导致,证书、端口和代理响应也会产生类似表现。本文只沿解析链调查名称信息,解析正确以后应转入网站连接与响应检查,避免把所有故障都称为解析未生效。

查询结果可以分成返回新地址、返回旧地址、名称不存在、服务失败和没有回答等情况。它们需要不同解释。旧地址通常值得检查缓存,名称不存在需要核对委派与记录,服务失败还可能涉及解析服务器或 DNSSEC,而超时需要检查查询网络。不能把这些结果统一理解为再等一会儿。保留完整回答中的状态和服务器信息,比只复制最终地址更有价值;简化输出可以方便查看,但调查阶段不应过早丢掉能够定位原因的字段。

注册商委派决定权威查询去哪里

域名注册商维护的名称服务器委派,决定外部查询应该去哪里寻找该域名的权威信息。解析控制台里有记录,并不代表该控制台当前承担权威服务。如果委派仍指向另一家平台,新平台添加的记录就不会进入实际查询链。可以通过逐层查询观察委派,再与注册商设置对照。这里需要区分域名区内列出的名称服务器和父级委派给出的信息,不能仅依赖本地递归缓存中的一条 NS 回答判断委派已经更新。

使用 dig 的 trace 模式可以观察从上层到目标区域的查询过程,但它需要客户端能够访问这些服务器。如果网络限制了外部 DNS 查询,过程可能在中途超时;这不能直接证明目标域名的权威服务故障。应记录最后成功的一步,并从具备相应网络条件的环境复核。委派修改也有缓存窗口,旧平台最好在切换观察期继续提供一致记录。提前停止旧权威服务,会使仍持有旧委派缓存的解析器无法取得正确回答。

直接核对每台权威服务器

确定当前委派以后,直接向权威服务器查询目标名称,明确请求 A、AAAA 或 CNAME,并使用不递归选项观察其自身回答。若同一区域有多台权威服务器,应逐个检查,因为记录同步或配置差异可能造成结果不一致。查询中出现权威回答标志,有助于确认回应的身份;仍需结合委派和目标区域解释。某台服务器能够解析其他网站,不代表它对当前区域具有权威性,不能把一般递归能力误认为权威配置已经正确。

如果所有权威服务器都返回错误内容,应回到实际生效的控制台,核对名称、记录类型、线路与保存结果。不同来源线路可能采用不同回答,测试需要对应访问者的来源条件。还要检查名称是否进入了另一个子区域的委派,避免在父区域添加记录后忽略子区域的权威边界。修改完成后重新向同一组权威服务器读取结果,保存前后对照。权威阶段没有正确,清理客户端缓存就无法解决根本问题,只会让客户端更快取得同样的错误回答。

比较递归解析器的旧值与剩余时间

权威返回正确以后,再查询客户端实际使用的递归解析器,以及另一个独立的递归来源。递归解析器会缓存回答,剩余 TTL 可以帮助判断旧值是否仍处于缓存窗口。不要用新记录的 TTL 推断旧值应该何时消失:旧缓存是在修改前按当时的条件保存的。查询时保持名称与类型一致,避免拿某个服务器的 A 结果和另一个服务器的 AAAA 结果比较,然后错误地归因于同步延迟。

缓存过程还可能涉及 CNAME 链。入口名称的别名和目标名称的地址可以分别缓存,需要逐段核对。若应用使用了多个别名,不能只检查第一跳就宣布整个链条已经切换。可以记录每个节点的回答和剩余时间,再确认最终地址指向预期入口。某一个公共递归来源更新较快,只说明该来源已经取得新信息,不代表所有访问者都经过同一套缓存。对故障报告,应注明测试来源,避免把局部结果扩大成全网完成。

名称不存在也可能被缓存

修改前如果名称尚未创建,递归解析器可能缓存名称不存在或缺少相应类型的回答。这种负缓存有自己的条件,不能只盯着后来新增记录的 TTL。调查时保留回答中的状态、区域信息和时间,确认现在权威已经能提供记录,再检查递归结果。对于新建的博客子域名,这是一类值得考虑的现象。但不能只凭一次名称不存在就认定负缓存;名称拼写错误、委派错误和查询线路错误也会得到类似表现,需要先完成权威核对。

负缓存排查应与修改记录的动作分开。反复删除再添加同一条记录,可能让观察过程更加混乱,并不能要求所有缓存立即失效。可以在独立查询环境验证权威结果,并为普通客户端保留合理观察窗口。若持续超过已知缓存条件仍然错误,检查客户端是否通过其他解析服务、网络代理或应用内部缓存访问。把查询路径记录下来以后,就能说明哪些层已经取得新记录,哪些层还在返回旧状态,而不是只能给出继续等待的建议。

系统查询与浏览器可能走不同路径

Windows 可以通过系统查询工具读取 DNS,并在需要时清理系统缓存,但浏览器可能使用自己的安全 DNS 设置。某些代理工具也会改变解析位置,甚至让远端代理解析名称。排查时先记录浏览器、系统和代理的实际配置,再比较查询结果。清理系统缓存只影响该层,不能保证浏览器或远程代理同时刷新。也不要为了短期验证而永久关闭所有保护功能;需要的是说明请求经过哪里,随后选择对应的诊断方法。

本机 hosts 文件同样值得检查。它可能把名称固定到旧入口,使 DNS 查询看起来正确而应用仍连接错误地址。测试时应区分原始 DNS 查询、系统名称解析和最终 HTTP 连接。若通过临时地址覆盖请求验证服务器,要明确注明这个测试绕过了正常解析。这样可以在检查网站入口时避免受缓存影响,同时仍然保留 DNS 是否正确的独立结论。每层使用对应的工具,能够降低跨层结果相互矛盾时的理解成本。

检查地址族与解析验证状态

网站在一个网络可用、另一个网络不可用时,应检查 IPv4 与 IPv6 的回答和入口能力。旧 AAAA 记录、错误的 IPv6 路由或缺少监听,可能使部分访问者走向不同结果。解析链中的每一个地址族都应单独记录,不能只看 A 记录。修复应根据真实服务能力进行,保留已经正确工作的地址族,并处理错误的那一项。关闭某个地址族可以是临时诊断手段,但不能替代说明为什么该路径没有配置完整。

若递归解析器返回服务失败,而权威查询看起来有内容,还需考虑 DNSSEC 验证等因素。应核对域名是否启用签名以及父级记录是否与当前区域一致,再使用相应验证工具读取原因。不要通过关闭验证把结果简单定义为恢复正常,因为这可能掩盖委派或签名问题。对于不熟悉的签名变更,应遵循解析平台的迁移说明。本文不展开完整 DNSSEC 部署,只强调服务失败与普通缓存旧值不同,诊断过程需要保留这种区别。

解析正确以后转向网站请求

取得预期地址以后,可以从普通访问路径请求网站,观察连接、TLS 和 HTTP 的结果。临时使用 curl 的 resolve 参数可以固定入口地址并保留目标名称,从而验证服务器路由,但它不能证明公共解析已经正确。若普通请求与固定地址请求表现不同,结合实际连接地址进一步定位。不要用直接访问 IP 的成功代替域名请求,因为网站可能依赖目标名称选择站点,证书也通常针对域名配置。

记录网站验证时,应保留状态码、最终地址与重定向目标,不必输出敏感的请求头。若已经进入正确站点却返回应用错误,调查目标应转到上游服务和日志;如果证书名称不符,应核对代理站点配置。DNS 是链条中的一环,完成这一层以后及时切换检查方向,可以减少重复修改正确记录带来的风险。没有实际执行的访问结果不能写成成功,只能说明相应验证方法与尚待确认的状态。

为下一次切换保存证据

一份简洁记录可以包含委派来源、权威服务器、各记录类型、递归来源、查询时间和网站入口验证。修改前后的记录放在一起,能够解释缓存窗口,也方便回退时检查旧入口仍然是否可用。域名迁移最好先使新权威与旧权威提供一致内容,再切换委派,观察完成后处理旧服务。具体顺序仍应服从平台要求,尤其涉及签名或特殊线路时,不能将基础场景的操作直接套用。

这套方法适用于普通公网域名的解析调查。企业内网、分区解析与代理托管环境可能有更多路径,应把它们加入同样的分层记录。排查的目标不是证明某一项设置保存成功,而是解释客户端最终取得哪份名称信息,以及信息来自哪一层。按委派、权威、递归、系统、浏览器和网站请求逐步核对以后,新旧地址差异通常能落到具体位置,修改动作也能针对该位置进行,而不再依赖反复清空缓存的猜测。

实现片段

# 示例名称与服务器;请换成目标域名的实际权威信息
dig +trace example.com A
dig @ns1.example.net example.com A +norecurse
dig @ns2.example.net example.com A +norecurse
dig @1.1.1.1 example.com A
dig @8.8.8.8 example.com A
dig example.com AAAA
# 单独核对链条,不只保留 +short 的最终地址
dig www.example.com CNAME

一手参考资料

评论 · 0

还没有评论留下第一句经过思考的话。

游客评论需审核。注册后可直接公开,无需审核。

SHARE / 分享

分享这篇文章

WECHAT / 微信

用微信扫一扫

在手机微信中打开文章后,再从微信右上角分享给朋友或朋友圈。