DNS 传播是否依赖于 TTL?

Does DNS propagation depend on TTL?

我对 TTL 和传播时间的概念有点困惑,我想澄清一些我未能在网络上找到具体答案的事情。

AFAIK,TTL(生存时间)表示世界各地的服务器为特定 DNS 更新其缓存值所需的(最高)时间。

所以...

  1. 如果我更改 DNS 记录,此更改是否会立即发生,需要 TTL 时间才能在全球范围内更新?或者只有在 TTL 时间过去之后,这些变化才会更新,然后开始在世界范围内传播?

  2. 每个服务器都会以TTL为间隔定期检查DNS,对吧?因此,如果服务器检查 TTL 为 14400 的 DNS 记录并且我随后立即更改它,服务器将在略小于 14400 之后更新其缓存。如果我恰好在检查之前更改它,它将更新几乎立即。

  3. DNS 记录(例如 MX)的 TTL 值是否取决于其他 TTL 值或更一般元素的更新时间 override/extend 其实际生存时间(例如,SOA 刷新时间)?换句话说,如果我只关心更新 MX 记录并且我需要每 4 小时更新一次,我是否需要为这些 MX 记录设置除 TTL 之外的任何其他内容?

  4. TTL 是特定 DNS 记录将在全球更新的(理论上的)限制吗?虽然实际更新时间有很大差异,据我所知,由于服务器保持自己的缓存时间。

  1. 没有"propagation",只有缓存。因此,当您在权威服务器上更新记录时,它会立即更改。一旦缓存过期,缓存服务器将更新它们的数据。

例如,我将在我公司的本地 DNS 服务器上查询我个人域中的一个主机名。我的域的权威名称服务器在 AWS,并且记录 ata3ias.test.bajic.nl 配置了 TTL 120 和 IP 地址 127.0.0.5:

首先我会查询权威的AWS名称服务器:

[root@foo ~]# dig ata3ias.test.bajic.nl @ns-1695.awsdns-19.co.uk
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl.  120     IN      A       127.0.0.5
;; WHEN: Thu Dec 29 12:43:13 2016

我再把IP地址改成127.0.0.6再查询:

[root@foo ~]# dig ata3ias.test.bajic.nl @ns-1695.awsdns-19.co.uk
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl.  120     IN      A       127.0.0.6
;; WHEN: Thu Dec 29 12:43:22 2016

接下来,我将查询我公司的内部 DNS 服务器(我可以安全地假设之前没有人尝试解析此地址并且 DNS 服务器的缓存中没有条目):

[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl.  119     IN      A       127.0.0.6
;; Query time: 26 msec
;; WHEN: Thu Dec 29 12:46:20 2016

注意TTL,还要注意查询时间:缓存服务器查询权威DNS服务器,得到TTL响应并记住该信息。

现在,如果我再做一次:

[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl.  107     IN      A       127.0.0.6
;; Query time: 0 msec
;; WHEN: Thu Dec 29 12:46:32 2016

这个答案是从缓存中提供的,你可以看到通过 TTL(所以缓存服务器不仅会在缓存中保留数据 TTL 时间,还会将有关剩余 TTL 的信息传递给客户端),并且您可以看到重新查询需要 0 毫秒(因为不需要联系权威名称服务器)。

然后我会去AWS控制台再次编辑IP地址并将其更改为127.0.0.7。为确认更改,我再次直接查询权威服务器:

[root@foo ~]# dig ata3ias.test.bajic.nl @ns-1695.awsdns-19.co.uk
;; ANSWER SECTION:
ata3ias.test.bajic.nl.  120     IN      A       127.0.0.7
;; WHEN: Thu Dec 29 12:47:10 2016

现在再次查询内部DNS服务器:

[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
;; ANSWER SECTION:
ata3ias.test.bajic.nl.  63      IN      A       127.0.0.6
;; WHEN: Thu Dec 29 12:47:16 2016

它仍在提供旧数据,并将继续提供 63 秒。一分钟后:

[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
;; ANSWER SECTION:
ata3ias.test.bajic.nl.  3       IN      A       127.0.0.6
;; WHEN: Thu Dec 29 12:48:16 2016

最后,几秒钟后,内部 DNS 服务器将提供新信息:

[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
;; ANSWER SECTION:
ata3ias.test.bajic.nl.  119     IN      A       127.0.0.7
;; WHEN: Thu Dec 29 12:48:21 2016
  1. 完全正确。
  2. 一般来说,SOA TTL 值只与主要和辅助(从属)名称服务器之间的同步有关,所以不需要,除了 MX 记录的 TTL 之外,您不需要设置任何其他内容。您可以找到所有 SOA TTL 记录的详细解释 here
  3. 对于性能良好的服务器,是的。对于其他人,您无能为力。