Domain IP Lookup

同一个域名返回不同答案的三个原因

地理路由

每个地区对应不同的边缘服务器

缓存

TTL 各自独立,缓存各自独立

分割视图

刻意设计的不同答案

故障排查

为什么 DNS 应答会因地点而异

4 分钟阅读

同一个域名可以向不同地方的用户返回不同的 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 工具。