为什么同一域名返回不同 IP

汇总同一域名在不同环境返回不同 IP 的全部来源:多地址/GeoDNS/ECS/Split DNS/CDN 调度/Anycast/缓存差异/过滤劫持污染,并给出「权威层 vs 递归/缓存/网络层」的归因框架。

#type / synthesis #status / growing #tech / network #protocol / dns

[!info] related notes

为什么同一域名返回不同 IP

覆盖范围与排除项

本文汇总「同一个域名在不同机器/网络下解析到不同 IP」的所有常见来源,并给出一个归因框架,帮助判断差异发生在权威层还是递归/缓存/网络层。不展开每个机制的细节(见各原子笔记)。

为什么需要一起理解

看到「我这里 104.17.x.x、朋友那里 155.102.x.x」时,差异可能来自完全不同的环节。若不分清,就会误把「缓存旧了」当成「权威分流」,或反过来。逐源理解才能精准排障。

依赖与协作模型

按「差异发生在哪一层」归类:

1. 权威侧主动返回不同(正常调度)

  • 多地址:权威返回多个 IP,客户端/负载均衡选择(见 dns-record-a-aaaa
  • GeoDNS:按查询来源(多为递归解析器 IP)返回就近答案(见 geodns
  • ECS:递归携带客户端子网,让权威更精准(见 edns-client-subnet-ecs
  • Split DNS:按来源返回不同语义答案(见 split-dns
  • CDN 调度:按地理/运营商/健康/负载选边缘(见 cdn-dns-scheduling

2. 路由层选择(同一 IP)

3. 递归/缓存/网络层差异

一条具体归因路径

判断「是权威分流还是本地链路问题」:

# 直接从权威查(绕过递归缓存)
dig @ns1.example-dns.com anyrouter.top A +norecurse
dig @ns2.example-dns.com anyrouter.top A +norecurse

# 完整委派链
dig +trace anyrouter.top A
  • 权威直接回答就不同 → GeoDNS / 来源分流 / Anycast 实例差异 / 权威策略
  • 权威相同、递归不同 → 递归缓存 / 过滤 / ECS / 劫持 / 旧 CNAME 缓存 / 转发链差异

决策规则与易混淆点

  • 不要默认「一定是权威按 ASN 分流」——也可能是本地递归/DoH/缓存/劫持(见 dns-wrong-ip-tls-handshake-failure-debug)。
  • 「Oracle2 拿到源站」不代表「权威识别了 Oracle2 的 IP」——可能识别的是 Oracle 云递归 DNS 或该区域 Anycast(见 geodns)。
  • 同一公共 DNS 对不同客户端返回不同结果,常是 ECS 或 Split 的副作用,不是 bug。
  • 排障顺序:先本地(系统/浏览器/代理)→ 再指定公共 DNS → 再直连权威,逐层隔离(见 dns-systematic-diagnosis)。

指向原子笔记

创建于 2026/7/31 更新于 2026/7/31