切换 TTL 为 1 天的 DNS 条目时的最坏情况

切换 TTL 为 1 天的 DNS 条目时的最坏情况

假设我有一个 DNS 条目,其生存时间设置为 1 天或 86400 秒,并且我更新了它的目标 IP,我想知道在最坏的情况下最终用户需要多长时间才能获得新的 IP。

我的假设是,最终用户可能需要 72 小时才能收到新的 IP 地址。这是对的吗?多个节点中的缓存是否允许这种情况发生?


这是基于以下假设:

  • 名称服务器立即更新该条目。
  • ISP、用户路由器和用户计算机都在缓存 DNS 条目。
  • 所有节点都遵守设置的 TTL。它们将 TTL 视为超时,而不是到期日期。

时间场景:

  • 在 t=0 时,名称服务器更新条目。
  • 在t=23:59时,用户路由器向ISP询问最新的IP。
  • 在 t=24 时,ISP 获取新条目。
  • 在t=47:59小时,用户计算机向用户路由器询问最新的IP。
  • 在 t=48 时,用户路由器获取新条目。
  • 在t=71:59时,用户计算机再次询问用户路由器,最终更新完毕。

答案1

我认为您的场景不合理。在权威服务器发生更改后,在 t=23h59m 时,所谓的 ISP 名称服务器要么已经有了新条目,要么它有旧条目。但如果它有旧条目,它一定是至少在 23h59m 前从权威服务器获取的,因此剩余的 TTL 对我来说只有 60 秒或更短。因此,当用户的计算机在 47h59m 时请求它时,它将不再存在:它将在近 24 小时后过期,并且可能从那时起刷新过。

一般来说,如果记录的 TTL 在更改时为 86400 秒,则记录的旧值在 DNS 系统中保留的最大时间为 86400 秒。我能想到的只有两种例外情况:

  • DNS 服务器中的实现错误...希望没有任何错误 :-)
  • 未绑定cache-min-ttl配置,可用于强制名称服务器缓存记录的时间超过其应有的时间。但由于 Unbound 的手册页实际上说“更高的值 [...] 可能会导致麻烦”,我认为人们不应该在没有充分理由的情况下使用它。

那么还剩下什么呢?缓存信息外部的 DNS。

当应用程序或某种类型的操作系统缓存从 DNS 获得旧记录后,就无法确定它可以缓存该记录多长时间。

相关内容