如何平滑切换权威 DNS 服务器
由于 DnsPod 专业版解析套餐过期了,两周前我把 hex.ac.cn 的权威 DNS 服务器从 DnsPod 切换到了华为云。恰好有朋友问如何在切换权威 DNS 服务器的时候对业务连续性影响更小,所以我用本次切换过程简单记录一下, 同时尽可能兼顾阿里云、腾讯云、万网等此类托管 DNS 和基于 BIND 的自建 DNS。
局限性:本文未涉及反向解析部分。
切换方案
1、了解当前 DNS 服务器现状,从现有 DNS 中导出解析记录。
2、在新 DNS 中导入解析纪录,保持和原 DNS 一致。
3、验证新 DNS 服务器是否可以正常解析。
4、切换 DNS:在域名注册商修改域 NS 记录。
过程记录
了解当前 DNS 服务器现状
首先域名了解当前域名 DNS 服务器的现状情况,包括这个域是否开启了 DNSSEC,在域中有哪些线路、记录、值,TTL 是多少等。
如果域名开启了 DNSSEC,那么在切换 DNS 服务器时,需要将域名关闭 DNSSEC。迁移过程中开启 DNSSEC 可能会导致用户无法解析域名,造成业务中断。我们可以先关闭(删除 DS 记录,关闭 DNSSEC),等待迁移完成之后再重新开启。
了解当前域的线路、记录、值、TTL 等信息,方便在切换 DNS 服务器时,在目标 DNS 服务器中导入对应信息。不同 DNS 厂商的实现不同,可能部分记录需要人工确认统计处理。
这里举个例子,我的邮箱有 DKIM 验证,需要在 DNS 上加 TXT 记录,华为云 DNS 的 TXT 记录最大只支持 255 个英文字符,过长的记录需要被切段,而 DNSPod 就没有这个问题。
如下表,原来是一段记录,切换之后需要切成两段,并用双引号包裹,空格分割。这俩只是写法不同,不影响业务。
DNSPod记录值:”v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAMIIBIjANBgkqhkiG9w0BAQEFAA…”
华为云记录值:”v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA…” “MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA…”
在切换过程中需要拉平老 DNS 和新 DNS 的记录,以防出现部分地区无法解析的情况。如果需要变更 DNS 记录(对增删改现有域名的解析),请在 DNS 切换前或者 DNS 完全切换后操作。有的 DNS 服务商(很少)不支持当 NS 不指向他们自己的 DNS 服务器时修改 DNS 记录。虽然你的 DNS 已经切走了,但是全球生效时间可能最多需要 48 小时,要避免新旧 DNS 解析记录不一致的情况。
在新 DNS 中导入记录
根据新 DNS 的规则,导入记录即可,至少保证线路和值一致。
老的 DNS 厂商可能会自动生成 SOA 记录或 NS 记录,如果新 DNS 是托管 DNS,则这类记录无需被导入。如果新 DNS 是自建 DNS,一般这类记录需要认为规划添加 NS 记录和 NS 对应的 A、AAAA 记录到新 DNS 服务器上。
需要额外注意的是,如果自建 DNS,在服务器上加的 NS 信息,后续需要向域名注册局“报备”,我会在修改域 NS 部分详细说明。
验证新的 DNS 服务器
在进行切换权威 DNS 前,需要对新 DNS 中的记录进行验证。通常使用 dig 命令验证即可。
如果你是托管 DNS,直接@托管 DNS 的 NS 即可,例如我的华为云。
1 | dig @ns1.huaweicloud-dns.net net.hex.ac.cn |
如果是自建 DNS,则需要@你的权威 DNS 服务器的 IP,例如:
1 | dig @180.76.76.92 www.baidu.com |
这是为了保证新 DNS 中的记录符合预期。以防切换时发现记录不对而变得更加不可控。
切换权威 DNS:在域名注册商修改域 NS 记录
之前所有的工作准备完毕后,就可以开始切换了。你需要到域名注册商修改域名的 DNS 服务器,
如果你是托管 DNS,可以直接修改域名 DNS,下面是阿里云的例子。
如果你是自建 DNS,除了修改域名 DNS 之外,还需要维护一下 Glue 记录。在一些域名注册商也被称为 DNS Host。
扩展阅读:什么是 Glue 记录?
Glue 记录了权威 DNS 域名和 IP 的对应关系,主要解决解析的循环依赖问题。
这里举个🌰,例如我有个域名
b.com
,其 NS 是a.b.com
。如果我想查询www.b.com
,按递归的查询过程,.com
告诉我们b.com
的 NS 是a.b.com
,那我需要a.b.com
的 IP 地址,我就需要继续查b.com
的权威在哪,然后.com
告诉我们 NS 是a.b.com
。。。整个过程就僵住了。
Glue 记录很好的解决了这个问题,他会以ADDITIONAL SECTION
的方式在你查询 NS 的时候,由上一级 DNS (.com
) 直接告诉你 NS (a.b.com
) 的 IP 地址,从而解决循环依赖问题。由于是上级 DNS 直接响应的 NS 和 IP 的对应关系,所以这个记录需要在注册局进行配置,你离域名注册局最近的关系,就是你买域名的服务商了。
在阿里云中,Glue 记录的添加方式如下图所示。这里需要填写和自建权威 DNS 一致的 NS 和 IP。
总结
DNS 服务器切换后,可能会有 24-48 小时的生效时间,此时间内尽量不要调整 DNS 记录,如必须要调整,新加的记录除了在新 DNS 上添加外,还需要到老 DNS 上写入对应的记录,否则仍然可能造成解析故障。
切换的 72 小时内应该多多关注域名解析的状态,及时发现解析故障。