同一个域名返回不同答案的三个原因
地理路由
每个地区对应不同的边缘服务器
缓存
TTL 各自独立,缓存各自独立
分割视图
刻意设计的不同答案
为什么我的域名在不同网络上解析结果不同?
这是一个常见的困惑:您在办公室网络中查询某个域名,得到一个 IP 地址;换到手机的蜂窝网络再查同一个域名,却得到完全不同的另一个。两者可能同时都完全正确。
地理感知路由与基于负载的路由
大型网站和 CDN 经常根据查询看起来来自哪里,给出不同的 DNS 应答,以便把每位访问者路由到最近或负载最低的服务器。某个区域的解析器会被指向附近的边缘服务器;另一个区域的解析器,甚至只是网络对等互联情况不同的另一家 ISP,则会被指向另一台。两者都不“错”,它们都是针对不同观测点优化的有效答案。
缓存带来第二层差异
在地理路由之外,每个解析器都会在该记录的 TTL 内独立缓存应答。您家里 ISP 的解析器可能在三分钟前缓存了一个应答,而手机运营商的解析器此刻可能正在重新询问。在两边的缓存自然过期并刷新之前,同一个域名可以合理地显示两个不同的(而且当前都有效的)答案。
- 对于任何位于 CDN 或全球负载均衡服务之后的域名,这都是正常且在预期之内的现象。
- 只有当其中某个答案实际上无法访问或已损坏,而不只是不同时,它才会成为真正的问题。
- 如果需要为审计目的获得单一、可比较的答案,请每次都从一致的观测点(同一个工具、同一个网络)查询,而不要比较在不同位置取得的查询结果。
当您想确认某个域名总体上解析到什么,比如用于安全检查、迁移验证或常规监控时,直接向一个固定的、广为人知的公共解析器发起解析(而不是使用手边恰好那台设备上配置的解析器),能给您一个一致、可比较的基准,而不必追着每个网络的差异跑。
第三种有意为之的原因:分离视图 DNS
地理路由和缓存都是附带产生的,没有人有意让答案不同,这只是规模化带来的副作用。分离视图(split-horizon,或称“split-view”)DNS 则不同:组织会有意配置自己的域名服务器,对来自企业内部网络的查询返回一个答案,对其他所有人返回另一个答案。一个仅限内部使用的内网主机名,可能在办公室 Wi-Fi 下解析为私有地址,而在外部则完全解析不到,或者解析到一个公开的着陆页。如果某个域名在连接办公室 VPN 的工作笔记本电脑上解析正常,在家里却不行,那么分离视图 DNS(而不是故障)是一个相当常见的解释,在大型组织中尤其如此。
| 原因 | 是否有意为之? | 出现以下情况才表明有真正的问题…… |
|---|---|---|
| 地理 / 负载路由 | 是,由 CDN 或平台有意为之 | 某个特定区域的答案无法访问,而不只是不同 |
| 独立缓存 | 否,属于附带现象 | 某个应答远远超过记录标明的 TTL 仍未更新 |
| 分离视图 DNS | 是,由组织有意为之 | 按设计永远不会出现,这正是预期的行为 |
快速区分这三种情况
实际上,区分它们最快的办法,是看差异与网络身份相关,还是与时间相关。如果来自两个不同网络的两次查询此刻结果不一致,而一分钟后从同一个网络各自重新检查,得到的结果仍与之前相同,那就是地理路由或分离视图,即与查询来自哪里有关的因素。如果某一个网络的答案在相隔几分钟的两次查询之间自行改变,而没有任何其他不同,那就是缓存追上了一次真实的近期变更。这种区分很重要,因为这三种情况里,只有一种,即出人意料且无法访问的答案,才真正值得当作事故来处理。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
相关阅读
四种结果,四种不同的后续处理
DNS 超时与 SERVFAIL 有何区别
二者看上去都是查询失败,但超时和 SERVFAIL 指向的是不同的问题,应对的下一步也不一样。本文帮您分清并正确处理。
四种结果,四种不同的后续处理
NXDOMAIN 详解:域名为何无法解析
NXDOMAIN 表示就 DNS 而言该域名并不存在,既不是超时,也不是服务器故障。下面讲讲它的真正成因,以及为什么重试毫无意义。
同一个域名返回不同答案的三个原因
地理路由
每个地区对应不同的边缘服务器
缓存
TTL 各自独立,缓存各自独立
分割视图
刻意设计的不同答案
为什么 DNS 应答会因地点而异
了解地理 DNS、CDN 路由、解析器缓存和分离视图(split-horizon)配置,弄清同一个域名为什么会在不同位置返回不同的 DNS 应答。