摘要
今天有个兄弟公司咨询我有关迁移DNS的技术相关的事情,了解如何做准备,如何能稳妥的把DNS由第三方服务商迁移到自建的DNS上。最近可能一是由于大公司对DNS解析安全越来越重视,或者最近DNS攻击越来越严重,可能觉得自己维护DNS解析更有底气。但迁移DNS这件事,有时候会比较复杂,并且容易出错(更多的是不平滑,在迁移过程中网站访问有时好有时坏、有的地区好有的地区不好)。
由于域名解析是个从上到下的过程(DNS系统可以说是全球最庞大、最基础的“云”服务),不但要了解如何搭建DNS,还要和注册商打交交道,以及碰到问题时如何排查。尤其是当自己使用的ns名称不存在时,可能要创建NS的名字。
名词解释
通用的来讲DNS就是解析,但在DNS行业内,要用更细化的名字。在这里我解释的可能不太准确,但目的是用大家能理解的词简单解释一下,更细的请参阅技术书籍或手册:
注册局/域名注册管理机构
每个域名的tld由一家注册局来负责运营,如.com类域名由Verisign负责,.cn域名由CNNIC负责。注册局接收注册商的请求来管理domain、contact和host
注册商/域名注册服务机构
接收最终用户的请求,并向注册局注册和管理域名。我们注册域名,一直是向注册商注册,注册商有系统与注册局通信。
顶级域
域名是由右向左以“.”分割的符号,越往右级别越高。一个顶级域有相应的注册局来运营和管理。如cn就是一个顶级域。
后缀
一个顶级域,可能有多个域名后缀,一个域名后缀+一个个性字符,就能组成一个域名。如cn、com.cn、net.cn均是域名后缀。
域名
一组字符+域名后缀,组成一个域名。如codox.cn、codox.net、foo.com.cn、bar.org.cn等。
主机记录
域名之后,可以创建多个解析记录,可用于web站点等,如journal.codox.cn。又叫完全限定名(fully qualified domain name,FQDN)
hostObject/dns记录
域名(主域名,不是指主机记录)使用的NS,如codox.cn使用的是dns7.hichina.com和dns8.hichina.com
使用场景
对于有可能涉及到以下几种:
- 伪自建:不走寻常路,自己用的域名后缀比较奇特,注册后修改DNS为第三方/或以前的自建的解析服务器时时,报“DNS服务器不合法”之类错误
- 自建DNS,NS服务解析自己的域名:如自己的域名为codox.cn,使用的DNS为ns1.codox.cn/ns2.codox.cn
- 自建DNS,但有多个不同后缀的域名,使用同一组DNS
伪自建
有时候会碰到客户申请了域名foo.site域名做个人网站,使用第三方解析,如ns1.myns.com/ns2.myns.com。但在注册商处修改foo.site的DNS为ns1.myns.com/ns2.myns.com时报错,提示“DNS不合法”、"DNS不存在"之类的。com后缀的域名使用这组DNS没事,site域名就不行?为什么呢?
域名在使用某个DNS时,必须要通过注册商在注册局注册、必须要通过注册商在注册局注册、必须要通过注册商在注册局注册。如foo.site域名要使用ns1.myns.com这个DNS,必须要有注册商在site注册局注册一下ns1.myns.com这个DNS(注册时只需要填写这个ns1.myns.com名字即可,不需要额外信息)。只要有一个注册商在site注册局注册过后,以后任何*.site域名均可以使用ns1.myns.com这个ns了。你懂的,ns2.myns.com类似。
有的同学可能发现,这个ns(.com)的后缀和用这个ns的域名的后缀(.site)不同,这类情况在注册ns时不需要填写ns对应的服务器的ip,纯报备,所以部分注册商对这个流程进行了优化:当有人用这种跨后缀的ns时,如果域名所有的注册局不存在,就注册一下。
当然,为什么要注册,要走这个流程?反正ns1.myns.com这个NS也不会写入site的顶级域DNS系统,为何多此一举?我也觉得烦琐,多此一举,但这是域名注册系统的标准(EPP)规定的。
自建DNS
有的大公司,或有技术追求想自己搭建dns做自己域名的解析的,可能会有此需求。我们以我的域名来做例子:
- 域名:codox.cn,域名已经注册。
- 使用的DNS:ns1.codox.cn、ns2.codox.cn,尚未创建。
- DNS服务器2台,ip分别为:1.1.1.1、2.2.2.2。服务器已经购买。
创建hostObject
这是第一步:要向cn注册局注册ns1.codox.cn和ns2.codox.cn这两个DNS,并创建dns对应的ip。
如何创建?每家注册商的操作方式不同,以阿里云和godaddy为例子说明:
在阿里云创建hostObject
在阿里云创建hostObject,叫“域名服务器注册”。位置:登陆控制台后,在左侧点击“域名”打开域名列表,点击codox.cn域名后面的“管理”打开域名控制台(就是打开管理解析记录的那儿后,点击页面上方导航栏的“基本管理”)。在域名控制台,点击左侧的“DNS修改/创建”,右侧会看到有个“域名服务器注册/修改”的按钮,点进去后就有注册的位置了。以我的例子,要选择“解析国内英文域名”
在godaddy创建hostObject
在godaddy(中文界面)叫“创建主机名”,在控制面板点击域名进行域名详情的“设置”标签,下面有个“主机名”栏目,点击“管理”可看到已添加的hostObject,当然也可以创建。
修改DNS
兵分两路,创建dns的同时,可能要同步搭建dns服务器上的解析服务器软件,如bind。此处blabla相信老司机很熟悉了。
创建后,除了要添加www.codox.cn.、jounal.codox.cn.等解析记录外,一定要记得添加下面的几条记录,否则域名会不正常
codox.cn. IN NS ns1.codox.cn.
codox.cn. IN NS ns2.codox.cn.
ns1.codox.cn. IN A 1.1.1.1
ns2.codox.cn. IN A 2.2.2.2
添加完后,运行以下命令看这正常不:
dig codox.cn NS @1.1.1.1
dig codox.cn NS @2.2.2.2
dig ns1.codox.cn @1.1.1.1
dig ns2.codox.cn @1.1.1.1
dig ns1.codox.cn @2.2.2.2
dig ns2.codox.cn @2.2.2.2
dig othe.your.record.codox.cn @1.1.1.1
以上检查确认没问题后,就可以在注册商处修改域名的NS记录为ns1.codox.cn和ns2.codox.cn了。
注意:修改后,原来的dns服务器上的解析记录在48小时内不要删除,并且保持上面的解析记录正确。
自建DNS-共用
如果上面codox.cn使用了ns1/2.codox.cn这组dns后,我又注册了个codox.net域名,也要同样使用ns1/2.codox.cn,怎么办呢?要在.net注册局创建hostObject,因为只要我用了这组dns,别人的net域名肯定没用过,也肯定没人帮我创建过。所以我的codox.net域名使用这组dns,就要在.net的注册局创建这组dns(其实是报备吧)。但如何创建呢?分两种:
- 需要手工创建。对于需要手工创建的,由用codox.cn这个域名的账号登陆,管理codox.cn这个域名,按上述的“创建hostObject”的方式创建dns,并且用途要用于解析“.net域名”。
- 自动创建。对于有些注册商,你使用的这种交叉注册局的ns,如果在.net注册局不存在ns1.codox.cn,会自动创建。如godaddy。
其它问题
- 一个域名可以使用几个NS?
最多可以写13个ns,如google.com就用了13个ns名字。 - 一个ns可以使用多个ip吗?
可以,最多可以使用13个IP。并且可以添加ipv6地址。 - 我的自建dns工作正常,使用这个dns的域名的网站也能访问,但dig mydomain.com ns时,就是不返回ns记录,为什么?
你的域名在注册局的dns中,把域名正常授权给了您的自建dns。但你的自建dns中,mydomain.com NS记录没写。在dig或nslookup时,当从顶级域的dns中获取到mydomain.com NS ns.mydomain.com后,仍会去ns.mydomain.com上查询一次mydomain.com的NS记录,如果没写就返回空了。但一般www.mydomain.com的主机记录能正常使用,网站能正常访问。 - 什么样的hostObject注册时需要填写ip,什么样的不需要?
当dns名字的后缀,和将要使用这个ns的域名-的后缀,两个后缀归同一家注册局时,就必须要填写ip,且要这个域名的持有人才能注册。否则就不需要填写ip,任何注册商都可以。