本页目录
DNS 基础设施
根服务器不是 13 台机器,是 13 个 anycast 网络。从根到 TLD 到权威,每一层都是分布式的——理解这层基础设施的架构,才知道"改一条 DNS 记录"的背后发生了什么。
概述
DNS 不只是协议——它是一个全球分布式数据库,由 13 个 root server(1000+ 物理实例通过 Anycast 部署)和数百个 TLD registry 构成。CDN 提供商(Cloudflare/AWS/Azure)利用 DNS 作为流量入口:根据查询来源 IP 返回最近的数据中心地址。Split DNS 在企业/家庭网络中分隔内外视图。理解 DNS 基础设施是理解互联网可用性和故障恢复的关键。
Root Server System
13 个逻辑 root server 标识 (a.root-servers.net ~ m.root-servers.net),1000+ 物理实例通过 Anycast 全球分布。
Root zone 大小: ~10KB (只有 TLD delegation records)。Root server 不应答 recursive queries (RD=0 only),只做 referral。
Root hints file (/usr/share/dns/root.hints 或内置在 recursive resolver 中) 提供初始 bootstrap。
Anycast
同一 IP prefix 同时 announce 在多个物理位置。BGP 自动将流量路由到最近的 (by AS path) 节点。
Anycast 工作原理: 不保证同 client 的两次查询去同一个实例 (除非同一 /24 announced consistently)。这对 DNS 是完美的 — 每个 query 独立。
CDN DNS
Split DNS
内部网络使用不同的 DNS 视图:
内部 (家庭/公司网络):
grafana.liz6.com → 192.168.31.8 (内网 IP, 不经公网)
公网:
grafana.liz6.com → VPS IP (经过 rathole 隧道)
实现:
- BIND: views { match-clients { internal_net; }; ... }
- Unbound: access-control-view
- dnsmasq: address=/grafana.liz6.com/192.168.31.8
DNS-based Load Balancing
Weighted round-robin:
www.example.com A 1.1.1.1
www.example.com A 2.2.2.2
→ resolver 随机选 (通常 client 选第一个, 但不同 resolver 行为不同)
Latency-based (Route 53):
latency alias + health checks → 自动选择最低延迟的 healthy endpoint
Geo-proximity (Traffic Manager):
geographic routing + endpoint monitoring
参考
- RSSAC: root-servers.org
- CDN: Cloudflare Anycast, AWS Route 53, Azure Traffic Manager
Keywords: root servers, anycast, CDN DNS, GeoDNS, split DNS, ECS, DNS-based load balancing