Skip to main content

零停机 DNS 迁移实战:TTL 策略、DNSSEC 与邮件记录切换检查表

September 18, 2026
给出一套可回滚的域名解析迁移流程:迁移前记录盘点与 TTL 降级、分阶段 NS 委派切换、DNSSEC 的 DS 与 DNSKEY 顺序陷阱、邮件记录同步、切换后的多点验证,以及触发回滚的判断条件。
零停机 DNS 迁移实战:TTL 策略、DNSSEC 与邮件记录切换检查表

更新日期:2026-09-18

DNS 迁移出问题,通常不是"把域名从 A 商搬到 B 商"这个动作本身有多难,而是栽在两件容易被忽略的事情上:旧解析区里有一条没人记得的记录,以及 DNSSEC 的 DS 与 DNSKEY 顺序被打乱。前者表现为某个子域或某一类邮件突然不通,排查方向容易跑偏;后者表现为整个域名在支持 DNSSEC 的递归解析器上直接 SERVFAIL——它比"解析到旧 IP"更糟,因为那是全量不可解析,而且不会随时间自愈,只会随着缓存扩散而扩大影响面。

本文面向正在维护生产环境的站长、运维与后端工程师,讨论把自己域名的权威 DNS 托管从一个服务商、注册商或旧面板迁到另一处的完整流程。重点是把"零停机"拆成可以计算、可以验证、可以回滚的步骤,而不是依赖"等两天就好"的经验主义。整个方案的核心只有两件事:TTL 数学,以及一份逐条核对过的记录清单;DNSSEC 被单独当作最高风险步骤处理。

适用前提是你有权修改注册商处的 NS 委派,也有权读写新旧两个权威区的记录。若只是改一条 A 记录指向,或把 DNS 换到同一服务商的另一套餐,流程会简单很多,但 TTL 与验证部分仍然适用。站内已讨论过缓存清理与解析排障,可先读 网站切换服务器IP,如何快速快速刷新DNS以获得测试?阿里云IPv6实践,从云服务到云安全 建立背景。

本文不承诺"几分钟生效",也不绑定任何服务商的界面按钮:等待时间由读者按旧 TTL 自行算出,验证一律用 digdelv 与多个公开解析器交叉确认。

先看结论

  • 迁移前先把旧区的完整记录导出两份(一份纯文本、一份可解析的 zone 文件),并对记录条数与记录类型集合做基线留档;差异比对以"条数与类型集合"为准,不以肉眼扫描为准。
  • TTL 必须在正式切换前至少提前一个旧 TTL 周期降下来,并且等待时间要用旧 TTL计算,不是用新 TTL 计算;降完 TTL 后要等旧值从所有递归缓存中过期,新值才真正生效。
  • 已启用 DNSSEC 的域名,不要"先切 NS 再处理 DS";正确顺序是先移除旧 DS(让父区回到未签名状态),再切 NS,再在新托管方开启签名,最后发布新 DS。
  • 切换当天只改一个东西:注册商的 NS 委派。新权威区必须在此之前就已建好、可被直接查询、且逐条核对过。
  • 邮件相关记录(MX、SPF、DKIM 选择器、DMARC)必须在新区就位并逐条验证后,才允许切 NS;CAA 记录缺失或错误会直接影响证书签发。
  • 切换后不要立刻删旧区;让旧权威区在观察窗口内保持"可查询但不再被引用"的状态,这是最快的回滚路径,也是 TTL 尾巴的兜底。
  • 回滚成本等于切换成本:改回 NS 之后,下游缓存里仍会残留新 NS 的 TTL 尾巴,所以回滚同样要按 TTL 预算时间,不能指望瞬时生效。
  • 任何一个"好像生效了"的判断,都必须由多个公开解析器加一次 dig +trace 交叉确认,而不是只查本机 dig 的结果。

适用环境与不适用场景

适用对象:使用主流权威 DNS 托管(自建 BIND、Knot DNS、PowerDNS,或云解析服务)的域名;注册商与 DNS 托管方分离或为同一家;已开通或准备开通 DNSSEC 的生产域名;有独立邮件收发需求的域名。

工具说明:文中 digdelv 来自 BIND 工具集,参数长期保持稳定;kdigdrill 可作为等价替代。整区导出方式随权威软件而异,AXFR 是否可用以对方策略与官方文档为准。

