课题研究 DNS解析安全 子课题06 · 第5页 / 共8页
06域名与DNS安全 · 解析基础设施韧性研究

递归解析器与终端侧韧性

递归层与终端层是解析韧性的"最后一公里":缓存与serve-stale把权威中断转化为可容忍的降级,多解析器竞速把故障发现从秒级压到亚秒级,加密DNS在收敛故障域的同时要求新的发现与治理机制。本页给出每层的机制细节与一份可直接采用的终端韧性清单。

Serve Stale负缓存Happy EyeballsDoH/DoT/DoQDDR/SVCBDNS64研究状态:深度研究中
所属子课题解析基础设施韧性研究 · 第5页
核心议题缓存缓冲、serve-stale、多解析器竞速、加密DNS服务发现
主要依据RFC 8767、RFC 2308、RFC 8305、RFC 7858/8484/9250、RFC 9460—9463

01 · 递归缓存:中断时的第一缓冲带

递归解析器天然是权威与终端之间的容量缓冲与故障缓冲。权威短时失效时,缓存中的记录仍可应答;其缓冲深度由四要素决定:

机制规范韧性作用
正缓存RFC 1034/1035权威不可达时以缓存记录继续服务至TTL届满
负缓存RFC 2308(1998)NXDOMAIN/无数据按SOA MINIMUM缓存,避免无效重试压垮上游
Serve StaleRFC 8767(2020)TTL届满后上游失效,仍返回过期数据并后台重试——将"硬失败"转为"陈旧但可用"
缓存预取BIND/商业实现特性临近过期的热点记录提前刷新,消除TTL到期引发的解析尖峰与上游依赖脉冲

1.1 Serve Stale的双刃剑

RFC 8767规定递归器在"解析失败(超时/SERVFAIL)且缓存中存在过期数据"时,可返回过期应答并将TTL标注为0。BIND自9.12起支持、9.16起机制成熟:是否默认启用因组件与版本而异——过期记录保留缓存(stale-cache-enable)在受支持版本中默认关闭、需显式启用;陈旧期上限 max-stale-ttl 的默认值随版本演进(早期为1周,2020年6月起ISC调整为12小时量级);过期应答TTL(stale-answer-ttl)默认30秒。Unbound则需显式配置 serve-expired: yes。具体参数以所部署版本的ARM(管理员参考手册)为准。其韧性收益在Facebook 2021类事件中已经体现:缓存+stale可让用户侧在权威长时间不可达时维持基本访问。但代价必须被治理:

  • 数据陈旧风险:迁移/ failover期间返回旧IP可能把流量导向已下线节点;权威侧恢复后必须依赖后台重试快速收敛。
  • 缓存击穿叠加:若权威失效源于容量耗尽,stale期间递归器的后台重试(建议退避)应与权威容量评估联动,避免恢复时刻的"重试雪崩"。
  • 与TTL策略的耦合:低TTL记录几乎无法受益于stale(过期数据本身很快到期),再次印证第4页"分级TTL"设计的必要性。

1.2 递归器自身的高可用

递归器本身是新的集中点。企业级部署的通行做法:递归器集群(anycast VIP或负载均衡)+ 共享缓存层(如dnscache/memcached式缓存分层,或商业递归器的集群特性)+ 多上游(下文)。须避免"递归器单实例+serve-stale"的组合被误认为高可用——stale只是延长降级容忍时间,不消除SPOF。

02 · 多解析器与竞速:Happy Eyeballs思想在DNS的应用

RFC 8305(2017)为TCP建立的多路径竞速(Happy Eyeballs v2)思想同样适用于解析路径选择:当终端或递归器配置多个上游(如ISP递归+公共递归,或双数据中心递归)时,并发竞速查询并采用最先有效应答,可将单解析器故障的感知时间从"超时重试串行链"压缩到"竞速窗口"内(数百毫秒级)。

多解析器竞速决策流(终端视角)
示意模型:竞速并不替代健康检查,而是把失败发现从秒级压到亚秒级
说明:流程为本课题对RFC 8305竞速思想的DNS化概括,非某一RFC的原文流程。具体实现(如systemd-resolved的链路竞速、curl的DNS竞速、c-ares)各有差异。

2.1 多解析器配置的坑

  • "主备"≠多活:操作系统stub通常按序尝试解析器(先A超时再B),切换感知取决于超时计时器(秒级到十秒级);只有竞速型实现才是真正的亚秒级容错。
  • 视图分裂(Split-horizon):企业内网依赖私有视图时,混入公共解析器会导致内外视图混淆——多解析器策略必须与视图设计协同。
  • 不一致应答的处置:两解析器应答不一致(配置漂移/缓存差异)时,缺乏策略的客户端可能随机采用,掩盖故障根因;竞速实现应记录不一致事件供运维溯源。

03 · 加密DNS:协议收益与故障域收敛

3.1 协议对比

