选型与部署

递归DNS缓存策略怎么选才能降低放大风险?

递归DNS缓存能减少重复查询和上游负载,但不能替代访问控制。本文说明如何限制递归范围、设置正负缓存与过期缓存,并通过响应大小和监控降低开放解析器被用于反射放大的风险。

缓存命中率高,不等于递归解析器就安全。若公网任意主机都能使用递归服务,攻击者仍可能伪造查询来源,让解析器把较大的响应发给受害者。要让递归DNS缓存策略降低拒绝服务放大风险,第一步应是限制谁能递归,之后才是调缓存和响应行为。

先堵住开放递归入口

把递归解析器与权威解析器分开部署,或至少分别配置访问规则。面向企业终端、家庭网络或应用服务器的递归服务,只应接受明确的内网网段、VPN 地址或受控出口;公网权威服务器则不应顺带向任意来源提供递归。

BIND 9 可通过 allow-recursion 和 allow-query-cache 限定递归及缓存查询来源;Unbound 可用 access-control 设置允许的客户端网段。配置时不要把“允许查询权威记录”误当成“允许递归”。修改后从授权网段和外部网络各测试一次:前者应能正常递归,后者应被拒绝或无法获得递归结果。

若解析器必须对外开放,例如面向公众提供解析服务,仅靠缓存无法阻止反射滥用。还要结合网络入口的源地址校验、服务端访问策略、异常流量告警和必要的限速;这些措施分别减少伪造请求进入和异常响应持续发出的机会。

缓存怎么设:先尊重权威 TTL,再处理例外

正向缓存不宜一味延长

解析结果的 TTL 由权威 DNS 记录给出。通常应先遵循该值,不要为了提高命中率统一设很高的最短 TTL:网站切换地址、服务故障转移或记录频繁变化时,过长缓存会让客户端继续使用旧结果。若确有必要设置最短或最长 TTL,应先识别动态记录,并在变更窗口观察解析准确性与上游查询量。

负缓存与过期缓存各有边界

负缓存会暂存“名称不存在”等否定结果,减少重复的无效查询,时长受权威响应及解析器配置影响。设得过长,刚创建的域名或记录可能仍被判为不存在;排障时可清理相关缓存,而不是长期压低所有负缓存时间。

支持 RFC 8767 的解析器可配置 serve-stale,在上游暂时不可达时尝试返回过期记录,提高短时故障期间的可用性。但它可能延迟传播地址变更,也不能代替上游健康检查。应明确启用条件、过期数据的使用期限,并测试上游恢复后的刷新行为。

按步骤落地,并验证是否有效

  1. 盘点用途和来源。列出递归服务的客户端网段、解析器软件及版本,确认哪些实例必须对公网提供权威查询,哪些只服务内部用户。
  2. 先收紧递归 ACL。在变更窗口只放行必要网段;从非授权网络测试递归请求,确认不会得到可供反射利用的递归响应。
  3. 分项调整缓存。保留合理的权威 TTL;按业务需要设置 TTL 上下限、负缓存和 serve-stale,不要一次同时改动所有参数。
  4. 控制响应与监测异常。检查 EDNS(0) 响应大小设置,常见的约 1232 字节配置可降低部分网络中的分片问题,但具体上限要结合路径、软件和客户端测试;同时监控递归查询量、缓存命中、拒绝请求及出站响应规模。
  5. 记录回退条件。若出现旧地址持续生效、负缓存阻碍新记录解析或错误拒绝合法客户端,按记录或网段定位并回退对应设置,避免直接清空全部缓存造成上游查询突增。

DNS Cookie 在客户端和服务器支持时可辅助识别伪造来源,但兼容性和部署条件有限,不能替代访问控制。实际选择时,内网解析器优先使用严格 ACL 与适度缓存;公网权威服务则应关闭不需要的递归,并单独评估响应速率与网络防护。

常见问题

缓存命中率越高,放大风险就越低吗?

不一定。命中率主要反映重复查询是否减少;开放递归仍可能被利用。先限制递归来源,再观察缓存指标。

可以把所有记录的 TTL 设得很长吗?

不建议。长 TTL 可能让地址变更或故障切换延迟生效。应尊重权威 TTL,并针对稳定记录和动态记录分别评估。

serve-stale 能否作为防护措施?

它主要用于上游故障时维持解析可用,不是反放大机制。启用前应评估过期数据风险,并与访问控制、监控一起部署。

归根结底,递归DNS缓存策略降低拒绝服务放大风险,需要把“谁能递归”放在缓存参数之前:先隔离权限,再谨慎设置 TTL、负缓存和过期数据,并通过外部测试与流量监控持续验证。

需要选择适合业务的方案?

告诉我们业务地区、配置和预算,客服可协助推荐产品。

相关文章