不适用场景:需要在一次变更中同时更换顶级域或注册商的域名(应拆成两次变更并间隔稳定期);只有单条记录变动的日常调整;父区不允许移除 DS 的受限 TLD 场景,这类域名须先确认注册商的 DNSSEC 策略,不能照搬本文顺序。

“零停机”的真实含义

一次 DNS 迁移改变的其实只是"谁是这个域名的权威服务器",也就是 NS 这一层。但解析路径上的每一段都在缓存:客户端的 stub resolver(操作系统、浏览器)、递归解析器(ISP、公共 DNS、企业内网 DNS),以及父区委派。递归解析器缓存的是"这个域名的 NS 是谁",缓存时长由 NS 记录的 TTL 决定。因此,"零停机"能承诺的事情要说清楚。

可以承诺的是:解析结果始终可达。 在切换窗口内,一部分递归解析器仍去旧权威,一部分已经去新权威;只要两个区的记录内容完全一致,两边返回同样的答案,用户就完全无感。这就是"双区并行"的全部根据——不是让缓存消失,而是让两条路径给出同样的答案。

无法承诺的是:所有人同一秒切到新权威。 这就是 TTL 尾巴:如果旧 NS 记录的 TTL 是 86400,那么在改完委派之后,最长可能有 86400 秒的下游缓存仍指向旧权威。旧权威必须在这整段时间内继续正常应答。这个尾巴也是回滚的物理依据:改回委派并不瞬时空。

为什么有人"秒切"、有人不切,至少叠加了五层原因:本地 stub 缓存、浏览器缓存、操作系统缓存、企业内网 DNS 的额外缓存层,以及部分递归解析器的内部策略(如最小 TTL 下限、提前刷新)。所以"我这边已经生效"不能证明"全网已生效",应同时查询本地解析器与多家公共解析器交叉对比,例如 dig @1.1.1.1dig @8.8.8.8,排查思路见 网站切换服务器IP,如何快速快速刷新DNS以获得测试?

判据很简单:切换窗口内,对同一批抽查域名,分别在旧权威与新权威上查询,答案必须逐字段一致,只允许 TTL 递减带来的差异。

迁移前盘点

迁移的第一个动作不是改任何东西,而是把"现状"变成一份可核对的文档。盘点顺序建议如下。

注册商与 DNS 托管方的职责边界。 注册商负责父区侧的 NS 委派、域名状态、到期与转移锁;DNS 托管方负责 zone 内的全部记录以及 DNSSEC 签名。两者可以是同一家,但职责不同:改委派在注册商侧,改记录在托管方侧。迁移前必须确认这两处的账号都能登录,因为切换窗口内需要同时操作它们。

账号访问与 2FA。 新旧两侧都要确认登录可用、2FA 设备在手、恢复码可用;如果是团队操作,确认没有只属于某一个人的账号导致无法交接。检查 API Token 的权限范围与有效期——不少自动化脚本用的是会过期的 Token,切换窗口恰好过期是常见的翻车点。

注册商锁与域名状态。 确认域名未到期、无欠费,确认 clientTransferProhibited 之类的状态不会阻碍 NS 修改(多数不会,但存在把"域名锁定"与"禁止改 NS"混为一谈的实现,以注册商文档为准)。若同时计划转移注册商,务必先完成 DNS 迁移并稳定观察一段时间,不要合并成一次操作。

导出完整 zone 并留档。 优先尝试从权威服务器直接拉取整区;若对方不允许,改用托管方控制台的导出功能,导出后核对条数。

# 1) 从权威服务器直接拉取整区(前提:该 NS 允许你的来源 IP 发起 AXFR)
dig @ns1.old-dns-provider.net yourdomain.cn AXFR +noall +answer > old-zone.axfr

# 2) 统计记录类型与条数,作为迁移基线
grep -v '^;' old-zone.axfr | awk 'NF>=5 {print $4}' | sort | uniq -c | sort -rn

# 3) 记录总条数
grep -vc '^;' old-zone.axfr

记录条数比对。 新区导入后的条数应不少于旧区,且记录类型集合一致。SOANS 通常由托管方自动生成,表现为"少一个 SOA、NS 可能多几个",这两个类型单独说明,不要判为缺失;反之新区多出大量记录多半是导入重复。

