先给结论:修改 DNS 解析记录后,本地和递归 DNS 通常在 10 分钟到 1 小时内生效,取决于你设置的 TTL;全球范围内完全生效一般需要 24–48 小时。 如果只是修改已有记录的 IP,且 TTL 设为 600 秒,绝大多数用户会在 10 分钟内切到新 IP;而新增域名或更换 NS(DNS 服务器)时,才真正需要等待 24–48 小时。

很多人以为"DNS 生效慢"是域名商的问题,其实生效时间几乎完全由 TTL 和各级缓存决定,而且可以提前控制。本文讲清楚生效原理、各类记录的实际生效时间、如何提前规划切换、以及怎么验证是否已经生效。

一、为什么修改 DNS 不是立刻生效

你修改的是权威 DNS 服务器上的记录,但用户查询域名时,请求并不会每次都打到权威服务器,而是要穿过一连串缓存:

层级 缓存位置 典型缓存时长
1. 浏览器缓存 Chrome/Edge 等浏览器自身的 DNS 缓存 约 1 分钟(Chrome 默认 60 秒)
2. 操作系统缓存 Windows/macOS 的 DNS Client 缓存 遵循 TTL,Windows 最长 24 小时
3. 路由器缓存 家用路由器的 DNS 转发缓存 遵循 TTL,部分劣质路由器会强行延长
4. 递归 DNS 缓存 运营商 DNS 或 114/223.5.5.5/8.8.8.8 等公共 DNS 遵循 TTL,这一层影响最大
5. 权威 DNS 你的域名解析服务商(阿里云/DNSPod 等) 修改后秒级生效

只要任何一层缓存里还留着旧记录,用户拿到的就还是旧 IP。 所谓"DNS 生效时间",本质上就是等这些缓存过期的时间。

二、TTL 是什么:决定生效速度的关键

TTL(Time To Live,生存时间) 是你在解析记录上设置的一个秒数,告诉所有缓存服务器:这条记录可以缓存多久。

  • TTL = 600,表示各级缓存最多保留这条记录 10 分钟,到期后必须重新向权威服务器查询。
  • TTL = 86400(24 小时),表示缓存会保留一整天——这就是有些人改了解析、第二天才生效的原因。

常见 TTL 取值与适用场景:

TTL 值 换算 适用场景
60 秒 1 分钟 切换过渡期、故障切换(有额外查询开销,不建议长期使用)
600 秒 10 分钟 推荐默认值,多数解析商的默认设置,兼顾灵活与性能
3600 秒 1 小时 记录稳定、很少变更的域名
86400 秒 24 小时 MX、TXT 等极少变动的记录,可降低查询量

关键原则:TTL 的调整本身也要提前。 如果当前 TTL 是 86400,你现在把它改成 600,这个"改成 600"的动作也要等旧的 86400 秒缓存过期后才对所有人生效。正确做法是:计划切换的前一天先把 TTL 降到 600,等旧 TTL 完全过期后再改 IP。

三、不同操作的实际生效时间

操作类型 典型生效时间 说明
修改已有 A/AAAA/CNAME 记录的值 TTL 时间内(通常 10 分钟–1 小时) 只受 TTL 影响,最快的一类
新增一条解析记录 几乎立即–10 分钟 没有旧缓存需要过期;但如果之前查询过并被缓存了"不存在"的否定结果,需等否定缓存过期
删除一条解析记录 TTL 时间内 同样等缓存过期
修改 TTL 值本身 旧 TTL 时间后 见上文的关键原则
更换 NS(DNS 服务器) 24–48 小时 NS 记录在顶级域注册局,TTL 通常长达 24–48 小时,且各地同步不一
新注册域名首次解析 10 分钟–数小时 需等注册局将域名信息推送至各级 DNS

一句话总结:改记录看 TTL,换 NS 看 48 小时。 日常绝大多数"生效慢"的抱怨,都发生在换 NS 或 TTL 设得太大这两种情况。

四、如何验证是否已经生效

修改完之后,最容易踩的坑是:你自己电脑上看到已经生效,就以为全网都生效了(或者相反,你本地还是旧 IP,就以为全网都没生效)。判断生效必须看多个地区、多家 DNS 的结果。

1. 用多地 DNS 查询工具(最准确)

从全国不同地区、不同运营商的 DNS 同时查询同一个域名,直观看到哪些地区已经切到新 IP、哪些还在返回旧 IP。可以直接使用 tcping.cn 的在线 DNS 查询工具,支持 A、AAAA、CNAME、MX、TXT、NS 等记录类型的多地对比。

