同一个域名返回不同答案的三个原因
地理路由
每个地区对应不同的边缘服务器
缓存
TTL 各自独立,缓存各自独立
分割视图
刻意设计的不同答案
为什么 DNS 应答会因地点而异
同一个域名可以向不同地方的用户返回不同的 DNS 应答,而这些应答都不一定有错。DNS 服务商和 CDN 可以利用地理路由或延迟感知路由,把用户引向区域性的基础设施。递归解析器各自缓存的值也可能不同,企业网络还可能使用分离视图 DNS(split-horizon DNS),让员工拿到内部应答,而公网用户得到另一份。因此,您看到的地址是主机名、记录类型、解析器、位置和时间共同作用的结果。单次查询无法代表所有可能的视角,所以做对比时应当保留这些上下文信息。
基于地理位置和延迟的 DNS
支持地理感知的服务商会逐次评估每个查询,并根据配置的区域、网络测量结果或策略来选择应答,可能返回就近的 CDN 边缘节点,也可能返回某个区域的应用端点。服务商通常看到的是发出查询的递归解析器,而这个解析器可能离终端用户很远,也可能同时服务大量用户。部分系统会使用 EDNS Client Subnet 附带部分网络上下文,但支持情况和隐私行为各不相同。因此,从某个位置发起的查询,并不总能说明该位置的某个具体用户通过其所选的 ISP 或企业解析器会得到什么结果。
| 原因 | 应答可能不同的缘由 |
|---|---|
| 地理 DNS | 服务商按解析器或网络所在区域选择记录 |
| CDN | 针对不同的查询位置,可能通告不同的边缘节点 |
| 缓存 | 各解析器依据 TTL 在不同时间刷新 |
| 分离视图 | 内部客户端和公网客户端获得不同的区域视图 |
| 故障切换 | 服务商在健康检查或策略事件后更改应答 |
缓存是造成差异的另一个来源。某个解析器可能仍持有旧应答,而另一个已经取到了新应答。调低 TTL 并不会追溯性地缩短已按旧 TTL 缓存的值。本地操作系统和应用程序也可能有各自的缓存行为。如果记录刚刚改过,请记下之前的 TTL 以及变更发布的时间。给缓存留出过期的时间,并查询权威域名服务器来确认区域本身的内容,再断定更新是否失败。
如何排查应答不一致
通过指定的解析器,对完全相同的主机名和记录类型进行比较,并记下每次查询的执行位置和时间。检查权威域名服务器,确认区域当前发布的内容。如果只有递归应答不同,应考虑缓存时长、解析器策略或地理位置。如果权威服务器之间不一致,则检查服务商的同步和委派情况。如果内部和外部用户看到的值不同,请确认分离视图 DNS 是否为有意配置。最后,测试服务端点本身:不同的 DNS 地址可能都指向健康的应用副本,相同的应答也可能因与 DNS 无关的原因而同样失败。
- 记录解析器、查询位置、主机名、记录类型、应答和时间戳。
- 在再次修改记录之前,先比对权威数据。
- DNS 修改后,要考虑 TTL 缓存和否定缓存的影响。
- 检查是否有 CDN 和地理路由规则在有意让应答产生差异。
- 独立于名称解析,单独测试实际的服务健康状况。
应答不同并不能证明什么
公开应答不同,本身并不意味着 DNS 被劫持、域名遭到入侵,或源站服务器已经迁移。这些都可能只是正常的设计行为。同样,应答一致也不能证明所有访问者走的是同一条路径,因为缓存和应用层可能各不相同。请寻找佐证:服务商配置、公布的维护通知、已知的 CDN 地址段和应用遥测数据。描述结论时要保持克制,尤其是当该地址属于为众多客户提供服务的共享基础设施时。
要了解分布式应答背后的机制,请参阅 CDN 如何使用 DNS 和 DNS 负载均衡。域名查询工具能提供一份有用的公共 DNS 快照;如果要对比不同视角,请用第二个解析器重复同样的查询。把查询上下文与结果放在一起,就能把表面上的矛盾变成关于路由策略、缓存或配置的证据。
对比应答时不要丢失上下文
一张有用的对比表应包含查询时间、解析器地址、位置或网络、主机名、记录类型、响应码、TTL 和应答值。如果结果不同,还应补充该解析器是公共的、企业的还是服务商托管的,以及该域名是否使用 CDN。稍后重复查询,以判断这种差异是稳定的策略,还是暂时的缓存分裂。如果同一个解析器在不同时间返回不同的应答,请检查是否存在负载均衡和基于健康状态的故障切换。如果两个解析器的结果始终不同,则应排查地理定位或分离视图设置。有了这些上下文,“DNS 不一致”就变成了一条 DNS 服务商可以复现并解释的具体观察结果。汇报对比结果时,除非已确认该域名的路由策略,否则不要说某个应答在全球范围内才是正确的。要说明每条应答来自权威服务器还是递归缓存,并保留随之显示的 TTL。如果 CDN 有意返回区域性端点,那么应当问的是每个端点在其所在区域是否健康,而不是每个解析器是否返回同一个地址。这种区分可以避免把预期内的路由设计当作 DNS 故障上报。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
相关阅读
四个层级,按顺序排查
DNS
解析域名
传输层
TCP 连接
TLS
证书验证
应用层
HTTP 响应
如何诊断“无法访问此网站”错误
这条笼统的浏览器错误涵盖了几种互不相关的故障模式,而 DNS 往往是最快能先排除或确认的一个。
“传播”其实只是缓存过期
0 分钟
您保存了更改
0-5 分钟
您的 DNS 托管商完成更新
最长到 TTL
旧答案仍在缓存中
TTL 之后
所有人都看到新答案
没有任何内容被推送出去,只是各个缓存不再复用自己的副本
DNS 修改没有生效时该怎么办
您更新了记录,等了一阵,看起来还是不对。在断定出了故障之前,请按顺序逐项排查。
一次查询通常应耗时多少
排查 DNS 解析缓慢的问题
网站加载缓慢,有时其实是 DNS 查询慢在作怪。本文教您如何分辨二者,并说明常见的成因。