改一条地址记录很容易,预测每个解析器何时停止使用旧应答却很难。生存时间(TTL)值随 DNS 响应传播,控制通常情况下的缓存新鲜度。在迁移那一刻降低 TTL,并不能改写更早被缓存下来的应答。
在事件前降低 TTL
如果既有记录是一天的 TTL,至少要在计划切换前一个旧 TTL 时就把它降低。这样在权威记录仍指向旧端点时,缓存有时间去取较短的值。确切间隔应写进变更计划,而不是在迁移中即兴执行。
单独记录权威服务器的应答。下面两条探针比较系统配置的解析器与公共递归解析器,并不天然属于权威查询:
dig +noall +answer www.example.test A
dig @1.1.1.1 +noall +answer www.example.test A
要取得权威证据,应向该区域实际的名称服务器发起非递归查询,并检查 AA 标志、状态、答案与权威部分。递归解析器的剩余 TTL 反映其当前缓存状态,不同解析器可以合理地不同。还应检查服务使用的 AAAA 与 CNAME 链,不能只检查 A。
让两侧都保持有效
切换期间,保持旧端点与新端点都能为预期主机名提供服务。TLS 名称、重定向与应用配置在两侧必须一致。权威记录改变后立刻移除旧端点,会给仍持有先前应答的客户端造成本可避免的停机。
否定应答也会被缓存。一个最近返回 NXDOMAIN 的名字,其出现可能很慢才可见,因为根据区域的权威数据,否定响应可能仍留在递归缓存里。
观察后恢复 TTL
一旦权威与具有代表性的递归应答都指向新端点,且旧缓存窗口已过,就恢复正常 TTL。在变更记录中保留旧值、新值、权威应答与回滚条件。
TTL 不是所有客户端统一的下线期限。解析器在解析失败时可能提供过期数据,长连接与应用缓存也可能超过 DNS 新鲜期。应观察旧端点流量并预留余量;把 DNS 改回去同样有缓存窗口。对否定应答,应检查由 SOA 决定的否定 TTL,不能假设新 A 记录的 TTL 适用。
来源
- RFC 1034 — Domain Names: Concepts and Facilities,缓存模型,已核验 2026-10-15。
- RFC 1035 — Domain Names: Implementation and Specification,TTL 字段,已核验 2026-10-15。
- RFC 2308 — Negative Caching of DNS Queries,否定缓存模型与保留的错误 TTL,已核验 2026-10-15。
- RFC 8767 — 提供过期数据,DNS 解析失败时提供过期应答,已核验 2026-10-15。
- BIND 9
dig手册,服务器选择与递归控制,已核验 2026-10-15。