检查 DNSSEC 状态与 DS 归属。 DS 记录在父区(注册商或 TLD 侧),DNSKEY 在子区(当前 DNS 托管方)。两者要分别确认,并记录 DS 的 key tag、算法与摘要类型,因为回滚时必须按原值恢复。

# 父区侧:该域名是否已发布 DS
dig +short DS yourdomain.cn @a.dns.cn

# 子区侧:当前权威是否真的签了名
dig +short DNSKEY yourdomain.cn @ns1.old-dns-provider.net

# 记录 DS 的关键字段,回滚时需要按原值恢复
dig DS yourdomain.cn +noall +answer

第三方依赖盘点。 还要盘点那些"配置一次就忘"的依赖:搜索控制台与 SaaS 的所有权验证 TXT、CDN 要求的 CNAME、平台要求保留的子域等。把它们列成独立表格,标注"谁在用、删了会怎样、如何验证"。

TTL 策略与时间表

TTL 是整个迁移的时间基准。它既决定你什么时候可以安全切换,也决定回滚的最坏耗时,所以必须在动手前先算清楚。

提前降 TTL。 至少提前一个旧 TTL 周期把待迁移记录的 TTL 降下来,例如从 86400 降到 300。注意计算起点是"降 TTL 这个动作生效之后",而"生效"本身也要等旧值过期,所以实际预留时间应当是一个旧 TTL 加上若干小时余量。NS 委派所引用的 glue/NS 记录 TTL 在部分注册商侧由系统决定、不可修改,这类记录要按注册商策略预留更长窗口。

等待时间用旧 TTL 算,不是用新 TTL 算。 这是一个高频错误:把 TTL 降到 300 之后立刻认为"5 分钟后就全网生效"。真实情况是,在此之前已经缓存了 86400 的解析器,仍会持有旧值最长 86400 秒。因此切换窗口的长度必须由旧 TTL 决定。反过来说,把 TTL 提前降下来的意义,是让切换之后的调整与回滚变快,而不是让切换本身瞬间完成。

不要把 TTL 降到 0 或极小值。 一方面部分解析器有最小 TTL 下限,会把极小值抬高,反而让你误判"已经生效";另一方面 TTL 过小会显著抬高权威服务器的查询量,在迁移窗口这种本来就有额外流量的时刻更不值得。300 秒量级通常够用。

哪些记录不能随手降 TTL。 MX 与邮件相关记录降 TTL,意味着窗口内有更多解析器会重新查询,如果新旧 MX 集合不一致,丢信概率随之上升;CAA 记录降 TTL 会让证书签发在切换期间落到不同的 CA 允许列表上;第三方所有权验证类 TXT 变动频繁容易触发对方复查;父区的 NS 委派记录 TTL 通常你改不了,不要假设能改。对这些记录,宁可按更长的窗口准备。

稳定后恢复 TTL。 观察满一个原 TTL 窗口、确认解析与邮件均无异常后,把 TTL 恢复到稳态值。把"恢复 TTL"当成一次独立变更,再观察一轮,不要与切换动作混在一起。

下面这张表可以直接抄进变更单,时点以 T0 为切换时刻。

时点动作完成判据失败时怎么办
T-7导出旧区、核对记录条数与类型集合、记录 TTL 基线;把待迁移记录 TTL 降到 300 量级导出条数与控制台一致;dig 抽查 TTL 已是新值导出不完整就先修导出方式,不进入下一步
T-3在新托管方建区并导入记录(此时不动注册商);做规范化 diff 与逐条抽查条数与类型集合一致;对新区权威的 dig 全部能答差异未清零就继续补,不推进切换
T-1邮件与 DNSSEC 专项检查;保存一份当前 zone 快照作为回滚基线MX/SPF/DKIM/DMARC 在新权威可查且值一致;DS 现状(key tag、算法、摘要)已记录邮件记录缺失或 DS 信息不明时延期,不带病切换
T0移除旧 DS(若已启用 DNSSEC)→ 在注册商处修改 NS 委派 → 进入观察新权威 dig NS 正常;未启用 DNSSEC 时公共解析器返回正常答案出现跨解析器 SERVFAIL 立即按回滚步骤改回 NS
T+1开启新托管方 DNSSEC 签名并验证 DNSKEY,再发布新 DSdig +dnssec 应答含 RRSIG;delv 验证通过签名或 DS 有问题就先撤下 DS,回到未签名状态
T+7全量交叉验证、恢复 TTL、决定是否下线旧区多解析器答案一致;邮件双向通;TTL 已恢复稳态一律保留旧区,不做删除

