一、修改电脑DNS服务器
改成国外的DNS服务器也没有用,不过可以借助软件在本地建一个DNS服务,然后把电脑上的DNS服务器改成127.0.0.1就可以了。
1、使用pydnsproxy
Windows
1. 下载pydnsproxy,安装在你喜欢的位置(默认注册为服务开机后台运行)。(注:Windows Vista/7 的用户请使用管理员模式安装)
2. 将宽带连接(或者其他你喜爱的名字的连接)的dns服务器设置为127.0.0.1
3. Enjoy it! 备注
1. 本软件默认使用OpenDNS的DNS服务器,如果你喜爱其他的境外DNS服务器,请修改主目录下的dnsserver.conf文件。(不知道的话请用Google搜索,注意别设成境内的了,不然就又回到祖国妈妈的怀抱了)
2. 修改dnsserver.conf后,请在控制面板->管理工具->服务中重启DNSProxy服务。
3. exe只是简单的7zip打包,如杀毒软件报告病毒应属误报。提供两个在线扫描结果:VirusTotal、VirScan。 Linux、Mac
目前没有针对Linux和Mac的包,但可以到SVN里把py的源码checkout下来,除需要手动设置外,使用方法类似于Windows。 说明
什么是DNS缓存污染?参见维基百科的这篇条目。
DNSProxy只提供绕过DNS缓存污染的功能,而不能为你解决连接被重置的问题,更不能为你提供代理服务器敏感词XX。其他业务,请查询GAppProxy。
既然不能敏感词XX,为什么开发这个工具?要知道能解决DNS缓存污染也能对付掉一部分敏感词XXX的封锁。比如说你可以使用IPv6,如果能解决掉DNS缓存污染,那么敏感词XXX在IPv6唯一的封锁手段(现今)也失效了。 下载地址:http://code.google.com/p/pydnsproxy/downloads/list
2、使用AntiDnsPollution
我们知道,某些网络运营商为了某些目的,对DNS进行了某些操作,导致使用ISP的正常上网设置无法通过域名取得正确的IP地址。常用的手段有:DNS劫持和DNS污染。关于DNS劫持和DNS污染的区别,请查找相关文章。
对付DNS劫持的方法很简单,只需要把系统的DNS设置改为为国外的DNS服务器的IP地址即可解决。但是对于DNS污染,一般除了使用代理服务器和VPN之类的软件之外,并没有什么其它办法。但是利用我们对DNS污染的了解,还是可以做到不用代理服务器和VPN之类的软件就能解决DNS污染的问题,从而在不使用代理服务器或VPN的情况下访问原本访问不了的一些网站。当然这无法解决所有问题,当一些无法访问的网站本身并不是由DNS污染问题导致的时候,还是需要使用代理服务器或VPN才能访问的。
我们知道,DNS污染的数据包并不是在网络数据包经过的路由器上,而是在其旁路产生的。所以DNS污染并无法阻止正确的DNS解析结果返回,但由于旁路产生的数据包发回的速度较国外DNS服务器发回的快,操作系统认为第一个收到的数据包就是返回结果,从而忽略其后收到的数据包,从而使得DNS污染得逞。而某些国家的DNS污染在一段时期内的污染IP却是固定不变的,从而可以忽略返回结果是这些IP地址的数据包,直接解决DNS污染的问题。
在这里我用Java做了一个简单的小程序并提供源代码,在本机运行后,就能在没有代理服务器和VPN的情况下,直接就能解决DNS污染的问题了。如果没有安装Java,可以去http://www.java.com/上安装一个。解开AntiDnsPollution.zip之后,运行filter.bat(Linux用户请运行filter.sh),等待启动成功。然后设置系统的DNS服务器的IP地址为127.0.0.1即可。然后打开一个命令行窗口,执行nslookup一些被DNS污染的域名,是不是解析正确了?
下面说一下这个小程序的具体工作流程:首先程序启动后,会从文本文件dnsfilter.properties中读取配制,然后去一个不存在的DNS服务器——但这个IP地址却是国外的——中进行DNS查询被劫持的域名,然后返回的IP地址就是被劫持的IP,被记录下来,之后正常的DNS查询中,就自动把这些IP地址过滤了。这个程序以后会不定期更新,或许也会出。NET版本,请在我的Google Reader上关注更新。
对于高级用户,可以手动用文本编辑器修改配置文件dnsfilter.properties:
BindToIP:小程序启动后作为DNS服务期绑定53端口,这里指定绑定的IP地址
DnsServer:国外的DNS服务器,可以设置为OpenDNS或Google DNS服务器的IP地址
ResponseTimeout:DNS查询返回超时的时间(毫秒)
TestDnsServer:测试DNS服务器,请指定一个不存在的DNS服务期,但要求IP是国外的
TestRespTimeout:测试DNS服务器的查询返回超时时间(毫秒),也就是DNS劫持的旁路回复超时时间
TestCount:测试DNS服务器的次数,为了得到所有被劫持的IP地址,需要一定的测试次数
小程序的执行文件和源代码在同一个压缩包内,请点下面的链接下载(含源代码)。
下载:不依赖于Java环境的可执行程序(含源码)
下载:依赖于Java环境的程序(含源码)
3、使用dnsproxycn
windows系统的一个本地dns代理工具, 通过延时的方法减少中国的dns污染, 通过加载ipv6host.txt文件, 可强制只返回ipv6地址, 使得浏览器只能通过ipv6进行工作, 可通过ipv6访问google, youtube 等网站.
ipv6host.txt中的地址提取自紫狐浏览器, 使用该工具不需紫狐浏览器也能使通过隧道运行ipv6的机器用ipv6host中的地址进行访问, 效果几乎和紫狐浏览器一样. 中国境外用户不需要本工具.
使用说明:
Introduction
运行于xp,vista,win7系统.
Details
先确认浏览器能通过 teredo 配置 ipv6 地址, win7 默认已配置,xp 需手工进行配置.
如果不能使用 ipv6 则不要下载 ip6hosts.txt, 软件一样可以运行, 减少中国的 dns 污染但没有强制 ipv6 功能.
下载 dnsproxy.exe 和 ip6hosts.txt 放在同一文件夹内, 运行 dnsproxy.exe, 将 dns 服务器设置为 127.0.0.1, 打开浏览器即可.
如果弹出防火墙提示,请选择允许通过.
用<ctrl+c>终止软件运行,终止前先要将 dns 服务器改回原来的状态.
ip6hosts.txt中的地址可用记事本自行添加或删除.
dnsproxy.cpp 是源代码.
下载地址:http://code.google.com/p/dnsproxycn/downloads/list
二、使用tcp dns防止dns污染
dns解析默认使用udp的53端口进行的,不过墙也就只拦截udp的dns解析请求,如果用tcp协议进行dns查询就可以正常了。
1、
起因是我这(beijing urban network co. ltd)把DNS服务器改为8.8.8.8或者8.8.4.4的时候就无法使用了,表现为发出DnsQuery后没有任何响应,猜测大概是敏感词XXX搞的鬼 吧。唔。。。不管是不是反正这黑锅都让敏感词XXX来背,呵呵。
默认情况下Windows的DNS交互使用UDP协议承载,于是抱着试试的心理尝试了一下用TCP来发送DNS请求,结果Google DNS很给力的返回了结果。
接下来的工作就是怎样让Windows用TCP来发送了。悲催的是翻了一遍组策略,网络连接属性等等都没找到哪个选项可以让Windows发送 TCP的DNSQuery,也不知道是真没有还是没找到。没办法只好自己动手丰衣足食啦,分析后发现判断用UDP或TCP的关键位置在 DnsApi.dll中,修改之,覆盖,重启,用Wireshark看到发送的都是TCP的DNS请求,目前除了nslookup工具,其他使用一切正 常,用nslookup发出的请求不受影响,默认还是UDP的,反正不影响上网,无视了。
提一下用的系统是Win7 Ultimate,版本号 6.1.7601
DnsApi.dll版本号为6.1.7601.17570.text:6DC08FC8 8B 46 10 mov eax, [esi+10h].text:6DC08FCB 89 45 F4 mov [ebp+var_C], eax关键代码,此处让var_C值为2即可,这里给出我的修改方法85A0: 90 90 90 90 90 -> 33 C0 40 EB 2585C8: 8B 46 10 -> EB D6 40
后记:
测试了一下似乎也能绕过敏感词XXX的DNS投毒
测试方法:
1. 用UDP协议dig www.google.com,没有任何返回
2. 仍用UDP协议dig www.twitter.com 有返回结果,不过给的IP地址不正确,是随机值
说明敏感词XXX的DNS投毒在拦截DNS请求之前,下面看看TCP协议请求的实验结果
1. 用TCP协议dig www.google.com 返回正确IP
2. 用TCP协议dig www.twitter.com 也返回了正确的IP
均返回了正确结果,看来敏感词XXX的DNS劫持目前还仅限于UDP协议,对于TCP协议则没有过滤:)
不过这仅是我这里的情况,还不知道是否在其他网络中也适用,如果不适用说明敏感词XXX可以根据不同的运营商或者地区来部署不同的版本。那就比较恶心了。
附上修改后的DnsApi.dll
Size: 270,336 bytes
MD5Sum : c2e583928d087a631cff925e27a5edb4
Download : dnsapi.dll2、
看了某篇文章,对tcp dns开始感兴趣,于是动手写了一个小脚本
可以把udp和tcp的dns请求全部转换到tcp发送到dns服务器
使用方法:
使用sudo或者root下执行python tcpdns.py
(绑定1024以下的端口需要root权限)
然后把本机dns设为127.0.0.1
需要安装python和python-twisted-core
dns设置方法:
在/etc/resolv.conf中添加nameserver 127.0.0.1
注意:
默认dns为8.8.4.4 可自己打开脚本修改
其他:
为保证安全性在绑定端口后会把脚本降低权限,默认为os.setuid(1000)
使用前请检查当前用户的uid是否为1000然后做出修改,在/etc/passwd中可以查到
在xp上也可以使用,需要安装python、twisted和zope,可以在以下地址中下载
http://www.python.org/
http://twistedmatrix.com/trac/wiki/Downloads
http://pypi.python.org/pypi/zope.interface#download
下载地址:http://min.us/mvoilIn
以上均转自网络,本人没有测试。 |