Anycast DNS 是什么?为什么公共 DNS 和 CDN 常用它?
简化版
Anycast 是多个节点对外宣布同一个 IP,路由系统把用户流量送到拓扑上最近或最优的节点。公共 DNS、根 DNS、CDN 常用 Anycast 提升就近访问、抗故障和抗 DDoS 能力。
详细版
Anycast DNS 的关键点:
- 多个地理位置不同的 DNS 节点使用同一个服务 IP。
- BGP 把客户端请求路由到“网络上更近”的节点。
- 某个节点故障后撤销路由,流量自动转到其他节点。
- 它对客户端透明,客户端只配置一个 DNS IP。
- 它不是 DNS 协议本身的负载均衡,而是 IP 路由层的调度。
比如 8.8.8.8 不是只有一台服务器,而是全球多个节点共同提供服务。
完整版教学
一、Anycast 和 Unicast 的区别
Unicast 是一个 IP 通常对应一个网络位置。Anycast 是多个位置同时宣布同一个 IP,路由协议决定你实际到哪个节点。
Unicast:
203.0.113.10 -> 一个机房
Anycast:
203.0.113.53 -> 北京节点
-> 上海节点
-> 新加坡节点
-> 美国节点
客户端不需要知道背后有多少节点,它只访问同一个 IP。
记忆钩子:Anycast 是“一个 IP,多处服务,路由带你去最近的那个”。
二、BGP 如何把流量引到近处
Anycast 依赖 BGP 路由发布。多个节点向互联网宣布同一个前缀,路由器根据 AS 路径、本地策略、优先级等选择路径。
Client ISP 路由表:
8.8.8.0/24 via nearby node
另一个地区:
8.8.8.0/24 via another node
“最近”不是地理距离最近,而是路由意义上的最优路径。运营商策略会影响实际选择。
三、为什么 DNS 特别适合 Anycast
DNS 查询通常短小、无状态或弱状态,使用 UDP 居多,非常适合 Anycast。用户发一次查询,路由到附近节点,节点直接回答。
| 特性 | 对 Anycast 的友好程度 |
|---|---|
| 查询短小 | 高 |
| UDP 居多 | 高 |
| 状态少 | 高 |
| 对延迟敏感 | 高 |
| 长连接强状态 | 较低 |
相比长连接业务,DNS 不太担心同一会话中途被路由到不同节点。
四、Anycast 如何提升高可用
如果某个节点故障,可以撤销该节点的 BGP 路由,流量会被互联网路由系统导向其他仍可用节点。用户仍访问同一个 IP。
正常:
Client -> Node A
Node A 故障:
Node A withdraw route
Client -> Node B
这也是根 DNS 和公共 DNS 抗故障的重要手段。它把单点 IP 变成全球多点服务。
五、Anycast 和 DNS 负载均衡的区别
DNS 负载均衡通常是域名解析返回不同 IP;Anycast 是多个节点共享同一个 IP,由路由系统选择节点。
| 方案 | 调度层 | 客户端看到 |
|---|---|---|
| DNS 轮询 | DNS 应用层 | 多个不同 IP |
| 智能 DNS | DNS 应用层 | 按来源返回不同 IP |
| Anycast | IP 路由层 | 同一个 IP |
CDN 常同时使用智能 DNS 和 Anycast:DNS 先返回合适入口,入口 IP 背后又可能是 Anycast。
六、Anycast 的问题和排障
Anycast 排障难点是“同一个 IP,不同地方访问到的不是同一台机器”。某地异常时,其他地区可能完全正常。
traceroute 8.8.8.8
mtr 8.8.8.8
排障要从多个地区测路径,查看到达的 POP、延迟、丢包和 BGP 路由变化。运维上还要确保各节点数据一致、健康检查准确、故障节点及时撤路由。
七、常见误区与追问
- 误区:Anycast 是 DNS 协议的一部分。 Anycast 是 IP 路由层技术,DNS 只是非常适合使用它。
- 误区:同一个 Anycast IP 全球一定到同一服务器。 不同地区会到不同节点。
- 误区:Anycast 一定按地理最近调度。 实际按 BGP 路由和运营商策略选择。
- 追问:为什么 DNS 适合 Anycast? 查询短、状态少、对延迟敏感,路由变化影响较小。
- 追问:Anycast 如何抗故障? 故障节点撤销路由,流量自动转到其他节点。
- 追问:Anycast 和 DNS 轮询有什么区别? 一个在路由层共享同 IP,一个在 DNS 层返回多 IP。
八、加强记忆
Anycast DNS 记成“同 IP,多节点,BGP 选路”。它让 DNS 服务离用户更近、故障能切走、攻击能分散;但排障必须多地观察,因为同一个 IP 在不同地方可能落到不同节点。