记录清单与差异比对

差异比对的成败取决于清单是否完整。下面按记录类型逐项说明迁移时要看什么。

  • A / AAAA:主机记录。注意同名 A 与 AAAA 并存时的双栈行为,检查是否有历史遗留的旧 IP 仍被子域引用。多值记录的返回顺序不构成可用性保证。
  • CNAME:注意根域不能是 CNAME 的规则,以及指向第三方 CDN 的 CNAME 链在迁移后是否仍然有效;链路上任何一环没配好都会导致解析失败。
  • MX:优先级数值必须与旧区完全一致(优先级变化会改变投递路径),确认 MX 指向的主机名在新区有对应的 A/AAAA 或 CNAME。
  • TXT / SPF:只应有一条包含 v=spf1 的 TXT 记录,多条并存会带来 PermError 风险;确认 include:ip4:ip6: 的目标未变。
  • DKIM:选择器记录(形如 <selector>._domainkey)经常多条并存,例如同时使用多个邮件发送服务,必须逐条导出,不要只导一条就以为完成。
  • DMARC_dmarc 下的 TXT,核对 psppctruaruf;聚合报告地址写错会导致监控静默失效。
  • CAA:确认 issueissuewildiodef。这是最容易漏导的一类,且缺失往往是静默的:可能表现为签发被拒,也可能表现为限制意外放宽。
  • SRV:服务发现类记录,目标、端口、优先级、权重都不能改。
  • NS 与 glue:glue(粘合记录)只在 NS 名字位于被委派域内部时才需要,通常由注册商或父区维护,不在你可自由编辑的区内。这是最容易被误判为"丢记录"的一类,要单独标注归属。
  • 验证型 TXT:各种所有权与校验记录,必须全量导出,并在切换后逐个平台确认状态。
  • 通配符记录* 记录会掩盖漏配的子域,造成"看起来正常但流量发到错误目标"的假象。迁移时把通配符的覆盖范围列出来,逐个子域对照。

全量导出之后,用规范化文本做一次真正的 diff,而不是直接比对两个 zone 文件——后者会被 TTL 差异、大小写、注释行和 SOA 序列号淹没。

# 把两个导出规范化成 "name type rdata" 的排序文本再比对
norm() {
  grep -v '^;' "$1" | awk 'NF>=5 {print tolower($1), $4, tolower($5" "$6" "$7)}' | sort -u
}
norm old-zone.axfr > old.norm
norm new-zone.axfr > new.norm

# 只在旧区出现的记录:迁移漏项,逐条处理
comm -23 old.norm new.norm

# 只在新区出现的记录:新增或导入错误,需要确认来源
comm -13 old.norm new.norm

对于关键名字,还要绕开一切缓存,直接向新权威服务器抽查:

NEW_NS=$(dig +short NS yourdomain.cn @ns1.new-dns-provider.net | head -n1)
for n in yourdomain.cn www.yourdomain.cn mail.yourdomain.cn _dmarc.yourdomain.cn; do
  echo "== $n"
  dig +short A   "$n" @"$NEW_NS"
  dig +short MX  "$n" @"$NEW_NS"
  dig +short TXT "$n" @"$NEW_NS"
done

分阶段切换

阶段一:在新托管方建区。 创建 zone 并导入记录,此阶段完全不接触注册商,对线上零影响。导入后立刻做规范化 diff 与抽查。特别注意默认 TTL:不少托管方会用自带默认值覆盖记录 TTL,需要按类型逐项检查。

阶段二:双跑与抽查。 此时新权威区已能被直接查询,但没有任何下游解析器会主动来找它——这是一次零成本、零风险的预演,可提前几天开始并接入自动化巡检。判据是对全部常用名字,新旧两侧的应答(除 TTL 外)逐字段一致。这一步发现的问题,修复成本远低于切换之后。

阶段三:修改 NS 委派。 到注册商处把 NS 从旧集合改成新集合,一次性改完整个集合,不要分两批。改完立刻从父区侧确认:

# 从父区看委派是否已更新(绕开递归缓存)
dig +trace NS yourdomain.cn

