DNSSEC是为解决DNS欺骗和缓存Wu染而设计的一种安全机制,英文名称叫Domain Name System Security Extensions,利用密码技术,使得域名解析服务器可以验证它所收到的应答(包括域名不存在的应答)是否来自于真实的服务器,或者是否在传输过程中被篡改过。

简单地说DNSSEC可以防止DNS劫持,确保用户在DNS解析的过程中请求的域名与对应的IP地址一致性。之前我在京东云DNS免费域名解析就有朋友建议DNSSEC+CAA来组合使用,这样可以最大限度地确保DNS解析的安全,本篇文章就以Google Cloud DNS设置DNSSEC来作为演示。

启用DNSSEC需要域名注册商、DNS域名解析商还有本地DNS支持DNSSEC技术三方的共同努力才行。国内的阿里云、腾讯云、百度云等域名注册商暂不了解是否支持DNSSEC,从我使用的GodaddyNameNameCheapNamesilo等常见的国外域名注册商都是支持DNSSEC了。

DNS域名解析启用DNSSEC防止DNS劫持-Google Cloud DNS设置DNSSEC

为了让域名DNS解析更加准确,最稳妥的办法就是浏览器客户端启用HSTS+DNS CAA和DNSSEC+DNS over HTTPS或DNS-Crypt,目前挖站否wzfou.com已经采用了Https、CAA、HSTS、DNSSEC等技术,相关的教程有:

  1. 免费SSL证书收集整理汇总-免费给网站添加Https安全加密访问
  2. 启用HSTS并加入HSTS Preload List让网站Https访问更加安全-附删除HSTS方法
  3. 京东云DNS免费域名解析-支持线路地域细分 可添加CAA解析记录

PS:2018年7月22日更新,Google Cloud DNS虽然支持DNSSEC,但是不支持从属/备份DNS,有需要Secondary DNS的朋友可以试试:He.net DNS域名解析申请使用-免费DDNS、IPv6 地址和Slave DNS

一、哪些DNS域名解析服务支持DNSSEC?

国内的dns盾(dnsdun.com)貌似当前唯一一个支持CAA和DNSSEC解析记录的DNS解析服务商,其它的如DNSPOD、阿里云DNS、Cloudxns等都不支持DNSSEC。不过dns盾太小众了,虽然好几年我就已经知道它了,但是稳定性还需要考量。

国外的DNS域名解析支持DNSSEC的也是屈指可数,目前仅有CloudflareGoogle Cloud DNS、Rage4这三家支持DNSSEC,另外Cloudflare不支持设置那些 DNSSEC 特有的记录,如不支持 IPSECKEY、SSHFP、TLSA、DNSKEY、DS 记录。建议用Google Cloud DNS、Rage4。

二、DNSSEC普及情况如何?国内?

  1. https://stats.labs.apnic.net/

以下是stats.labs.apnic.net全世界不同地方的DNSSEC普及情况,从图表中可以看出全世界支持DNSSEC的DNS服务器还是相当少的,总量不超过15%。而国内的情况更加糟糕,低于1%。(点击放大)

三、Google Cloud DNS价格及使用教程

  1. https://cloud.google.com/dns/

Google Cloud DNS、Rage4都支持使用DNSSEC,但是Rage4每个域名 €2/月 起,根据功能而非使用量定价,而Google Cloud DNS每个域名 $0.2/月$0.4/百万个请求。所以wzfou.com选择了Google Cloud DNS。

Google Cloud DNS详细的使用方法之前在放弃免费DNS改用付费DNS-Google cloud DNS申请使用与解析效果已经分享过了,这里再简单地说一下Google Cloud DNS使用方法。首先是登录到Google Cloud 云平台,找到DNS解析。

然后点击创建DNS名称。

地区名称可以随便选择,只要不重复就可以。DNS名称就是你要解析的域名,例如wzfou.com,是否开启DNSSEC,选择开启。确定。

Google Cloud DNS添加DNS解析记录比较简单,如果是@这样的记录,直接空着即可,如下图:

Google Cloud DNS支持 A、AAAA、CNAME、NS、MX、TXT、SRV、SPF、LOC、NAPTR、PTR、CAA 以及 DNSSEC 相关记录。目前来说是最齐全的。

需要注意的是,Google Cloud DNS添加DNS记录是集的形式,例如MX有两条记录,那么你只需要再点击添加另一项即可。

Google Cloud DNS添加CAA记录如下图所示,关于生成CAA记录的方法参考:京东云DNS设置CAA

四、域名注册商Name启用DNSSEC

在Google Cloud DNS找到“注册机构设置”。

然后点击会显示Google Cloud DNS的NS服务器还有DS记录。

到域名注册商Name(PS:如你使用的其它的域名商方法类似)修改NS服务器为Google Cloud DNS。

ns-cloud-d1.googledomains.com
ns-cloud-d2.googledomains.com
ns-cloud-d3.googledomains.com
ns-cloud-d4.googledomains.com

如下图:

然后在Name的DNSSEC管理界面填写DS记录,主要是Key Tag、Algorithm、Digest Type和Digest。

五、检测DNSSEC是否成功启用及效果

  1. https://dnssec-analyzer.verisignlabs.com/

到verisignlabs网站处输入自己的域名,如果你的DS配置正确的话你会看到绿色的“钩”。

用站长工具测试启用了Google Cloud DNS的wzfou.com,各地的连接情况都没有什么问题。

用百度站长平台的搜索引擎抓取测试,都提示抓取成功,说明Google Cloud DNS在国内运行正常。

另外,Google Cloud DNS的收费真的是相当便宜。

六、总结

理论上讲启用DNSSEC还有CAA基本上是可以防止DNS劫持了,但是由于目前DNSSEC普及率非常地低,尤其是国内的DNS基本上不支持DNSSEC,所以在国内使用DNSSEC的效果不一定会好,但“聊胜于无”,毕竟DNSSEC是发展的大趋势。

Google Cloud DNS的四组NS服务器第一组在国内Ping不通,但是从监控来看DNS不影响。另外,需要说明的话已经Wu染的域名使用DNSSEC也是没有用的,倒是可以使用DNS over HTTPS或DNS-Crypt的方法来对DNS解析全程加密。