加密DNS传输工具-DNSCrypt


DNSCrypt是一个确保客户与DNS服务器之间传输安全的工具,基于DNSCurve修改而来。采用C/C++开发并在BSD协议下授权。
A tool for securing communications between a client and a DNS resolver.
正如SSL能将HTTP通信变为加密过的HTTPS通信,正如其名,是一款能加密您电脑与OpenDNS之间的通信的小神器。这款工具并不需要对域名或其工作方式做任何的改变,它只是提供了个该工具的用户与机房里的DNS服务器之间的加密方式而已。
由于Domain Name System(DNS)设计上的缺陷,用户在浏览器里输入很多海外网址以后,如果遭遇MITM(Man in the Middle,中间人攻击)或者DNS污染,浏览器就可能接收到错误的IP而导致安全问题。为了解决这个问题,IETF在十几年前便开始制定DNS的安全扩展(DNSSEC),主要是利用公开密钥加密技术,通过对DNS数据进行数字签名,DNSSEC能够验证DNS数据来源和验证在传输过程中DNS是否被篡改。但是DNSSEC不保证DNS数据的机密性,DNS数据本身并没有被加密,加之DNS的阶层式模式,这便为一些机构提供监视,控制网络的手段,典型的例子就是不能访问一些海外的网站。DNSSEC也不提供免于DOS(Deny of Service,拒绝服务)攻击的办法,由于数字签名和签名验证需要额外的数据运算,DNSSEC反而更容易受到DOS攻击。DNSCurve相对于 DNSSEC的好处是,DNSCurve使用了更有效率的椭圆曲线加密算法而减少了运算量,可以对每条DNS查询都单独加密,从而更加安全。
DNSCrypt协议是非常类似DNSCurve的,作为一个DNS代理运行,侧重于客户端和第一级DNS服务器之间的通信安全,能够缓存DNS解析。DNSCrypt的上游DNS服务器是著名的OpenDNS服务,简单而言DNSCrypt就是加密了本机到OpenDNS服务器之间的DNS查询通信过程(使用椭圆曲线加密算法),所以可以不受GreatFireWall的DNS污染干扰。DNSCrypt将未修改的DNS查询与响应以密码学结构打包来检测是否被伪造。它尽管未使用端对端加密,但也足够抵御针对DNS的中间人攻击、DNS缓存投毒攻击、DNS劫持等,尤其是在局域网中。除此以外还缓解了基于UDP的请求查询至少与回应一样大的放大攻击。DNSCrypt也可以用于访问控制。
安装方法是首先下载对应平台的dnscrypt client然后运行,接着修改本地或者router的dns server为127.0.0.1. 然后你的所有dns请求都会加密进行从而绕过GreatFireWall的dns污染顺利解析到正确IP(DNSCrypt可以在Windows/Linux/BSD/OSX/iOS系统上运行),(目前已经有DNSCrypt WinClient、DNSCrypt Windows Service Manager、DNSCrypt OSXClient 和 DNSCrypt Tools for Linux 等第三方图形界面客户端出现。)
DNSCrypt可以使用UDP端口或TCP端口。尽管与HTTPS完全不同,但两种情况下的默认端口号均为443。DNSCrypt客户端必须明确信任所选提供者的公钥,而不依赖于常规浏览器中使用的证书颁发机构。公钥将用于验证一整套以传统DNS查询接收的证书。这些证书包含用于密钥交换的短期公钥,以及即将使用的密码本标识符。客户端被鼓励为每次查询新建密钥,而服务器被鼓励为每24小时更换短期密钥对。查询与回应都使用同一算法加密,并使用64字节的倍数填充来防止泄漏数据包大小。当使用UDP端口且回应多于查询产生的数据量时,服务器可以使用标记TC(英语:truncated,截短)比特的短数据包回应。客户端此时应使用TCP端口重试,并增加后续查询的填充量。
该协议的第一、第二版采用X25519算法(Curve25519)进行密钥交换,EdDSA算法进行签名,以及使用XSalsa20-Poly1305或XChaCha20-Poly1305算法认证加密。
部署与实现
服务端
DNSCrypt-Wrapper是服务端程序,需要搭配BIND、unbound等DNS系统方可运行。除了私有部署,DNSCrypt协议已经被数个公共DNS解析服务器接纳,现存最大的成员是OpenNIC网络,它同时提供虚拟专用网(VPN)服务。OpenDNS(现思科系统的子公司)在2011年12月宣布其公共DNS服务部署DNSCrypt,紧接着奥地利的CloudNS也宣布部署。
2016年3月29日,Yandex宣布在其公共DNS服务器及网络浏览器上支持DNSCrypt协议。随后,Infoblox宣布旗下的ActiveTrust Cloud将部署DNSCrypt服务。
2016年10月,AdGuard宣布为其提供阻挡电信运营商追踪广告推送服务的公共DNS服务器部署了DNSCrypt。
2017年DNSCrypt v2协议公布,随后相关的开放源代码实现项目相继出现,同时也有更多的公共DNS服务器加入(包括Google Public DNS),所有部署DNSCrypt的DNS服务器清单可在DNSCrypt的GitHub、Bitbucket等源代码托管站上找到。
客户端
DNSCrypt-Proxy v1/v2、Pcap_DNSProxy、YourFriendlyDNS是跨平台、命令行界面的客户端程序,起到将本机或局域网内的DNS请求加密转发至部署了DNSCrypt的服务器之功用。其中DNSCrypt-Proxy的v2版还支持DoH、DoT,还可以实现类似dnsmasq的DNS指定转发、黑名单及白名单、hosts特性;Pcap_DNSProxy额外支持DNSSEC。
Simple DNSCrypt是一个图形界面、基建于DNSCrypt-Proxy的前端,运行于Windows操作系统。也有类似的实现项目,如macOS的dnscrypt-osx-client等。Yandex则在其自家的浏览器产品上内置了自有的DNSCrypt客户端支持。
可以访问这里来测试您连接到了OpenDNS了没。
最新版本:1.3
官方主页:http://www.dnscrypt.org/
项目主页:https://github.com/opendns/dnscrypt-proxy
A tool for securing communications between a client and a DNS resolver.
正如SSL能将HTTP通信变为加密过的HTTPS通信,正如其名,是一款能加密您电脑与OpenDNS之间的通信的小神器。这款工具并不需要对域名或其工作方式做任何的改变,它只是提供了个该工具的用户与机房里的DNS服务器之间的加密方式而已。
由于Domain Name System(DNS)设计上的缺陷,用户在浏览器里输入很多海外网址以后,如果遭遇MITM(Man in the Middle,中间人攻击)或者DNS污染,浏览器就可能接收到错误的IP而导致安全问题。为了解决这个问题,IETF在十几年前便开始制定DNS的安全扩展(DNSSEC),主要是利用公开密钥加密技术,通过对DNS数据进行数字签名,DNSSEC能够验证DNS数据来源和验证在传输过程中DNS是否被篡改。但是DNSSEC不保证DNS数据的机密性,DNS数据本身并没有被加密,加之DNS的阶层式模式,这便为一些机构提供监视,控制网络的手段,典型的例子就是不能访问一些海外的网站。DNSSEC也不提供免于DOS(Deny of Service,拒绝服务)攻击的办法,由于数字签名和签名验证需要额外的数据运算,DNSSEC反而更容易受到DOS攻击。DNSCurve相对于 DNSSEC的好处是,DNSCurve使用了更有效率的椭圆曲线加密算法而减少了运算量,可以对每条DNS查询都单独加密,从而更加安全。
DNSCrypt协议是非常类似DNSCurve的,作为一个DNS代理运行,侧重于客户端和第一级DNS服务器之间的通信安全,能够缓存DNS解析。DNSCrypt的上游DNS服务器是著名的OpenDNS服务,简单而言DNSCrypt就是加密了本机到OpenDNS服务器之间的DNS查询通信过程(使用椭圆曲线加密算法),所以可以不受GreatFireWall的DNS污染干扰。DNSCrypt将未修改的DNS查询与响应以密码学结构打包来检测是否被伪造。它尽管未使用端对端加密,但也足够抵御针对DNS的中间人攻击、DNS缓存投毒攻击、DNS劫持等,尤其是在局域网中。除此以外还缓解了基于UDP的请求查询至少与回应一样大的放大攻击。DNSCrypt也可以用于访问控制。
安装方法是首先下载对应平台的dnscrypt client然后运行,接着修改本地或者router的dns server为127.0.0.1. 然后你的所有dns请求都会加密进行从而绕过GreatFireWall的dns污染顺利解析到正确IP(DNSCrypt可以在Windows/Linux/BSD/OSX/iOS系统上运行),(目前已经有DNSCrypt WinClient、DNSCrypt Windows Service Manager、DNSCrypt OSXClient 和 DNSCrypt Tools for Linux 等第三方图形界面客户端出现。)
DNSCrypt可以使用UDP端口或TCP端口。尽管与HTTPS完全不同,但两种情况下的默认端口号均为443。DNSCrypt客户端必须明确信任所选提供者的公钥,而不依赖于常规浏览器中使用的证书颁发机构。公钥将用于验证一整套以传统DNS查询接收的证书。这些证书包含用于密钥交换的短期公钥,以及即将使用的密码本标识符。客户端被鼓励为每次查询新建密钥,而服务器被鼓励为每24小时更换短期密钥对。查询与回应都使用同一算法加密,并使用64字节的倍数填充来防止泄漏数据包大小。当使用UDP端口且回应多于查询产生的数据量时,服务器可以使用标记TC(英语:truncated,截短)比特的短数据包回应。客户端此时应使用TCP端口重试,并增加后续查询的填充量。
该协议的第一、第二版采用X25519算法(Curve25519)进行密钥交换,EdDSA算法进行签名,以及使用XSalsa20-Poly1305或XChaCha20-Poly1305算法认证加密。
部署与实现
服务端
DNSCrypt-Wrapper是服务端程序,需要搭配BIND、unbound等DNS系统方可运行。除了私有部署,DNSCrypt协议已经被数个公共DNS解析服务器接纳,现存最大的成员是OpenNIC网络,它同时提供虚拟专用网(VPN)服务。OpenDNS(现思科系统的子公司)在2011年12月宣布其公共DNS服务部署DNSCrypt,紧接着奥地利的CloudNS也宣布部署。
2016年3月29日,Yandex宣布在其公共DNS服务器及网络浏览器上支持DNSCrypt协议。随后,Infoblox宣布旗下的ActiveTrust Cloud将部署DNSCrypt服务。
2016年10月,AdGuard宣布为其提供阻挡电信运营商追踪广告推送服务的公共DNS服务器部署了DNSCrypt。
2017年DNSCrypt v2协议公布,随后相关的开放源代码实现项目相继出现,同时也有更多的公共DNS服务器加入(包括Google Public DNS),所有部署DNSCrypt的DNS服务器清单可在DNSCrypt的GitHub、Bitbucket等源代码托管站上找到。
客户端
DNSCrypt-Proxy v1/v2、Pcap_DNSProxy、YourFriendlyDNS是跨平台、命令行界面的客户端程序,起到将本机或局域网内的DNS请求加密转发至部署了DNSCrypt的服务器之功用。其中DNSCrypt-Proxy的v2版还支持DoH、DoT,还可以实现类似dnsmasq的DNS指定转发、黑名单及白名单、hosts特性;Pcap_DNSProxy额外支持DNSSEC。
Simple DNSCrypt是一个图形界面、基建于DNSCrypt-Proxy的前端,运行于Windows操作系统。也有类似的实现项目,如macOS的dnscrypt-osx-client等。Yandex则在其自家的浏览器产品上内置了自有的DNSCrypt客户端支持。
可以访问这里来测试您连接到了OpenDNS了没。
最新版本:1.3
官方主页:http://www.dnscrypt.org/
项目主页:https://github.com/opendns/dnscrypt-proxy