TTL 到底在管什么
TTL 是 DNS 记录里的缓存有效期(秒),告诉递归服务器和客户端「这条答案可以留多久」。TTL 小则变更生效快、查询压力大;TTL 大则解析压力小、但改记录后旧值会在各级缓存里滞留很久。所有变更类故障(迁移、切流量、切 CDN)的时间窗口说到底就是由 TTL 决定的。
基本信息
| 字段范围 | 32 位整数,但按 RFC 2181 超过 2^31-1 的值一律按 0 处理 |
|---|---|
| 谁在缓存 | 递归器、操作系统、浏览器、CDN、运营商缓存层层叠加 |
| 负缓存 | NXDOMAIN/NODATA 的缓存时长取 SOA 的 minimum 值,不看记录 TTL |
| 实际生效值 | 以权威返回的 TTL 为准,部分缓存设备会强设下限或上限 |
典型使用场景
- 准备迁移机房或切 CDN:提前把 TTL 降小,缩短回退窗口
- 做 DNS 故障转移:TTL 越小切换越快,但解析量与抖动也随之上升
- 排查「改了记录为什么不生效」:先判断是 TTL 未过期,还是新记录本身没生效
- 配置验证类记录(TXT、CAA):无需频繁变更,用常规 TTL 即可
常见取值参考
| 场景 | 建议 TTL | 理由 |
|---|---|---|
| 迁移或切换前 | 60-300 秒 | 让旧记录快速收敛,切换窗口短 |
| 稳定生产站点 | 3600 秒(1 小时) | 回源压力与灵活性平衡 |
| 核心 NS 记录 | 86400 秒(1 天) | 稳定优先,变更需极其谨慎 |
| CDN 动态加速 | 30-300 秒 | 兼顾命中率与回源控制 |
| DNS 故障转移 | 30-60 秒 | 健康检查切换速度依赖小 TTL |
| 静态验证 TXT | 3600 秒 | 验证类记录无需频繁变更 |
迁移操作节奏
迁移操作节奏
dig +short example.com A # 改前先看当前生效值与 TTL
dig @8.8.8.8 example.com A # 换公共递归看是否已收敛
dig @ns1.example.com example.com A +noall +answer # 直接问权威,确认源数据
# D-2 把 TTL 降到 300 → 改记录 → 观察 48 小时 → 确认无回退再调回 3600权威返回小 TTL 不代表客户端会照做:部分运营商缓存与本地 DNS 客户端会强设最小缓存时间(数十秒到几分钟),切流量要留出这段缓冲,别把窗口算得太紧。
把 TTL 设成 0 或 1 秒并不会让变更瞬时全局生效,反而会把查询压力全部压到权威服务器,容易触发限流甚至被判定为攻击流量。