首页 » 技术分享 » DNS反劫持的几种方式

DNS反劫持的几种方式

 

        家里联通宽带到期,之前使用的时候感觉出口速度并不好,听说移动宽带因为用的人少,出口带宽不错,准备换一下试试.临上马之前先考察一下,普遍反映移动的DNS限制比较多,各种DNS劫持.要是能有办法检测到自己正在使用的DNS是哪个就好了,还好有这个:

        http://dnsleaktest.com/

        

        结果如下:

        

        检测之前已经把本机DNS设置成114.114.114.114了,从结果上看果然有问题,应该是使用了透明DNS代理的技术,导致DNS泄漏.

        

        总结一下:

        DNS劫持,劫持单条DNS查询信息,返回不正确的结果.

        透明DNS代理,劫持所有查询信息,只要是经过运营商网关的发往53端口的UDP类型的DNS协议,全部都转移到自己DNS服务器上去,所以在本机上设置是没用的.

 

        这样一来,即使在内部网络中部署了DNS服务器也只可以起到加速作用,依然无法反劫持.因为内网中的DNS服务器向上级DNS服务器请求时的数据同样会被透明DNS代理劫持到ISP的DNS上.内部DNS服务器缓存的数据依然是被污染过的.

 

        如果想突破这种劫持,有三种方式. 这三种方式,都需要在本机对DNS请求数据进行预处理,所以本机都需要部署处理程序,同时将本地DNS设置为127.0.0.1.

        1.   使用DNS协议的TCP形式.

        按照约定,DNS服务器都要同时实现TCP形式的DNS协议处理.这样一来,只需要在本地把UDP形式的协议转换为TCP形式就可以了.可以使用的工具有:

        (1)  socat

        socat是linux下很好用的端口转发工具,支持UDP转TCP,试用了一下,并不好用,经常各种错误.

        使用方法倒是很简单: socat udp4-listen:53,reuseaddr,fork TCP:114.114.114.114:53

        socatwindows版本的下载地址

        (2)  Tcp-DNS-proxypwx-dns-proxy

        这两个都是专门的DNS协议转换工具,实际使用了一下,效果都很不理想,速度很慢.

        (3)pdnsd

        这个其实是个dns服务器,需要设置向上级服务器请求时只使用TCP格式.貌似也就这个方案比较靠谱.

        之前还有尝试过其他的端口转发工具,要么不支持UDP,要么号称支持UDP,但是只支持UDP到UDP,不支持UDP到TCP.

        2.   使用加密软件对DNS请求和回复数据进行加密.

        这种方式的弊端是,既然内部有加密,外部必须有一个相应的解密工具.对个人来说,外部还需要部署一套专门的解密工具,需要VPS,代价有点大.

        使用这种方式的工具找到两个:

        (1)  dnscrypt

        这个工具貌似很有名,所以本身内置的DNS服务器地址已经大部分被封.速度很不理想,没有尝试自己部署服务器端会怎么样.

        (2)  tcp-over-dns

        没有具体试用.

        3.   使用其他端口.

        没有具体试用,没找到现成的工具.这种方式,需要本地转发DNS请求到指定端口,然后还需要在外网部署使用特定端口的DNS服务器.同样需要一台VPS.

 

转载自原文链接, 如需删除请联系管理员。

原文链接:DNS反劫持的几种方式,转载请注明来源!

0