我是否需要等待传播以在 AWS Route53 中添加 CNAME 记录

Do I need to wait for propagation for a CNAME record addition in AWS Route53

通过 Amazon AWS Route 53 的 api,我将新的 CNAME 记录添加到现有区域。我想测试一下是否正确添加了记录。

我需要等待传播吗?还是因为它是一个新记录,它会立即被抢走吗?

我看到一篇文章提到等待它传播,但它是为了创建一个全新的区域;我不必这样做,因为我将它添加到现有的。

用例是我可以即时添加这些(CNAME 记录)并且需要检查以确保它们已正确添加。

Route53 是一个分布式 DNS 管理系统。当您在托管区域内创建新的 CNAME 或任何记录集时,需要将其传播到 AWS 边缘位置的分布式服务器 运行。这可能需要几秒到几分钟。

注意:记录集的创建过程不同于更新过程。这是因为即使在更新之后,旧记录集也可以达到外部缓存中定义的 TTL 值。

我认为您混淆了两件事:一方面,您在基于 Web 的提供商界面的更新与所有 Route53 权威名称服务器上的更改之间的延迟,另一方面,在权威名称服务器更改之后延迟世界上所有的递归名称服务器都知道。第一种情况仅取决于亚马逊基础设施。但是您可以查询其权威名称服务器并查看该资源是否已发布。第二种情况并不是真正的传播,它取决于 TTL 和负 TTL。

所以我会更关注第二种情况。

方法很简单:

  1. 首先为您的资源查询权威名称服务器,仔细检查他们是否正确回复。您甚至可以为此使用在线故障排除工具:https://zonemaster.net/ and https://graphviz.net/
  2. 之后是时候检查世界各地的递归名称服务器了。

首先,一些术语。每个人都使用该术语,但 "propagation" 在 DNS 上下文中是错误的。因为当您在权威名称服务器上更改某些内容时,他们不会将更改自上而下推送到世界上所有其他递归名称服务器,因为这是不可能的。 相反,递归名称服务器将 "at some point"(这取决于区域内容、缓存状态和本地策略),在将查询重定向到它们之后(除了极少数情况下的前期自动缓存更新)再次联系的权威名称服务器并提取最新数据。

因此,您可以开始查询一些 "well known" 开放的递归名称服务器,看看它们为您的资源学到了什么:1.1.1.18.8.8.89.9.9.9,除了您的拥有本地缓存​​(运行 在您自己的服务器上或使用您的 ISP 缓存),使用多个缓存可能会有用,因为它们的缓存将处于不同状态,这将影响结果,如上所述。

以下是有关在为资源查询特定递归名称服务器时究竟发生了什么的一些详细信息:

  • 如果它的缓存对于您的 domain/resource 完全为空(例如它刚刚重新启动),它将立即向权威名称服务器查询信息,因此您的更改立即对它及其所有客户端可见
  • 该资源将由域名服务器根据权威者给出的TTL进行缓存。 "Normally" 这是记录将保留在递归缓存中的 最长 时间量,在此期间它不会再次查询权威名称服务器以检查是否发生了某些更改。两个要点:一,共识是标准要求它是最大值,所以缓存可以在它之前自由清除(例如 space 受约束的缓存可能希望驱逐最旧的条目以制作一些 space);第二,众所周知,一些名称服务器 and/or 名称服务器部署会改变 TTL 值,无论本地策略如何,因此他们可能会扩展它,例如,如果他们认为它太低(它被认为是违反标准,但这种情况存在,人们将 TTL 设置为低至 1 或 5 秒,这同样愚蠢)
  • 现在,另一个重要的案例经常让人们感到困惑,尤其是那些测试的人。如果您在区域文件中添加一个新资源,但在更改之前查询它是否存在,权威名称服务器将回复 NXDOMAIN ("this resource does not exist"),并且此信息也将由递归名称服务器缓存一段时间,称为"negative TTL"(它仍然是一个作为延迟的正数,但称为负数,因为它适用于负面回复,例如 "this resource does not exist). So in a way you "污染缓存,因为如果您在权威名称服务器中进行更改,并且紧随其后再次查询你的递归,它仍然会回复 "no such resource" 因为它的缓存中有这个信息。

因此,关键点始终是明确区分对权威名称服务器和递归名称服务器的测试,并充分了解附加到递归缓存的属性。