# 直接问 TLD 权威服务器(按实际 TLD 替换服务器名)
dig NS yourdomain.cn @a.dns.cn

要区分"父区已更新"和"递归缓存已过期"这两件事:前者通常很快,后者要等 NS 记录的 TTL。递归解析器仍返回旧 NS 属于预期行为,不需要处理,也不应该反复刷新来"催"它。

阶段四:观察。 观察窗口至少覆盖一个原 TTL(以切换前 NS 记录的 TTL 为准),对象包括解析成功率、邮件收发、证书签发,以及监控中任何与域名相关的告警。

阶段五:清理。 观察期满、TTL 恢复、跨解析器一致之后,才考虑注销旧托管区或把旧区改成只读。不要立即删除旧区:删除会让仍持有旧 NS 缓存的解析器直接无应答,把平滑迁移变成区域性解析中断。

旧区在窗口内保持"权威但不变"。 不要为了"保持同步"而在旧区继续修改记录——双写会引入两个真相源,最坏的情况是回滚时回滚到一个已经漂移的版本。窗口内所有记录变更只在新区做,旧区冻结。

切换方式的选择可以用下表判断:

切换方式具体做法优点风险适用场景
一次性改 NST0 直接把委派指向新权威步骤少、窗口短没有双跑验证,漏记录会直接暴露记录极少、无邮件、无 DNSSEC 的小站
双区并行后改 NS(本文推荐)先建新区并双跑核对,再改委派差异可在切换前清零;回滚只需改回 NS窗口内需要维护两个区,人工成本略高生产域名、有邮件与 DNSSEC
分子域逐步迁移先把部分子域的权威迁走爆炸半径小依赖子域委派,且并非所有托管方都支持;管理复杂度高大型区、可拆分委派的场景

最后是窗口选择:避开邮件投递高峰、批量任务、证书到期日与营销活动;确认回滚执行人在线、变更单已审批。

DNSSEC 顺序陷阱

链条是怎么形成的。 父区(TLD 或注册商侧)持有 DS 记录,DS 里是对子区某个 DNSKEY 的摘要;子区用对应私钥对记录签名,生成 RRSIG;支持 DNSSEC 的递归解析器从根开始逐级验证,直到子区。任何一环对不上,解析器返回的是 SERVFAIL——不是 NXDOMAIN,而是"无法验证"。这解释了为什么 DNSSEC 故障的表现常常是整域不可用,而不是某个名字不可用。

为什么带着 DNSSEC 切 NS 会 SERVFAIL。 旧 DS 还挂在父区,而权威已经换成了新托管方。如果新托管方还没签名,或者使用的是一对全新密钥,那么 DNSKEY 与旧 DS 就对不上,验证链断裂。此时会出现一个非常具有迷惑性的现象:支持 DNSSEC 的解析器全部拒绝答案,而不做 DNSSEC 验证的解析器、以及直接查权威的 dig 仍然能拿到 A 记录。于是"我这边能打开、客户全打不开"就出现了。

正确顺序。

  1. 确认当前是否真的启用了 DNSSEC(dig DS),记录 DS 的 key tag、算法与摘要类型;
  2. 在父区移除旧 DS,让域名回到未签名状态,并等待该变更在父区可见(父区 TTL 通常由 TLD 控制,不能假设即时);
  3. 切换 NS 委派到新托管方;
  4. 在新托管方开启 DNSSEC 签名,确认 DNSKEY 已发布、应答中已出现 RRSIG;
  5. 从新托管方获取新的 DS(key tag、算法、摘要),发布到父区;
  6. 用验证型解析器确认整条链验证通过。

验证命令与判据。

# 1) 父区是否还有 DS(按顺序执行的第 2 步之后,这里应为空)
dig +short DS yourdomain.cn

# 2) 子区是否已签名:DNSKEY 存在且应答包含 RRSIG
dig +dnssec DNSKEY yourdomain.cn @ns1.new-dns-provider.net
dig +dnssec A www.yourdomain.cn @ns1.new-dns-provider.net

# 3) 用验证型解析器判断整条链是否可信
delv @1.1.1.1 www.yourdomain.cn A
delv @8.8.8.8 yourdomain.cn MX

delv 输出为 fully validated(不同版本措辞略有差异,以官方文档为准)表示验证通过;出现 resolution failedno valid signature foundinsecurity proof failed 之类信息,说明链条有问题。此时不要继续推进,先撤下 DS 回到未签名状态,让解析先恢复正常,再重新排查。

