查询 25 次,耗时 1.2334 秒

域名权威 DNS 无感迁移实战:从 TTL 规划、记录核对到 DNSSEC 安全切换

lv001

New member

lv001 Rep
0
0
0
Rep
0
lv001 Vouches
Vouches
0
1 MONTH
1 1 MONTH OF SERVICE
lv001 获得
0
0
0
获得
0
lv001 凭证
0
0
0
凭证
0
主题
11
点赞
0
HakB
1 月
在社区成长 1 月
LEVEL 1 1 XP
 
一、背景

更换 DNS 服务商看似只是修改域名的 NS 服务器,实际却可能造成网站间歇性无法访问、邮件退信、证书签发失败,甚至整个域名进入 SERVFAIL 状态。常见原因包括旧记录未完整复制、TTL 未提前降低、注册局侧 DS 记录未处理、IPv6 或邮件相关记录遗漏,以及新旧权威服务器在传播期间返回了不同答案。

本文给出一套可回滚、可验证的权威 DNS 迁移流程,适用于把域名从自建 BIND、云厂商 DNS 或其他托管平台迁移到新的权威 DNS 服务。所有示例均使用 example.com 和文档保留地址,不针对任何真实目标。

二、需要理解的原理

域名解析通常涉及浏览器或应用、操作系统缓存、递归解析器、根服务器、顶级域服务器和权威 DNS。修改注册商控制台中的 NS 后,注册局会更新顶级域中的委派信息,但互联网上已有缓存不会同时消失。

迁移期间可能同时存在两条查询路径:

1. 尚未刷新缓存的递归解析器继续访问旧权威 DNS;
2. 已刷新委派信息的递归解析器访问新权威 DNS。

因此,无感迁移的核心并不是等待所谓“全球生效”,而是确保旧、新两套权威服务器在过渡期内都能返回正确且尽量一致的结果。

TTL 只控制相应记录可被缓存的时间。降低 A 记录 TTL 不等于降低 NS 委派缓存时间;父区委派的缓存还受到顶级域返回的 NS TTL 影响。不同递归解析器也可能实施最小或最大缓存策略,所以不能把某个倒计时当作绝对切换时间。

三、前置条件

开始前应准备:

1. 域名注册商或注册局管理权限,可修改 NS 和 DNSSEC DS 记录;
2. 旧 DNS 区域的完整记录清单;
3. 新 DNS 服务已创建对应区域,但尚未急于切换 NS;
4. 一台安装 dig 的 Linux、macOS 或 WSL 主机;
5. 网站、API、邮件和证书签发相关服务的负责人联系方式;
6. 一份明确的回滚方案,以及旧 DNS 至少继续运行 48~72 小时的条件。

Debian/Ubuntu 可安装查询工具:

sudo apt update
sudo apt install dnsutils

RHEL、Rocky Linux 或 AlmaLinux 可使用:

sudo dnf install bind-utils

四、迁移前盘点记录

不要只复制网站的 A 记录。至少检查以下类型:

A、AAAA:IPv4 和 IPv6 地址;
CNAME:别名和第三方服务验证;
MX:邮件服务器;
TXT:SPF、域名验证及其他业务配置;
DKIM:通常位于 selector._domainkey.example.com;
DMARC:位于 _dmarc.example.com;
CAA:限制哪些证书机构可以签发证书;
SRV:即时通信、办公或其他服务发现;
NS:子域委派;
DS:子域 DNSSEC 委派;
PTR:通常不在域名正向区域中,而由 IP 地址提供商维护,迁移时仍应确认其不受影响。

如果旧服务器允许 AXFR,可在已授权的管理环境中导出区域:

dig @192.0.2.53 example.com AXFR

多数托管 DNS 默认禁止 AXFR,这是正常的安全设置。此时应使用服务商导出功能或 API 获取记录,不应尝试绕过访问控制。

建议把结果整理成表格,记录主机名、类型、值、TTL、用途和负责人。特别注意根域 CNAME:标准 DNS 规则下,区域顶点通常还要同时存在 SOA、NS 等记录,不能直接配置普通 CNAME。有些平台提供 ALIAS、ANAME 或 CNAME Flattening,但这是平台能力,迁移时需要确认新服务商是否支持以及行为是否一致。

五、提前调整 TTL

计划切换前 24~48 小时,将关键业务记录 TTL 从较长时间降低到 300 秒左右,例如:

example.com. 300 IN A 192.0.2.10
www.example.com. 300 IN CNAME example.com.
api.example.com. 300 IN A 192.0.2.20

