假设我想将我的域名blah.example.com
从 IP 地址为 1.2.3.4 的服务器指向 IP 地址为 5.6.7.8 的另一个服务器。这需要更改 DNS。
为什么当我登录我的 GoDaddy cPanel 账户并对我的一个名称服务器进行 DNS 更改时,DNS 可能需要长达 24 小时才能“传播”到世界各地并 100% 生效,但如果我使用 DynamicDNS 或 CloudFlare 之类的服务,更改就会立即发生?
答案1
因为对于 DynamicDNS 或 CloudFlare 来说,这实际上并不是即时更改。无论您使用哪种服务,从您进行更改时起,到缓存记录在世界上所有其他 DNS 服务器上过期为止,都会有一个时间。此时间由 TTL 控制,对于某些服务(如 DynamicDNS),TTL 保持较低以允许频繁更改,而对于其他服务,TTL 保持较高以允许更高效的缓存。
答案2
为了清楚地了解“更改 DNS”时的情况,我想到两件不同的事情:
1) 更改名称服务器 - 名称服务器应在注册处立即更改。DNS 缓存可能会发挥作用。假设您使用的是名称服务器 1.2.3.4。您访问您的网站 ticketmonster.com。您的 DNS 服务器将缓存来自根名称服务器的结果,这些结果会告诉它在哪里可以找到您域名的 DNS 记录。然后,您更改域名上的名称服务器并再次访问它。假设您在 DNS 缓存过期之前访问该网站,那么您仍然会访问旧网站。
如果您在更改名称服务器之前没有访问过该网站(并且您没有使用由于其他人访问而缓存了该网站的公共名称服务器),那么您很可能会在一两秒内看到更改。
还有其他例外(集群可能不会缓存条目,因为您每次可能会访问不同的 DNS 服务器)但这是一个基本概述。
2) 更改现有名称服务器上的 DNS 记录 - 假设您正在添加/删除 A 记录。延迟可能有几个原因。您可能会遇到上述缓存问题。如果有多个名称服务器执行区域传输以复制区域,您可能需要等到该操作完成(可以降低区域文件中的 TTL 以加快此操作)。如果涉及其他形式的复制,则可能会出现延迟。
还存在其他情况,具体取决于 DNS 的具体设置方式,但这些是我能想到的常见原因。
如果您需要更快地进行更改,更改 TTL 可能会有所帮助,但请注意,某些缓存名称服务器会忽略它们并设置他们想要的任何内容。