两个细节。 其一,DS 的摘要类型或算法与新托管方 DNSKEY 不一致时,要从托管方导出 DS 或按 key tag、算法、摘要类型生成,不要凭记忆填写。其二,"在新托管方开启 DNSSEC"只发布了 DNSKEY,父区 DS 不发布,验证型解析器依然会认为链条不完整。

先恢复解析,再修链条。 撤下父区 DS 后,域名回到"未签名"状态,验证型解析器将其视为不安全但可解析,业务立即恢复。这是 DNSSEC 故障的第一处置动作,也是回滚方式——撤下父区 DS 比删除子区 DNSKEY 更有效,因为断链点在父区。

邮件记录同步

邮件是 DNS 迁移里最不容错的部分,因为它没有"缓存宽容期":解析器一旦拿到新权威却查不到 MX,可能退回 A 记录投递甚至直接退信,而对端 MTA 会记住这次失败并延迟重试,影响面会持续到下一次重试周期。

MX、SPF、DKIM 选择器、DMARC 四类记录必须在新权威区全部就位并逐条验证后,才允许改 NS 委派,顺序不能颠倒。

  • SPF:只保留一条 v=spf1 TXT,确认 include:ip4:ip6:-all~all 的具体值与旧区一致。SPF 失败通常表现为对方拒收或进垃圾箱,而不是硬退信,因此更隐蔽。规范见 RFC 7208。
  • DKIM:按选择器逐条导出,多条并存时全部迁移,迁移后从新权威直接查询并与旧值逐字符比对。规范见 RFC 6376。
  • DMARC:核对 psppctruaruf。如果策略是 p=reject,任何记录缺失都可能让合法邮件被直接拒绝;rua 写错则会让聚合报告静默中断。规范见 RFC 7489。
  • CAA 与证书签发:CAA 缺失通常等同于"任意 CA 可签发",看似无害,但如果原本用 CAA 锁定了特定 CA,漏导意味着安全策略静默失效;反之,如果新环境需要另一家 CA 而 CAA 里没有放行,证书续期会失败。短周期证书会让这类问题暴露得更快,可参考站内 Let’s Encrypt 160 小时与 IP 地址证书实战:Certbot 自动续期和监控

切换前的对比建议直接跑一遍:

NEW_NS=$(dig +short NS yourdomain.cn @ns1.new-dns-provider.net | head -n1)
# 邮件相关记录在新旧两侧必须一致(除 TTL 递减外)
for q in MX TXT CAA; do
  echo "== $q =="
  diff <(dig +short "$q" yourdomain.cn @ns1.old-dns-provider.net | sort) \
       <(dig +short "$q" yourdomain.cn @"$NEW_NS" | sort) && echo OK
done
dig +short TXT _dmarc.yourdomain.cn @"$NEW_NS"
dig +short TXT default._domainkey.yourdomain.cn @"$NEW_NS"

切换后的收发测试。 入站方面,从多个不同域的邮箱向本域多个收件人发信,确认到达且未被拒收;出站方面,向会做严格校验的收件方发信,检查信头中的 SPF、DKIM、DMARC 结果。DNS 记录只是被动数据,真正的判定在收件方,因此必须做端到端测试,而不是只看记录能否查到。

切换后验证

验证的目标不是"确认能打开",而是确认解析路径、记录内容、安全链条三条线都正确。

委派路径。 从根开始完整走一遍,确认每一级返回的都是预期对象:

dig +trace www.yourdomain.cn A
dig +trace MX yourdomain.cn
# 关注:TLD 返回的 NS 集合是否为新的;最后一级权威是否为新的 NS 名字

多解析器交叉查询。 至少覆盖本地解析器、两家以上公共解析器与公司内网解析器(如有)。判据是答案集合一致;不一致时看 dig 输出中 TTL 剩余值是否递减——递减说明只是缓存,等待即可。排查思路见 网站切换服务器IP,如何快速快速刷新DNS以获得测试?

记录一致性巡检。 用前面定义的 norm 函数把旧区与新区快照再 diff 一次,此时应只剩预期差异(SOA、NS 集合),其余差异都要在观察期内解决。