不建议长期使用极低 TTL。过低 TTL 会增加权威 DNS 查询量,也不能强制所有递归解析器严格按数值刷新。迁移稳定后,可根据变更频率恢复到 1800、3600 或更合适的值。

TTL 必须提前降低。如果原 TTL 是 86400 秒,在切换前几分钟才改成 300 秒,先前缓存的记录仍可能继续保存接近一天。

六、在新 DNS 中建立并验证区域

将盘点出的记录导入新平台,确认记录名没有被控制台重复追加域名。例如某些平台要求填写“www”,另一些导入格式要求填写“www.example.com.”。末尾圆点表示绝对域名,遗漏或误加都可能产生错误名称。

在正式修改 NS 前,可以直接询问新权威服务器:

dig @ns1.new-dns.example example.com A +noall +answer
dig @ns1.new-dns.example www.example.com A +noall +answer
dig @ns1.new-dns.example example.com MX +noall +answer
dig @ns1.new-dns.example example.com TXT +noall +answer
dig @ns1.new-dns.example _dmarc.example.com TXT +noall +answer
dig @ns1.new-dns.example example.com CAA +noall +answer

同时检查 SOA 和权威标志:

dig @ns1.new-dns.example example.com SOA +norecurse
dig @ns2.new-dns.example example.com SOA +norecurse

响应头中应能看到 aa,即 Authoritative Answer。所有新权威节点应返回相同业务记录。SOA 序列号的具体格式取决于服务商,不必强求使用日期格式,但应确认区域确实已加载。

可将旧、新答案分别保存后比较:

dig @ns1.old-dns.example example.com ANY +noall +answer > old.txt
dig @ns1.new-dns.example example.com ANY +noall +answer > new.txt
diff -u old.txt new.txt

需要说明的是,ANY 查询经常被限流、拒绝或返回不完整结果,不能代替逐类型核对。更可靠的做法是对已知记录清单逐项查询。

七、重点处理 DNSSEC

DNSSEC 是迁移中最容易导致全域 SERVFAIL 的环节。验证链通常由父区 DS 指向子区 DNSKEY。如果注册局仍保留旧服务商的 DS,而新权威 DNS 使用了另一套密钥,支持 DNSSEC 验证的递归解析器会认为响应不可信。

先检查当前状态:

dig example.com DS +short
dig example.com DNSKEY +dnssec
dig example.com A +dnssec

迁移方式取决于新旧服务商是否支持安全的密钥交接:

方案一:支持 DNSSEC 密钥迁移或双签名。按照服务商文档先发布新密钥、等待缓存更新,再更新父区 DS。这种方式可以保持验证链连续,但操作要求较高。

方案二:普通托管平台之间迁移。通常应先在注册商处删除旧 DS,等待父区 DS 缓存充分过期并确认查询不到 DS,再切换 NS;新区域稳定后开启新服务商 DNSSEC,并把新 DS 添加到注册商。此方案中间会暂时失去 DNSSEC 保护,但比留下错误 DS 导致解析失败更安全。

不要只在旧 DNS 控制台点击“关闭 DNSSEC”。真正决定父子信任关系的是注册局中的 DS。删除或添加 DS 后都要用外部查询确认,不能仅相信控制台状态。

八、正式切换 NS

在注册商处把域名的权威服务器改为新服务商提供的完整 NS 集合。不要混用旧、新服务商的 NS,除非双方明确配置为同一 DNS 区域并具备可靠同步机制。否则同一域名会随机返回不同答案。

切换后从父区视角检查委派:

dig example.com NS +trace

也可以直接查询常用公共递归解析器,但应把它们仅作为观测点,而不是权威依据:

dig @1.1.1.1 example.com A
dig @8.8.8.8 example.com A
dig @9.9.9.9 example.com A

检查网站时可绕过本地 DNS,仅验证指定 IP 上的 HTTP 服务:

curl --resolve example.com:443:192.0.2.10 https://example.com/ -I

该命令会把 example.com 临时解析到示例 IP,同时保留正确的 HTTP Host 和 TLS SNI,适合在 DNS 正式切换前确认虚拟主机与证书配置。若目标使用 CDN 或多节点调度,固定单个地址可能与正常访问路径不同,测试结果需要结合架构判断。

九、切换后的监控与验收

至少持续观察以下指标:

1. 权威 DNS 的查询成功率、SERVFAIL 和 NXDOMAIN 数量;
2. 网站 5xx、连接超时和 TLS 错误;
3. 邮件投递、退信及 SPF、DKIM、DMARC 验证结果;
4. 自动证书续期任务是否正常;
5. API、Webhook、VPN、即时通信等子域业务;
6. IPv4 与 IPv6 是否都可访问。