判读方式:

  • 全部地区都是新 IP → 已完全生效。
  • 部分地区新、部分地区旧 → 正在传播中,属正常现象,等 TTL 过期即可。
  • 超过 48 小时仍有大量地区是旧值 → 检查记录是否配置错误、是否存在冲突记录,或 NS 是否真的已切换。

2. 本地命令行验证

nslookup example.com 223.5.5.5

指定不同的公共 DNS(如 223.5.5.5114.114.114.1148.8.8.8)分别查询,可以绕开本地缓存,看某一家递归 DNS 是否已更新。

也可以直接查询权威服务器,确认记录本身改对了没有:

nslookup -type=ns example.com

3. 清理本地缓存再验证

如果只是自己本机没更新,清缓存即可:

  • Windows:ipconfig /flushdns
  • macOS:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
  • Chrome:地址栏访问 chrome://net-internals/#dns 点击 Clear host cache
  • 别忘了重启路由器,家用路由器的 DNS 缓存是最容易被忽略的一层

4. 确认新 IP 真的可用

解析生效不等于服务可用。切换后建议再用 多地 PingTcping 端口测试 确认新服务器在各地都能正常连通、端口开放,避免"解析切过去了,结果新机器某些地区访问不了"。

五、平滑切换 IP 的标准流程

服务器迁移、更换机房或接入 CDN 时,按这个流程可以把中断降到最低:

  1. 提前 24–48 小时降低 TTL:把待切换记录的 TTL 从 3600/86400 改为 600 或 300,等旧 TTL 完全过期。
  2. 新服务器先就绪:新机器部署完成、数据同步完毕、直接用 IP 访问验证正常。
  3. 保持旧服务器在线:切换后不要立刻关掉旧服务器,至少保留 48 小时——缓存未过期的用户仍会访问旧 IP,提前关机会造成这部分用户直接不可用。
  4. 修改解析记录,并用多地 DNS 查询工具持续观察传播进度。
  5. 观察两端流量:旧服务器流量降至接近零后,再下线。
  6. 切换完成后把 TTL 调回 3600,减少不必要的查询开销。

对邮件服务(MX 记录)尤其要注意第 3 步:邮件发送方的重试机制可能持续数天,旧服务器过早下线会造成邮件丢失或退信。

六、常见问题

Q:为什么我这里已经是新 IP,同事那边还是旧的?
你们用的递归 DNS 不同,各自缓存的过期时间也不同。这是完全正常的传播过程,等 TTL 过期后会自动一致。用多地 DNS 查询工具可以看到整体的传播进度。

Q:TTL 设成 60 秒是不是越快越好?
不建议长期这样设置。TTL 太短会让缓存几乎失效,每次访问都要重新查询权威服务器,增加解析延迟(每次多几十毫秒),也加重权威服务器负载。推荐做法是平时 600–3600,只在计划切换的窗口期临时降到 60–300。

Q:修改解析后多久能被搜索引擎发现?
搜索引擎爬虫同样遵循 DNS 缓存,通常在 TTL 过期后就会取到新 IP。只要网站内容和 URL 结构不变,单纯换 IP 对 SEO 没有负面影响,也不需要额外提交。

Q:换了 NS 服务器,48 小时了还没生效怎么办?
依次检查:① 域名注册商处的 NS 记录是否确实已改并保存成功;② 新的 DNS 服务商处是否已经把所有解析记录都添加完整(很多人只改了 NS,忘了在新平台加 A 记录);③ 域名是否处于 clientHold 等异常状态;④ 用 nslookup -type=ns 域名 直接查询,确认返回的是新 NS。

Q:CNAME 记录的生效时间和 A 记录一样吗?
基本一样,都取决于 TTL。但 CNAME 会多一层解析:用户先解析 CNAME 目标域名,再解析其 A 记录,所以最终生效还受目标域名自身 TTL 的影响。接入 CDN 时,CDN 厂商的 CNAME TTL 通常较短,切换会比较快。

Q:为什么清了缓存、换了 DNS,还是解析到旧 IP?
优先检查本机 hosts 文件——hosts 的优先级高于一切 DNS 查询,很多人在测试期间手动绑过 hosts 却忘了删掉。Windows 路径为 C:\Windows\System32\drivers\etc\hosts

七、小结

  • 改 A/CNAME 记录:生效时间 ≈ TTL,常见 10 分钟–1 小时。
  • 换 NS 服务器:需 24–48 小时,这是唯一真正"慢"的操作。
  • 提前降 TTL 是关键:切换前 1–2 天把 TTL 降到 600,能把切换窗口从一天压缩到十分钟。
  • 旧服务器至少多留 48 小时,避免缓存未过期的用户访问失败。
  • 验证要看多地,别只看自己电脑。

需要实测解析传播情况,可直接使用 tcping.cn 的多地 DNS 查询