DNSSEC 验证。delv 对若干名字抽样验证;没有 delv 时,可用 dig +dnssec 观察应答是否带 ad 标志(前提是所用解析器开启了验证)。对已发布 DS 的域名,务必确认验证结果为可信。

邮件端到端。 入站、出站、"本域发给本域"(会走外部路径回环)各测一轮;确认 DMARC 聚合报告仍能投递到 rua 地址。

证书。 切换窗口内不要安排大规模的批量签发或续期任务;切换后主动触发一次签发,验证 CAA 与域名校验路径不受影响。涉及 IPv6 与双栈的校验路径可参考 阿里云IPv6实践,从云服务到云安全使用SLB+DNS轻松实现网站的IPV6双栈兼容

监控。 用多地域外部探针做解析与访问探测,不要只依赖本机 dig;把这次权威更换写入变更日志。

回滚条件与时间窗

回滚的价值完全取决于它是否被提前定义。临场判断"要不要回滚"通常会导致窗口末期反复横跳,比不回滚更糟。

提前写下触发条件,例如:

  • 切换后出现持续且跨多个解析器的 SERVFAIL,且在确认父区 DS 已移除后仍不恢复;
  • 关键业务域名的解析失败率超过迁移前基线,且数分钟内不回落;
  • 邮件出现硬退信或大面积延迟,且确认新区 MX、SPF、DKIM、DMARC 已就位但问题不消失;
  • 证书签发连续失败,且确认与 CAA 相关。

回滚动作。 核心就是把注册商处的 NS 委派改回旧集合。因为旧区在整个观察窗口内保持可查询且未被修改,改回即恢复。如果 DNSSEC 已经按新顺序启用,回滚需要区分两个分支:回滚到"旧区仍然签名",则把父区 DS 恢复为旧值;回滚到"未签名状态",则撤下父区 DS。这两种分支的动作必须在变更前就写好,不要临场决定。

回滚的 TTL 成本。 改回 NS 之后,已经拿到新 NS 的解析器仍会按新 NS 的 TTL 去访问新权威,最长持续一个新 NS TTL,因此回滚不是瞬时生效。好消息是,切换窗口本身就处在 TTL 已经降过的时期,最坏情况已经被压缩过一次。

避免两个区漂移。 观察期内只在新区改记录,旧区冻结。若确实必须在旧区改动,正确做法是先回滚、回到单区状态再改,改完重新评估是否继续迁移,不要在双区状态下双写。

时间窗约定。 在变更单写明"最晚回滚时刻",超过该时刻就只在新区修复、不再回滚。窗口长度建议覆盖一个原 NS TTL,外加一次完整的邮件收发测试。

检查清单

  • 已确认注册商侧与 DNS 托管侧账号均可登录,2FA 可用,API Token 权限与有效期已核对
  • 已确认域名未到期、无欠费,注册商锁定状态不阻碍 NS 修改
  • 已导出完整旧区(纯文本与 zone 文件各一份),记录条数与类型集合已留档
  • 已列出 A / AAAA / CNAME / MX / TXT / SPF / DKIM / DMARC / CAA / SRV / NS / glue 全量清单
  • 已确认通配符记录及其覆盖范围,并逐个子域对照过
  • 已在切换前一个旧 TTL 周期把待迁移记录 TTL 降到 300 量级,并按旧 TTL 计算了等待时间
  • 已确认哪些记录的 TTL 不可修改(父区 NS、glue),并按注册商策略预留了窗口
  • 新区已建好、导入完成、规范化 diff 差异归零、关键名字抽查应答一致
  • 已记录当前 DNSSEC 状态:父区 DS(key tag、算法、摘要类型)与子区 DNSKEY
  • 已按"移除旧 DS → 切 NS → 新托管方签名 → 发布新 DS"的顺序执行,并逐级验证
  • 邮件记录(MX、SPF、DKIM、DMARC)在新旧两侧逐条一致,端到端收发测试通过
  • CAA 记录已核对,证书签发路径已验证
  • 已用 dig +trace 与多个公共解析器交叉验证委派与应答
  • 已用 delv 或验证型解析器确认 DNSSEC 链条可信
  • 旧区在观察窗口内保持可查询且未被修改
  • 回滚触发条件、回滚命令、最晚回滚时刻已写入变更单,回滚执行人在线

官方资料与继续阅读

外部官方资料:

站内相关文章: