DNS 生效详解:为什么 DNS 修改需要时间,以及如何检查 | Check Host

改了 DNS 记录,却还有人看到旧的?了解 TTL 和解析器缓存如何造成"生效延迟",以及如何在全球范围内检查。

你把域名指向了新服务器,可一半的用户仍然访问到旧服务器。这种延迟就是常说的 DNS 生效(传播)。其实并没有什么东西在"传播"——旧的解析结果还保存在世界各地的缓存里,等待过期。

实际发生了什么

当有人访问你的域名时,他的设备会询问一个递归解析器(运营商的,或者 1.1.1.1、8.8.8.8 这样的公共 DNS)。解析器向你的权威域名服务器查询一次,然后在记录的 TTL(生存时间)允许的时间内缓存这个结果。在 TTL 过期之前,所有使用该解析器的人得到的都是旧的缓存结果。

所以一次修改的最长延迟大约等于该记录原来的 TTL。TTL 为 86400 秒的记录可能需要一天才能全部更新;TTL 为 300 的记录大约只需五分钟。

如何让修改快速生效

  1. 在修改前一天,把记录的 TTL 降到 300 秒。
  2. 等待原来较长的 TTL 过期。
  3. 进行修改。此时缓存会在几分钟内刷新。
  4. 确认一切正常后,再把 TTL 调回去。

更换域名服务器需要更久

更换域名使用的 NS 服务器(在注册商处)会涉及顶级域服务器,而这些 NS 记录的 TTL 通常是一到两天。请预留最多 48 小时。

在全球范围内检查生效情况

DNS 查询会同时从多个国家的解析器查询你的记录,让你看到哪些地点已经返回新值、哪些仍在返回旧值。你可以查询 A、AAAA、CNAME、MX、TXT、NS、SOA 和 PTR 记录,也可以指定特定的解析器。

修改后通常需要检查:

本地仍然是旧结果?

你的电脑和浏览器也会缓存 DNS。清除缓存(Windows 用 ipconfig /flushdns,大多数 Linux 用 sudo resolvectl flush-caches,macOS 用 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder),或换一个解析器测试。然后用网站检测确认网站本身已经由新服务器响应。