你昨天把域名连到新平台。刷新——站打开。再刷新——Vercel “Domain not configured” 页。再刷新——又通了。朋友在另一个 ISP 说完全打不开;另一个说没问题。站处于半过渡状态:部分 resolver 看到新记录、部分还看到旧的。直到完全传播 + 残留记录清理完之前,每个访客看到什么基本是随机的。
本文讲 DNS 层发生了什么、以及怎么加速过渡。
常见原因
按命中率从高到低。
1. 多条 A 记录都在
加了新 A 但忘了删旧。Resolver 收到多条 A,挑一条(常常轮询)。
怎么判断:
dig yourdomain.com
;; ANSWER SECTION: 显示 2+ 个 A 指向不同 IP 就是这条。
2. 老主机仍绑着域名
老主机平台还认为域名”绑定”,IP 被命中时服务它的默认页。即使你删了 DNS,那个主机可能还在霸占域名。
怎么判断:访问老主机控制台 → 看域名是否仍列着。应该解绑。
3. CDN / DNS 跨数据中心缓存不均
Cloudflare 等全球 DNS 在自己网络内可能不同速率传播。部分用户打到一个 DC(缓存旧记录),另一些打到另一个 DC(新记录)。
怎么判断:
dig @8.8.8.8 yourdomain.com
dig @1.1.1.1 yourdomain.com
dig @208.67.222.222 yourdomain.com
不同 resolver 返回不同 IP = 传播不均。
4. 老记录 TTL 高
记录 TTL 是 24 小时意味着某些 resolver 会在你改后保留旧记录最长 24 小时。
怎么判断:看你改之前记录的 TTL。86400(24h)就预期 24h 内有间歇。
5. DNS 提供商有 split-brain(少见)
某些高级 DNS 设置(geo-DNS、自定义响应)有意对不同客户端返回不同记录。配错的话看起来像间歇。
怎么判断:用 dnschecker.org 从多个地理位置测 dig。结果按地理位置以意外方式变化,DNS 提供商可能有 geo 规则。
6. AAAA(IPv6)记录指向别处
A 指对了但 AAAA 指向老主机。偏好 IPv6 的用户打到老主机。
怎么判断:
dig AAAA yourdomain.com
应为空或指新主机。
最短修复路径
第 1 步:多 resolver 查 DNS
for dns in 8.8.8.8 1.1.1.1 9.9.9.9 208.67.222.222; do
echo -n "$dns: "
dig @$dns +short yourdomain.com
done
不同 IP = 传播中。全一样 = 传播完。
第 2 步:清掉所有残留记录
DNS 提供商里:
- 删旧 A 记录(只留新的)
- 删指向老主机的 CNAME
- 删指向老主机的 AAAA(或暂时不用 IPv6 就全删)
第 3 步:老主机解绑域名
老主机控制台里移除或”释放”域名。否则老主机 IP 被命中时还会继续主张这个域名。
第 4 步:等原 TTL 过期
老 TTL 是 24h,改后等 24h 所有 resolver 才会丢老缓存。没有捷径。
第 5 步:用全球工具验证
dnschecker.org → 输域名 → 看 30+ 国家解析。全都显示新 IP 才算完。
第 6 步:在真实不同网络测
手机蜂窝、朋友家、VPN 到另一个国家。都显示新站就是传播完成。
哪些情况可能不是你操作错了
DNS 传播在改后几小时到一天内本来就异步且不完整——这个窗口内一些间歇不可避免,没有”ISP A 的缓存还没过期”的技术解。
容易误判的情况
硬刷浏览器没用——问题在上游 DNS,不在本地缓存。确认全球传播完成后再清本地 DNS。
预防建议
- 任何 DNS 改动至少 24 小时前把 TTL 降到 300 秒。
- 切换 DNS 之前先在老主机解绑。
- 加新记录前先清所有残留(A、AAAA、CNAME)。
- 改后等原 TTL 时长再宣布”坏了”。
- 用
dig @8.8.8.8绕开本地 DNS 缓存测。
FAQ
- 完整传播多久? 通常 1-24 小时,偶尔 48。取决于原 TTL 和 ISP resolver 多激进。
- 能强制 resolver 刷新吗? 不能——它们按 TTL 过期刷新。你没法指挥别人的 resolver 何时刷新缓存。