How to migrate your own NS servers

缘起

我厂原来的权威 DNS 服务器放在阿里云上的(三个完全不同的节点每个节点一台),但现在这几个节点要撤了,所以这些个权威 DNS 服务器必须要要迁往别处了。

技术背景

DNS架构

DNS 的结构管理就像一个倒着的大树,上一级的权威服务器上可以把自己下一级的管理权通过 DNS 纪录里的 NS 纪录(NS 这里是 nameserver 的意思)指派给别的服务器(这个服务器就叫做“权威服务器”)

glue record

由于往往会把类似于 xxx.com 这种域的 NS 纪录指向 ns1.xxx.comns2.xxx.com 这种纪录,而这种纪录最终指向的 IP 地址,又是需要通过 ns1.xxx.comns2.xxx.com 这两台机器来解析,这样就陷入了死循环,为了避免这种问题的发生,.com 和 .net 域出了一种新的策略:所以成为 NS 纪录的域名(类似上面例子中的 ns1.xxx.comns2.xxx.com),必须先要注册到 Verisign 的库里,也就是说,需要先能在 Verisign 的这里 (点“Name Server”再输入查询)查的到的域名,才能作为某个域的 NS 纪录。Verisign 这个库里的这些纪录,就叫做“glue record”。

至于怎么修改 glue record 或者注册新的 glue record,理论上来讲,需要通过你自己域名的 registrar 的系统。

问题又来了,谁是你的域名的 registrar 呢?一般来讲,如果你没迁移过域名托管的话,那么你在哪里注册的域名,你的 registrar 就是谁,比如 GoDaddy。

这里顺便鄙视一下国内很多 registrar:维护 glue record 需要先续费 5 年,掉钱眼儿里去了吧!

实施步骤

情况说明

  • 我司使用的域有好多,但 NS 纪录都是指向的 ns1.xa.comns2.xa.comns3.xa.com
  • 由于 xa.com 这个域名的 registrar 在国内,需要续费 5 年才能使用 glue record 功能,所以果断另外启用 registrar 在国外的另外一个域名 xb.com 来做 glue record:ns1.xb.comns2.xb.comns3.xb.com。最后 NS 纪录也会用这三个域名

具体步骤

原理弄明白了,做起来就要简单有条理很多:

  1. 首先是先部署好新的 DNS 服务器(三台),并将域名:ns1.xb.comns2.xb.comns3.xb.com 分别指向新的 DNS 服务器
  2. 修改我司域所有 6 台权威服务器的 NS 纪录,加入三条:ns1.xb.comns2.xb.comns3.xb.com;同时在域 xb.com 的 registrar 的系统里加上新的 glue record:ns1.xb.comns2.xb.comns3.xb.com
  3. 等 DNS 解析记录收敛的差不多(客户端查 NS 纪录能出所有老的和新的 6 台 DNS 服务器);这时,在 Verisign 的库里 (点“Name Server”再输入查询)能查询到 ns1.xb.comns2.xb.comns3.xb.com
  4. 在 registrar (上级)的系统里修改我司域的 NameServer 由 ns1.xa.comns2.xa.comns3.xa.comns1.xb.comns2.xb.comns3.xb.com
  5. 等上级(registrar)里关于我司域的 NameServer 的纪录改为 ns1.xb.comns2.xb.comns3.xb.com 之后
  6. 修改我司域所有 6 台权威服务器上的 NS 纪录,删除掉 ns1.xa.comns2.xa.comns3.xa.com 三台,留下 ns1.xb.comns2.xb.comns3.xb.com 三台
  7. 在三台老 DNS 服务器的 query log,发现差不多没有请求过来以后,把服务停掉即可。

常见问题

  1. 千万不能直接在权威服务器上修改 ns1.xa.comns2.xa.comns3.xa.com 指向新 DNS 服务器
如果您觉得我的经验能够帮助到您,请不吝赏赐,非常感谢!