协议规范传输韧性特性
DoTRFC 7858/8310TCP/853连接可复用;会话恢复降低握手成本;端口独立易被策略管控
DoHRFC 8484HTTPS/443复用Web基础设施与CDN韧性;与Web流量共用故障域
DoQRFC 9250(2022)QUIC/8530-RTT与连接迁移;丢包环境下的时延韧性优于TCP系

3.2 服务发现机制:从手工配置到自动协商

  • DDR(RFC 9462)与SVCB/HTTPS(RFC 9460,2023):解析器在普通53端口应答中携带HTTPS记录,客户端据此自动升级至加密连接——升级路径无需人工配置,失败可回退明文。
  • DNS服务器SVCB映射(RFC 9461):_dns.resolver.arpa 查询使客户端发现"指定解析器的加密端点参数",为DDR提供参数载体。
  • DHCP/RA发现(RFC 9463):网络通过DHCP/路由器通告直接下发网络指定加密解析器(DNR),企业内网可借此下发自有DoT/DoH服务,实现"加密+可审计"兼得。
  • 客户端演进:Android自9.0(2018)支持"私人DNS"(DoT);Apple自iOS 14/macOS 11(2020)支持加密DNS描述文件;Windows 11支持DoH自动升级。企业可通过组策略/MDM统一下发策略。

故障域收敛风险:加密DNS使终端解析依赖收敛到少数超级提供商(公共DoH端点)。这些端点天然具备全球anycast与海量冗余,单点故障概率低;但全球性配置事故或策略封锁的爆炸半径也同比放大(全部依赖客户端同时失效)。治理要点:企业应下发自有加密解析器而非裸禁853/443;运营商级故障演练应包含"公共DoH端点全局不可达"场景(第8页)。

04 · IPv6与过渡技术的解析面

  • 双栈解析行为:双栈终端会同时查询A与AAAA记录;地址选择遵循RFC 6724。AAAA查询失败(如AAAA记录存在但网络不可达)造成的"解析成功、连接失败"类问题,要求解析面与应用连接测试协同排障。
  • DNS64/NAT64:RFC 6147(DNS64)+RFC 6146(NAT64)为纯IPv6网络合成A记录;合成依赖递归器特性,故障时表现与普通解析不同(IPv6-only用户看不到A记录)。发现机制遵循RFC 7050。
  • 464XLAT(RFC 6877):运营商级IPv6-only部署(如T-Mobile美国网络的公开实践)在客户端做464翻译,使纯IPv4应用可用——解析面仍由DNS64合成,验证了解析韧性与网络架构的紧耦合。
  • 企业启示:IPv6解析记录(AAAA)必须与A记录同等级运维,包括TTL策略、监控探针与故障切换预案;只监控A记录的双栈服务等于半个监控。

05 · 终端解析栈差异速览

平台组件默认行为与韧性要点
WindowsDNS Client服务缓存;NRPT策略路由;DoH可经组策略配置
systemd-resolved按链路分流与竞速;LLMNR/mDNS可关闭;企业应锁定上游
Android Private DNSDoT严格/自动模式;严格模式下明文回退被禁止——解析器故障即应用级断网
Apple平台加密DNS描述文件(系统级/按网络);对企业下发友好
容器/K8sCoreDNS(插件链);ndots与search域放大查询量;须防解析风暴

终端侧韧性清单(可直接采用):①配置≥2个解析器(企业场景:双递归+公共应急);②启用竞速型stub或接受秒级主备切换;③加密DNS下发自有解析器(RFC 9463)而非封端口;④stale与prefetch开启;⑤AAAA/A监控对等;⑥客户端DNS缓存纳入故障排查手册(浏览器/运行时独立缓存是"改了TTL不生效"投诉的主要来源)。

本节参考来源(第5页)

[1]

RFC 8767(2020):Serving Stale DNS Data。rfc-editor.org/rfc/rfc8767

[2]

RFC 2308(1998):Negative Caching of DNS Queries。rfc-editor.org/rfc/rfc2308

[3]

RFC 8305(2017):Happy Eyeballs Version 2。rfc-editor.org/rfc/rfc8305

[4]

RFC 7858(2016):DNS over TLS;RFC 8484(2018):DNS over HTTPS;RFC 9250(2022):DNS over QUIC。rfc-editor.org

[5]

RFC 9460(2023):SVCB/HTTPS RR;RFC 9461:Service Binding Mapping for DNS Servers;RFC 9462:Discovery of Designated Resolvers;RFC 9463:DNR via DHCP/RA。rfc-editor.org

[6]

RFC 6147(2011):DNS64;RFC 6146(2011):NAT64;RFC 7050(2013):Discovery of the IPv6 Prefix Used for IPv6 Address Synthesis。rfc-editor.org

[7]

RFC 6724(2012):Default Address Selection for IPv6。rfc-editor.org/rfc/rfc6724

[8]

Android开发者文档:私人DNS(Private DNS, DoT);Apple平台加密DNS描述文件文档。developer.android.com