先给结论:修改 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.5、114.114.114.114、8.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 真的可用
解析生效不等于服务可用。切换后建议再用 多地 Ping 或 Tcping 端口测试 确认新服务器在各地都能正常连通、端口开放,避免"解析切过去了,结果新机器某些地区访问不了"。
五、平滑切换 IP 的标准流程
服务器迁移、更换机房或接入 CDN 时,按这个流程可以把中断降到最低:
- 提前 24–48 小时降低 TTL:把待切换记录的 TTL 从 3600/86400 改为 600 或 300,等旧 TTL 完全过期。
- 新服务器先就绪:新机器部署完成、数据同步完毕、直接用 IP 访问验证正常。
- 保持旧服务器在线:切换后不要立刻关掉旧服务器,至少保留 48 小时——缓存未过期的用户仍会访问旧 IP,提前关机会造成这部分用户直接不可用。
- 修改解析记录,并用多地 DNS 查询工具持续观察传播进度。
- 观察两端流量:旧服务器流量降至接近零后,再下线。
- 切换完成后把 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 查询;