可运行基础检查:

dig example.com A +short
dig example.com AAAA +short
dig example.com MX +short
dig _dmarc.example.com TXT +short
curl -4 -I https://example.com/
curl -6 -I https://example.com/
openssl s_client -connect example.com:443 -servername example.com </dev/null

如果存在 AAAA 记录但服务器、防火墙或负载均衡器并未正确提供 IPv6 服务,部分客户端会出现访问缓慢或失败。此时应修复 IPv6 链路,或在确认无 IPv6 服务需求后移除错误 AAAA,而不是只测试 IPv4 就宣布迁移完成。

十、回滚方法

出现大面积故障时,首先判断问题属于记录内容、新权威不可达、委派错误还是 DNSSEC 验证失败。

若新 DNS 记录错误,优先直接修正新区域,通常比再次修改 NS 更快。如果新服务商整体不可用或区域无法恢复,可把 NS 改回旧服务商。由于委派同样存在缓存,回滚不会瞬间覆盖所有递归解析器,因此旧、新两端都必须尽可能保持可用。

如果现象是部分网络正常、部分网络统一返回 SERVFAIL,应优先检查 DS、DNSKEY 和签名有效期。不要通过不断改 A 记录碰运气,因为验证失败发生在地址记录被客户端接受之前。

十一、风险与注意事项

1. 不要在切换完成后立即删除旧区域。建议至少保留 48~72 小时;高 TTL 或关键业务可保留更久。
2. 不要遗漏通配符记录,例如 *.example.com,但也不要误认为通配符能匹配所有层级或覆盖已经存在的名称。
3. CAA 配置错误可能阻止证书续期。切换后应主动测试 ACME 或查看证书平台日志。
4. MX 记录不能直接指向 CNAME,邮件主机还应有可解析的 A 或 AAAA 记录。
5. SPF TXT 记录不能简单拆成多个独立 SPF 策略。一个主机名存在多个 v=spf1 记录通常会产生 PermError。
6. CDN 的代理开关、健康检查、地理调度、加权记录和故障转移策略并不一定能通过普通区域文件导出,必须单独重建。
7. 自建权威 DNS 应至少部署在不同故障域,并开放 UDP/TCP 53。大型响应、DNSSEC 和区域传送可能使用 TCP,只开放 UDP 会造成隐蔽故障。

十二、常见问题

问题一:修改 NS 后多久生效?

没有适用于所有网络的固定时间。父区 NS TTL、递归缓存策略、旧委派缓存和客户端缓存都会影响观察结果。与其反复刷新页面,不如直接查询父区委派、新旧权威及多个递归解析器。

问题二:为什么本机正常,客户网络仍无法访问?

可能是客户使用的递归解析器仍缓存旧委派,也可能是 DNSSEC 验证策略、IPv6 路径或运营商缓存不同。应让对方提供实际解析结果、使用的 DNS 服务器和错误时间,而不是只记录“打不开”。

问题三:降低 TTL 能否让 NS 立即切换?

不能完全保证。区域内 A、AAAA、CNAME 等 TTL 与父区委派的 NS TTL 是不同层次。降低业务记录 TTL 有利于地址变更,但不能直接清除已有的父区委派缓存。

问题四:查询返回 NXDOMAIN 和 SERVFAIL 有什么区别?

NXDOMAIN 表示权威体系认为名称不存在;SERVFAIL 表示递归解析器无法完成解析,常见于 DNSSEC 验证失败、权威服务器不可达、超时或配置异常。排查方向不同,不能混为一谈。

问题五:迁移期间可以把旧、新 NS 一起填写吗?

一般不建议。若两套服务没有可靠的主从同步,它们会随机回答不同区域内容,引发间歇性故障。正确做法是先让新区域准备完毕,再整体替换委派,同时保持旧权威在缓存过渡期继续提供一致答案。

十三、总结

权威 DNS 迁移的关键不是“改完 NS 等生效”,而是建立一条可核对、可监控、可回滚的变更链:先盘点完整记录,提前降低业务 TTL,在新权威上逐项验证,单独设计 DNSSEC 交接,整体切换 NS,并让新旧系统在缓存过渡期同时保持正确响应。最后通过权威查询、递归查询、HTTP/TLS 测试、邮件验证和 IPv6 检查完成验收。

只要把 DNS 当作一项有状态、分层缓存且包含信任链的基础设施变更,而不是普通控制台操作,就能显著降低网站中断、邮件丢失和证书续期失败的概率。
 
顶部