文档首页/ 云解析服务 DNS/ 最佳实践/ 通过Serving Stale提高自建DNS的解析成功率
更新时间:2024-09-13 GMT+08:00
分享

通过Serving Stale提高自建DNS的解析成功率

什么是Serving Stale

Serving Stale是RFC 8767描述的用于提高DNS解析可靠性的一个标准。当Local DNS上的域名缓存过期,由于权威DNS故障导致Local DNS无法刷新本地缓存时,可以通过Local DNS的Serving Stale的能力使用过期的缓存结果应答请求,避免客户端无法得到响应。

  • 上游DNS服务器故障时,使用过期的缓存应答请求,可能导致域名在上游DNS更新后,自建DNS不能及时给客户端响应最新的结果。
  • Serving Stale功能是使用在自建DNS缓存已经过期的缓存来应答客户端,未缓存过的域名不适用。

Serving Stale的使用场景

如下图中,容器/ECS使用了自建DNS做域名解析,当自建DNS的上游DNS由于故障而无法应答时:

  • 如果自建DNS未开启Serving Stale能力,容器/ECS解析域名会失败。
  • 如果自建DNS开启了Serving Stale能力,自建DNS使用过期的缓存来应答容器/ECS,解析不中断。
图1 Serving Stale的使用场景

如何开启Serving Stale

  • bind9开启Serving Stale:如果您的自建DNS用的是bind,可以在bind的options配置中增加相关配置项并重载/重启您的DNS服务来生效。
  • coreDNS开启Serving Stale:如果您的自建DNS是coreDNS或者您需要优化k8s集群的域名解析时延,可以在cache配置项中开启Serving Stale。

bind9开启Serving Stale

bind9支持版本:9.16.3及以上

  • 配置文件:named.conf
  • 配置位置:options
  • 配置项说明

    配置项

    默认值

    建议值

    功能说明

    stale-cache-enable

    no

    yes

    启用缓存保持功能。

    stale-answer-enable

    stale-answer-enable

    yes

    启用stale-cache来应答。

    max-stale-ttl

    1day

    1day

    stale-cache缓存保持多长时间。

    stale-refresh-time

    30s

    30s

    bind刷新stale-cache的时间间隔,即多长时间向权威DNS请求一次,并刷新缓存。

    stale-answer-ttl

    30s

    30s

    使用stale-cache回复response时,报文中的TTL值。

  • 配置样例:
    options {
        stale-cache-enable yes;
        stale-answer-enable yes;
    };

coreDNS开启Serving Stale

coreDNS插件中已支持Serving Stale能力,允许coreDNS无法连接上游DNS服务器时使用已过期的本地缓存来应答。

coreDNS支持版本:1.6.6

  • 配置格式:serve_stale [DURATION] [REFRESH_MODE]
  • 配置项说明:
    • DURATION:过期缓存的使用时长,默认值为1h。
    • REFRESH_MODE:支持配置为verify、immediate。
      • verify:在将过期的缓存发送到客户端之前,先验证上游的DNS是否可用。该方式可能会增加客户端的解析时延。
      • immediate:立即将过期的缓存作为响应发送给客户端。
  • 配置样例:
    cache {
    serve_stale 1h immediate
    }

相关文档