谈谈CloudXNS的DNS系统

今天CloudXNS做活动,发了个推广邮件。于是我把博客域名切换过去,并花点时间了解一下他们的DNS系统。这篇文章只谈及DNS系统自身的技术,没有涉及web管理系统、网站监控和加速、智能解析等其他内容。

免费DNS服务器共有4组,15台服务器(注意有2个IP重复出现),如下:

lv3ns1.ffdns.net. 2893 IN A 14.18.142.2
lv3ns1.ffdns.net. 2893 IN A 178.162.201.47
lv3ns1.ffdns.net. 2893 IN A 183.224.33.144
lv3ns1.ffdns.net. 2893 IN A 218.58.225.61
lv3ns2.ffdns.net. 2892 IN A 42.236.6.76
lv3ns2.ffdns.net. 2892 IN A 54.93.94.126
lv3ns2.ffdns.net. 2892 IN A 61.153.96.108
lv3ns2.ffdns.net. 2892 IN A 218.201.42.148
lv3ns2.ffdns.net. 2892 IN A 31.171.133.47
lv3ns3.ffdns.net. 2921 IN A 54.94.216.67
lv3ns3.ffdns.net. 2921 IN A 60.210.10.28
lv3ns3.ffdns.net. 2921 IN A 119.97.137.194
lv3ns3.ffdns.net. 2921 IN A 183.224.33.144
lv3ns4.ffdns.net. 2893 IN A 210.22.63.244
lv3ns4.ffdns.net. 2893 IN A 218.201.42.148
lv3ns4.ffdns.net. 2893 IN A 119.81.131.68
lv3ns4.ffdns.net. 2893 IN A 183.56.172.222

没有使用anycast进行部署。服务器的地理分布是:

(一)国内电信:

  • 中山电信:1台
  • 金华电信:1台
  • 武汉电信:1台
  • 佛山电信:1台

(二)国内联通:

  • 枣庄联通:1台
  • 湖南联通:1台
  • 河南联通:1台
  • 淄博联通:1台

(三)国内移动:

  • 云南移动:1台
  • 重庆移动:1台

(四)国外(含港澳):

  • 德国法兰克福:2台
  • 美国迈阿密:1台
  • 巴西圣保罗:1台
  • 香港:1台

分布还是蛮广泛的,不过缺乏教育网,北方电信也没有部署。

但是,过多的NS服务器并不是最佳实践,传统上一个DNS数据包512字节,IP多了会导致数据分包传输,影响性能。例如root NS server就是13个IP(当然每个IP后面都可能是一个anycast集群),理由见如下描述:

In the IP version 4 (IPv4) prevalent today, the DNS data that can fit inside a single packet is as small as 512 bytes (after subtracting all of the other protocol supporting information contained in packets). Each IPv4 address requires 32 bytes. Accordingly, the designers of DNS have chosen 13 as the number of root servers for IPv4, taking 416 bytes of a packet and leaving up to 96 bytes for other supporting data (and flexibility to add a few more DNS root servers in the future if needed).

除了NS数量外,我们再看一下NS服务器授权,存在不一致问题。看如下dig信息:

$ dig wind.postno.de @h.gtld-servers.net

; <<>> DiG 9.6.1-P2 <<>> wind.postno.de @h.gtld-servers.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1479
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;wind.postno.de. IN A

;; AUTHORITY SECTION:
wind.postno.de. 172800 IN NS lv3ns2.ffdns.net.
wind.postno.de. 172800 IN NS lv3ns4.ffdns.net.
wind.postno.de. 172800 IN NS lv3ns1.ffdns.net.
wind.postno.de. 172800 IN NS lv3ns3.ffdns.net.

;; ADDITIONAL SECTION:
lv3ns2.ffdns.net. 172800 IN A 42.236.6.76
lv3ns4.ffdns.net. 172800 IN A 210.22.63.244
lv3ns1.ffdns.net. 172800 IN A 14.18.142.2
lv3ns3.ffdns.net. 172800 IN A 119.97.137.194

;; Query time: 287 msec
;; SERVER: 192.54.112.30#53(192.54.112.30)
;; WHEN: Mon Jun 8 16:48:29 2015
;; MSG SIZE rcvd: 188

在上一级NS(com的权威NS服务器)处,对CloudXNS的4组名字服务器,只返回了4个IP(reference)。这个glue记录,跟名字服务器的权威记录,明显对不上(权威有15个IP,见前述内容)。当然,这不会有大的问题,但这种不一致性,会造成DNS解析量的不均衡。

还有一个问题,是有违协议的,说明如下。

我添加了一个域名:host.live.wind.postno.de。查询立刻生效,很赞,见如下dig:

$ dig host.live.wind.postno.de @lv3ns1.ffdns.net

; <<>> DiG 9.6.1-P2 <<>> host.live.wind.postno.de @lv3ns1.ffdns.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6361
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;host.live.wind.postno.de. IN A

;; ANSWER SECTION:
host.live.wind.postno.de. 600 IN A 127.0.0.1

;; AUTHORITY SECTION:
wind.postno.de. 3600 IN NS lv3ns4.ffdns.net.
wind.postno.de. 3600 IN NS lv3ns3.ffdns.net.
wind.postno.de. 3600 IN NS lv3ns2.ffdns.net.
wind.postno.de. 3600 IN NS lv3ns1.ffdns.net.

;; Query time: 44 msec
;; SERVER: 218.58.225.61#53(218.58.225.61)
;; WHEN: Mon Jun 8 17:09:09 2015
;; MSG SIZE rcvd: 150

我接着查询live.wind.postno.de,见如下dig:

$ dig live.wind.postno.de @lv3ns1.ffdns.net

; <<>> DiG 9.6.1-P2 <<>> live.wind.postno.de @lv3ns1.ffdns.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 11501
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;live.wind.postno.de. IN A

;; AUTHORITY SECTION:
wind.postno.de. 3600 IN SOA lv3ns1.ffdns.net. webmaster.ffdns.net. 2009092868 604800 3600 2419200 3600

;; Query time: 44 msec
;; SERVER: 218.58.225.61#53(218.58.225.61)
;; WHEN: Mon Jun 8 17:09:20 2015
;; MSG SIZE rcvd: 98

它返回的状态是:NXDOMAIN。这让我吃了一惊,状态应该是:NOERROR。因为这个domain的确存在,只是没有记录而已,是一个ENT(Empty Non-Terminal)类型的domain。

所以,这里的处理不符合DNS协议,有待改进。

总体上CloudXNS还是一个不错的系统,使用方便,解析速度快。我个人提些建议:

  • 增加教育网、北京电信的NS服务器
  • 减少NS服务器总体数量,或使用anycast部署
  • NS服务器在上一级授权的glue记录,与权威记录保持一致
  • NS服务器在协议兼容性上实现更好,否则会有各种隐患
  • 能否增加某pod的一键记录迁移,这对用户必然有好处

我个人好久没关注DNS技术和业界了。不过有更多家提供商出现,肯定是好事。多家竞争,改善质量和服务,受益的最终是用户。祝CloudXNS越做越好!

此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。