内网DNS解析记录缓存时间是多久?

内网DNS主要可划分为四个功能模块:内置权威普通区、内置权威加速区、转发模块和递归模块。对于部署在云环境中的ECS或容器发出的域名查询请求,命中内置权威加速区的解析结果不会进行缓存,因而它们不受TTL值的限制。本文将重点讨论剩余三个模块的缓存TTL策略和缓存清除机制。

内置权威普通区&转发模块

内置权威普通区与转发模块共享相同的一级缓存结构,其工作原理如下图所示:

image

缓存TTL改写机制

内网DNS会针对命中内置权威普通区和转发模块的请求应答缓存TTL进行改写,缓存 TTL 改写机制主要包括以下几个方面:

肯定应答情况下,即当查询请求获取查询域名对应的确切解析结果:

  • 若返回的解析记录TTL值超过86400秒,缓存系统将该记录的 TTL 改写为 86400 秒

  • 若返回的解析记录TTL值小于10秒,缓存系统将该记录的 TTL 改写为 10 秒

  • 若返回的解析记录TTL值处于10秒至86400秒之间(含10秒和86400秒),缓存将直接采用原始源站DNS的 TTL 值

否定应答情况下,即当应答结果为域名不存在(NXDOMAIN)或查询类型对应记录不存在(NXRRSET)时:

  • 缓存系统将返回的解析记录TTL值统一改写为5秒。

说明
  • NXDOMAIN:表示查询的域名不存在于域名系统中;

  • NXRRSET:表示域名是存在的,但所请求的特定类型的记录在该域名下不存在。例如请求AAAA记录,但是该域名并未配置AAAA记录;

解析记录缓存逻辑:应答结果在缓存队列中的实际TTL时间,按照修改后的TTL值执行。

缓存清除&更新机制

内网DNS的缓存可以保存一定容量的解析记录,按照解析记录访问的频次进行排序,热度低的域名解析记录会被从缓存中清除。所以缓存中的解析记录清除和更新机制受TTL是否到期和缓存队列是否占满两个因素的影响。

缓存队列不满

  • 缓存到期前,解析记录保留在缓存中。终端的访问均命中缓存中的解析记录,源站变更后的解析记录不会被获取

  • 缓存过期后,解析记录保留在缓存中。终端的访问会触发去源站DNS查询,然后将返回的解析记录更新在缓存中(包括肯定应答和否定应答);如果此时应答结果为 servfail 或者响应超时,则继续返回老的缓存记录给终端

缓存队列占满

  • 缓存到期前,解析记录保留在缓存中。终端的访问均命中缓存中的解析记录(包括肯定应答和否定应答),源站变更后的解析记录不会被获取

  • 缓存到期后,解析记录从缓存中清除。终端的访问会触发去源站DNS查询,然后将返回的解析记录更新在缓存中(包括肯定应答和否定应答);如果此时应答结果为 servfail 或者响应超时,则终端获取不到解析结果

递归模块

内网DNS为云上的终端及云产品提供公网递归服务,其缓存模块为二级缓存结构,原理图如下:

image

缓存TTL改写机制

一、缓存模块

肯定应答情况下,即当查询请求获取查询域名对应的确切解析结果:

  • 缓存系统将返回的解析记录的 TTL 统一改写为 10 秒

否定应答情况下,即当应答结果为域名不存在(NXDOMAIN)或查询类型对应记录不存在(NXRRSET)时:

  • 缓存系统将返回的解析记录TTL值统一改写为5秒。

解析记录缓存逻辑:应答结果在缓存队列中的实际TTL时间,按照改写后的TTL值执行。

二、递归模块

TTL值不做任何改写,遵循公网权威DNS设置的TTL值,包括肯定应答和否定应答。

解析记录缓存逻辑:应答结果在缓存队列中的实际TTL时间,按照修改后的TTL值执行。

缓存清除&更新机制

一、缓存模块

缓存队列不满
  • 缓存到期前,解析记录保留在缓存中。终端的访问均命中缓存中的解析记录,源站变更后的解析记录不会被获取

  • 缓存到期后,解析记录从缓存中清除。终端的访问会触发去源站DNS查询,然后将返回的解析记录更新在缓存中(包括肯定应答和否定应答);如果此时应答结果为 servfail 或者 响应超时 ,则继续返回老的缓存记录给终端

缓存队列占满

  • 缓存到期前,解析记录保留在缓存中。终端的访问均命中缓存中的解析记录(包括肯定应答和否定应答),源站变更后的解析记录不会被获取

  • 缓存到期后,解析记录从缓存中清除。终端的访问会触发去源站DNS查询,然后将返回的解析记录更新在缓存中(包括肯定应答和否定应答);如果此时应答结果为 servfail 或者 响应超时 ,则终端获取不到解析结果

二、递归模块

缓存队列不满
  • 缓存到期前,解析记录保留在缓存中。终端的访问均命中缓存中的解析记录,源站变更后的解析记录不会被获取

  • 缓存到期后,解析记录从缓存中清除。终端的访问会触发去源站DNS查询,然后将返回的解析记录更新在缓存中(包括肯定应答和否定应答);如果此时应答结果为 servfail 或者 响应超时 ,则继续返回老的缓存记录给终端

缓存队列占满

  • 缓存到期前,解析记录保留在缓存中。终端的访问均命中缓存中的解析记录(包括肯定应答和否定应答),源站变更后的解析记录不会被获取

  • 缓存到期后,解析记录从缓存中清除。终端的访问会触发去源站DNS查询,然后将返回的解析记录更新在缓存中(包括肯定应答和否定应答);如果此时应答结果为 servfail 或者 响应超时 ,则终端获取不到解析结果