什么是 Anycast DNS?
Anycast DNS 是一种网络路由方式:分布在不同地理位置的多台 DNS 服务器共享同一个 IP 地址。用户通过 Anycast 查询 DNS 时,网络会自动把请求路由到最近或性能最佳的服务器,从而缩短响应时间,并提供内置冗余和 DDoS 防护。
Anycast 的工作方式
传统单播与 Anycast
单播(传统方式):User Query → Specific Server IP → Fixed Location
London User → 203.0.113.1 → New York Server (high latency)
Anycast:
User Query → Shared IP → Nearest Server
London User → 203.0.113.1 → London Server (low latency)
Tokyo User → 203.0.113.1 → Tokyo Server (low latency)
Sydney User → 203.0.113.1 → Sydney Server (low latency)
路由机制
1. 多台服务器、一个 IP:所有 Anycast 服务器都公布同一个 IP 地址
2. BGP 路由:边界网关协议将流量路由到“最近”的服务器
3. 网络邻近性:由 BGP 指标(跃点、延迟和网络策略)决定
4. 自动故障转移:一台服务器故障后,流量会转向下一台最近的服务器
Anycast DNS 的优势
1. 降低延迟
地理分布可以缩短 DNS 查询时间:
| 用户位置 | 单播延迟 | Anycast 延迟 | 改善幅度 |
|---|---|---|---|
| New York | 10ms | 5ms | 快 50% |
| London | 120ms | 8ms | 快 93% |
| Tokyo | 180ms | 12ms | 快 93% |
| Sydney | 220ms | 15ms | 快 93% |
DNS Resolution Time:
Unicast: 150ms (distant server)
Anycast: 10ms (local server)
Savings: 140ms per query
For a page with 20 DNS lookups:
Total savings: 2,800ms (2.8 seconds!)
2. 内置冗余
多个存在点(PoP)可以提供自动故障转移:
Normal Operation:
London Server → Online → Serving traffic
Paris Server → Online → Serving traffic
Frankfurt Server → Online → Serving traffic
Server Failure:
London Server → OFFLINE
Paris Server → Online → Absorbs London traffic automatically
Frankfurt Server → Online → Absorbs London traffic automatically
3. DDoS 缓解
分布式基础设施可以吸收攻击:
单服务器(单播):Attack: 100 Gbps DDoS → Single Server → Overwhelmed → Service Down
Anycast 网络:
Attack: 100 Gbps DDoS → Distributed across 20 servers
Each server receives: ~5 Gbps
Result: Attack absorbed, service continues
4. 提升性能
Anycast 可以缩短 DNS 查询解析时间:
# Query time comparison
dig @8.8.8.8 example.com # Google's anycast DNS
# Query time: 12 msec
dig @single-server.dns.com example.com # Unicast DNS
# Query time: 145 msec
Anycast DNS 架构
网络结构
[Global Anycast IP: 203.0.113.1]
|
┌─────────────────────┼──────────────────────┐
| | |
[US West PoP] [Europe PoP] [Asia PoP]
- Los Angeles - London - Tokyo
- San Francisco - Frankfurt - Singapore
- Seattle - Amsterdam - Hong Kong
服务器配置
每个 Anycast 位置都应具备:
- 相同的 DNS 区域:所有服务器托管相同的 DNS 记录
- 共享 IP 地址:通过 BGP 公布同一个 IP
- 自主运行:每个 PoP 独立运行
- 同步更新:区域变更传播到所有位置
BGP 公告
Example BGP Configuration:
IP Block: 203.0.113.0/24
London PoP announces: 203.0.113.1 via AS64500
New York PoP announces: 203.0.113.1 via AS64500
Tokyo PoP announces: 203.0.113.1 via AS64500
Internet routers select nearest announcement based on BGP metrics.
常见 Anycast DNS 提供商
公共解析器
| 提供商 | IPv4 | IPv6 | PoP 数量 |
|---|---|---|---|
| Cloudflare | 1.1.1.1 | 2606:4700:4700::1111 | 300+ |
| 8.8.8.8 | 2001:4860:4860::8888 | 100+ | |
| Quad9 | 9.9.9.9 | 2620:fe::fe | 150+ |
| OpenDNS | 208.67.222.222 | 2620:119:35::35 | 25+ |
权威 DNS 提供商
Cloudflare DNS:- 免费的 Anycast DNS 托管
- 全球网络(300+ 个 PoP)
- 自动 DDoS 防护
- 覆盖 AWS 区域的 Anycast 网络
- 99.99% SLA
- 支持基于地理位置的路由
- 支持过滤链的高级 Anycast
- 实时流量管理
- API 优先的架构
- 企业级 Anycast DNS
- 用于高级路由的流量导向
- 全球负载均衡
设置 Anycast DNS
用于权威 DNS
1. 选择提供商:选择 Anycast DNS 托管服务:
# Cloudflare example
Name Servers:
ns1.cloudflare.com (anycast)
ns2.cloudflare.com (anycast)
2. 更新注册商配置:
将域名指向 Anycast 名称服务器:
example.com. NS ns1.cloudflare.com.
example.com. NS ns2.cloudflare.com.
3. 配置 DNS 记录:
在提供商处添加 DNS 记录:
example.com. A 203.0.113.50
www A 203.0.113.50
mail MX mail.example.com.
用于递归 DNS
切换到 Anycast 解析器: Linux/Mac(/etc/resolv.conf):nameserver 1.1.1.1
nameserver 1.0.0.1
Windows(网络设置):
Preferred DNS: 1.1.1.1
Alternate DNS: 1.0.0.1
路由器配置:
在路由器层面设置 DNS 服务器,即可应用到整个网络。
Anycast 与其他 DNS 架构
Anycast 与单播
| 特性 | Anycast | 单播 |
|---|---|---|
| 路由 | 最近的服务器 | 指定服务器 |
| 延迟 | 低(本地) | 取决于距离 |
| 冗余 | 内置 | 需要额外 IP |
| DDoS 防护 | 分布式吸收 | 易受单点攻击 |
| 复杂度 | 更高(BGP 路由) | 简单(直接路由) |
Anycast 与 GeoDNS
| 特性 | Anycast | GeoDNS |
|---|---|---|
| 路由层 | 网络(BGP) | 应用(DNS) |
| 故障转移 | 自动 | 需配置 |
| 粒度 | 网络邻近性 | 地理区域 |
| IP 地址 | 全球相同 | 各区域不同 |
| 使用场景 | 全球性能 | 区域内容分发 |
性能比较
DNS 查询解析时间
Test: 1000 DNS queries from various global locations
Unicast DNS (single server in US):
Average: 145ms
Min: 12ms (US queries)
Max: 340ms (Asia/Australia queries)
Anycast DNS (20 global PoPs):
Average: 18ms
Min: 5ms
Max: 45ms
Performance Improvement: 87% faster average response
真实环境测试
# Test anycast DNS performance
for location in us-east eu-west asia-pacific; do
dig @1.1.1.1 example.com | grep "Query time"
done
# Results:
# US East: Query time: 8 msec
# EU West: Query time: 11 msec
# Asia Pacific: Query time: 14 msec
# Compare to unicast:
dig @unicast-server.com example.com | grep "Query time"
# Query time: 167 msec (from Asia)
Anycast 的局限
1. 无状态协议要求
Anycast 最适合 DNS 这类无状态协议:
- 每个查询彼此独立
- 不需要保持会话
- 响应不依赖前序查询
- 需要会话状态的 TCP 连接
- 流式传输协议
- 数据库连接
2. 路由不对称
流量可能经过不同路径:
Query: User → Nearest anycast server → Response
Next Query: User → Different server (if routing changes)
3. BGP 收敛时间
故障期间,BGP 路由更新需要时间:
Server Failure → BGP update propagation (30-120 seconds)
During convergence: Some queries may fail
After convergence: Traffic rerouted automatically
监控 Anycast DNS
关键指标
按位置统计响应时间:# Monitor from multiple locations
curl "https://api.monitoring-service.com/dns/check?domain=example.com&locations=all"
各 PoP 的可用性:
- 跟踪每个位置的正常运行时间
- 对区域性故障发出告警
- 监控查询成功率
PoP Statistics:
US East: 35% of queries
EU West: 28% of queries
Asia: 22% of queries
Other: 15% of queries
健康检查
# Verify anycast is working
dig +short @anycast-server.com example.com
# Test from multiple locations
for server in probe1 probe2 probe3; do
ssh $server "dig @anycast-ip example.com +short"
done
# Should see responses from geographically appropriate servers
最佳实践
1. 将 Anycast 用于权威 DNS
切换到 Anycast DNS 托管,以获得:
- 更好的全球性能
- 更强的 DDoS 防护
- 更高的可用性
2. 与 GeoDNS 结合
将 Anycast(基础设施)与 GeoDNS(应用)分层使用:
Anycast → Fast routing to nearest DNS server
GeoDNS → Return geographically appropriate IP addresses
3. 监控所有 PoP
为每个 Anycast 位置建立监控:
- DNS 查询成功率
- 响应时间
- 可用性百分比
4. 规划 BGP 收敛
故障期间预计路由更新需要 30-120 秒:
- 对预期行为做好沟通
- 设置合适的监控阈值
- 不要对短暂的路由变化过度告警
5. 测试故障转移场景
定期测试 Anycast 网络如何处理故障:
# Simulate PoP failure
# Verify traffic reroutes automatically
# Measure convergence time
# Check user impact
Anycast DNS 是现代高性能互联网基础设施的重要组成部分,为面向全球用户的网站和应用提供快速 DNS 解析、自动冗余和内置 DDoS 防护。