连续 DNS 缓存

Successive DNS caching

我找不到任何人谈论这个,但是如果我的权威 DNS 服务器将记录的 TTL 设置为 1 分钟并且客户端试图在家中解析该记录,这样说是不是正确的计算机,通过本地递归 DNS 服务器,由于本地 DNS 服务器和操作系统的缓存正在添加,对此 DNS 记录的更改可能需要最多 2 分钟才能传播?

如果客户端 A 试图解析 mysite.com 通过本地 DNS D,就在 DNS 记录更新之前,那么本地 DNS D 将在其本地现金上有一个新记录,TTL 为 1 分钟,指向错误的记录。现在,如果客户端 B 尝试在 59 秒后使用 DNS D 解析 mysite.com,则客户端 B 的操作系统会将此记录再缓存一分钟,实际上至少需要 2 分钟,客户端 B 才能获得正确的值。

我的假设正确吗?如果是这样,沿途还有哪些其他可能的缓存?我如何安全地跟踪特定机器背后的所有缓存以进行特定主机名解析?

您的假设不正确。当向客户端发送响应时,缓存 DNS 服务器将仅发送缓存到期前剩余的时间作为 TTL 值。客户端甚至不会知道(并且并不真正关心)什么是“原始”TTL 值。

这里有一个例子:我已经创建了

dsmoraes.bajic.nl   A   127.0.0.254

TTL=60。 这是一个新记录,因此可以安全地假设它没有缓存在任何地方。当我第一次查询 Google DNS 时,我会得到 60(或 59)秒的 TTL:

$ 挖掘 dsmoraes.bajic.nl @8.8.8.8

; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> dsmoraes.bajic.nl @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7656
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;dsmoraes.bajic.nl.     IN  A

;; ANSWER SECTION:
dsmoraes.bajic.nl.  59  IN  A   127.0.0.254

;; Query time: 14 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Aug 02 09:49:49 CEST 2019
;; MSG SIZE  rcvd: 62

但是随着每个后续请求,发送给客户端的 TTL 会变低(只有剩余时间):

$ dig +noall +answer dsmoraes.bajic.nl @8.8.8.8
dsmoraes.bajic.nl.  49  IN  A   127.0.0.254
 
$ dig +noall +answer dsmoraes.bajic.nl @8.8.8.8
dsmoraes.bajic.nl.  43  IN  A   127.0.0.254

(Google DNS 是分布式的,所以你可能会在后续请求中访问不同的缓存服务器) 这样一来,如果缓存服务器表现良好,就不可能提供陈旧的记录(在特殊情况下,人们可能会故意将自己的 DNS 服务器配置为表现不同,但那是另一回事了)。

进一步阅读:https://www.rfc-editor.org/rfc/rfc1034#section-6