家里联通宽带到期,之前使用的时候感觉出口速度并不好,听说移动宽带因为用的人少,出口带宽不错,准备换一下试试.临上马之前先考察一下,普遍反映移动的DNS限制比较多,各种DNS劫持.要是能有办法检测到自己正在使用的DNS是哪个就好了,还好有这个:
结果如下:
检测之前已经把本机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
(2) Tcp-DNS-proxy和pwx-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反劫持的几种方式,转载请注明来源!