最近DOH概念有点火,2018年DOH技术正式成为国际标准 (RFC8484),2019年谷歌公共递归8.8.8.8正式宣布支持DOH,随后Firefox、Chrome浏览器等应用程序也提供对DOH的支持,连微软也宣布Win10系统将来会支持DOH。DOH似乎已是大势所趋,锐不可当。国内IT运维人员也都跃跃欲试,希望能够通过这项新的技术来提升DNS服务的安全。但同时大家也比较迷茫,不知道从什么地方入手。今天就给大家介绍一下DOH技术基本原理和应用场景,同时也会对比一下这项技术和国内早已开始使用的HTTPDNS的区别。enjoy:
什么是DOH?
DOH就是DNS Over HTTPS,在DNS查询时,通过加密的HTTPS协议,代替传统UDP传输协议,保护DNS数据传输安全,可有效避免域名被运营商劫持、DNS缓存投毒等域名安全问题。
传统的DNS查询原理,我们在之前的ZDNS云学堂《权威DNS那些事儿》中已经做了详细介绍,在这里就不再赘述。简而言之,就是客户端进行域名解析时,首选向本地递归服务器发起查询,如果本地递归有缓存,直接返回查询结果给客户端,如果没有缓存,再去权威服务器查询。但是由于传统的DNS协议形成于互联网早期,直接基于UDP或TCP协议,未虑及现代安全性的需要,未利用密码学等手段进行加密或验证。因而,其无法抵御现代互联网常见的DNS投毒污染等攻击手段或非法监听。
DOH协议就是一种加密的DNS传输手段,它在整个DNS体系中作用,如下图:
从上图可以看到DOH协议主要是作用于客户端和公共递归服务之间的查询,保证这一段的数据加密传输,从而在一定程度上改善客户端到递归服服务器之间的传输安全问题。
如何开启DOH服务?
现在主流的操作系统都还不支持DOH协议,只有一些应用程序提供支持。以Firefox浏览器为例,成功开启DOH以后,所有使用Firefox浏览器访问的域名,都会通过DOH协议进行域名解析,具体开启方法如下:
首先在Firefox浏览器“首选项”配置页面找到“网络设置”项,点击“设置”按钮,如下图:
在弹出的页面中往下拉,找到“启动基于HTTPS的DNS”选项。
浏览器内置了Cloudflare和NextDNS的两个服务商的DOH服务器,也支持自定义。这里我们使用默认的Cloudflare。然后使用Firefox访问几个页面,同时抓包测试DNS解析情况。Cloudflare DNS服务器域名是cloudflare-dns.com,查询到对应的服务IP是104.16.248.249和104.16.249.249。
可以看到此时有多个加密的连接请求指向Cloudflare的DOH服器104.16.248.249,这些就是DOH的解析请求了,因为这些数据包是加密的,所以我们看不到详细内容,可见DOH解析已经生效了。
以上给大家介绍了DOH基本原理和使用方法,相信将来主流操作系统提供支持以后,DOH协议的使用会更加普及,但目前应用范围还比较窄。接下来我们再对比一下HTTPDNS,以便对其有更深入的了解。
HTTPDNS与DOH的异同
早在2014年,国内就已经提出了HTTTPDNS的概念,并且逐步在移动客户端APP中应用起来。
HTTPDNS使用HTTP协议或者加密的HTTPS协议进行域名解析,代替传统的基于UDP的DNS协议。这个定义看起来和DOH差不多,那他们有什么不同之处呢?
首先是标准不统一:HTTPDNS诞生于DOH协议之前,尚未形成统一标准,不同服务商报文封装都有自己的格式,移动客户端APP使用的时候通过集成服务商提供的SDK来接入HTTPDNS服务。
其次是应用场景不同:DOH解决的是客户端到递归服务器这一段的数据加密问题,而HTTPDNS可以是加密的,可以是不加密,诞生的最初目的,其实还不是为了加密传输,而是要让客户端绕过运营商递归服务器,直接向域名权威服务器发起DNS查询请求,从而彻底解决运营商的递归的劫持、TTL生效慢等问题。以ZDNS的HTTPDNS服务为例,其原理如下:
(ZDNS HTTPDNS原理)
举个例子说明,假如某电商手机客户端APP连接服务器使用的域名是abc.cn,使用传统DNS经常遇到运营商递归劫持情况,难以解决。因为abc.cn域名权威解析托管在ZDNS Cloud云服务,同时也支持HTTPDNS服务,所以某电商就在APP里通过集成SDK约定,APP里面的域名查询,都指向ZDNS HTTPDNS服务模块,通过HTTP协议,向权威解析服务器获取解析结果。这样客户端APP查询abc.cn域名时,就会直接到ZDNS云服务查询,完全避免了运营商的递归可能出现的劫持问题。如果查询APP里面还有其他外链域名,再通过ZDNS HTTPDNS服务部署的递归模块出去公网查询。
可以看到,DOH和HTTPDNS从实现方式上来说并没本质的不同,都是将DNS解析协议封装到HTTP(S)协议中,特别是RFC8484标准发布以后,如果HTTPDNS也遵循该标准,更是殊途同归,最终会融入DOH协议。
最后,再说下另外一种常见到的DOT协议(DNS over TLS),它和DOH原理和应用场景类似,都是用来加密DNS流量的,IETF将DOH协议定义为RFC8484,将DOT定义为RFC7858和RFC8310。DOH基于HTTPS协议,默认端口是443,DOT使用TCP作为基本连接协议,并通过TLS加密和身份验证进行分层,默认端口是853。它们功能和应用场景是完全一样的,只是两种不同的标准。安卓系统从9.0以后,开始支持加密DNS,其实就是DOT协议。
如果DNS解析过程未来都使用加密传输协议,那么现在一些常见的DNS安全问题将不复存在,比如域名劫持、TTL时间被篡改、缓存污染等问题,企业业务运行将更加安全稳定。