DNS 传播、TTL,以及为什么没有什么是即时的
本指南译自英文。部分链接页面仅提供英文版本。
为什么修正后的记录一小时内看起来仍然不对,以及如何正确检查。
你修正了记录。有些人看到了新网站,你却还看到旧的。一切都没有坏。
“传播”其实是缓存
并不存在广播。解析器查询你的记录时,会按记录的 TTL 缓存答案。在 TTL 到期之前,它会继续向你以及该解析器下的所有人提供旧答案。“传播”只是这些缓存在不同时间到期而已。
TTL 是调节杆
TTL 300 秒(5 分钟) — 几分钟内可见变更。
TTL 3600 秒(1 小时) — 最多一小时的过期数据。
TTL 86400 秒(1 天) — 最多一天。
变更前低成本提速的办法:提前很久降低 TTL,完成变更后再调高。
检查事实,而不是你的浏览器
浏览器和操作系统同样会缓存 DNS。要看到全世界看到的结果,请直接查询权威域名服务器:
bash
dig example.com A +short # your configured resolver
dig @1.1.1.1 example.com A +short # Cloudflare public resolver
dig @8.8.8.8 example.com A +short # Google public resolver
dig @ns1.yourhost.example example.com A +short # YOUR authoritative server (the source of truth)如果权威服务器返回正确答案,而公共解析器仍是旧的,那你只是在等缓存过期。如果权威服务器本身就是错的,请修正区域。
等待期间清除自己的缓存
bash
# Linux (systemd-resolved)
resolvectl flush-caches
# macOS
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
# Windows
ipconfig /flushdns浏览器也有自己的缓存——使用无痕窗口或换一个浏览器即可绕过。
“我这里正常,他们那里不行”检查清单
查询权威域名服务器——记录在那里正确吗?
同时检查根域名和 www。
检查 TTL,以及你修改记录已经过去多久。
确认你编辑的是真正生效的区域(而不是旧注册商的副本)。
查找同类型的第二条冲突记录。
延伸阅读