pwx-dns-proxy — 基于 Python 以及 Twisted 框架写成的支持几乎所有的 DNS 请求类型的DNS 代理服务器
这个 DNS 代理服务器是基于 Python 以及 Twisted 框架写成的,并且它支持几乎所有的 DNS 请求类型,包括 A 地址以及 AAAA 地址(IPv6)。
远程服务器的 DNS 应答根据它们的 TTL 值将会被缓存在本地。
另外,这个服务器能够链接多个上游服务器,并且根据查询域名的不同,使用特定的服务器查询。
在查询上游服务器的时候,可以使用 TCP 协议,而不是 UDP 协议。这样,就可以避免大部分 DNS 污染了。
提供了本地 HOSTS 表的功能,支持 IPv4 和 IPv6 的地址。
这个项目的初衷是为中国大陆的用户提供一个完整的 DNS 代理解决方案——因为它能够透过 GFW,获得被屏蔽的网站的真实 IP 地址。另外,当中国大陆的用户使用 VPN 翻墙的时候,他们既能够使用更安全的、国外的 DNS 服务器,也能够享受更快的上网速度——DNS 查询结果会被缓存,而且大陆拥有 CDN 的门户网站也能够通过 ISP 的 DNS 服务器查询地址,不至于翻山越岭到美国的服务器上访问这些门户网站的内容。
Linux 用户:
1、请安装 Python 2.7,以及 Twisted-11.0。
2、请通过 git 下载源代码。运行 run.sh 即可打开代理服务器。
Windows 用户:
1、下载 dnsproxy-0.1-alpha-2.rar,解压到任意文件夹。
2、dnsproxy.exe 是主程序。下载之后,请修改 data/dnsproxy.conf:
将 add_server(“isp”, “202.96.209.133”, 53, False) 里面的 202.96.209.133 修改成你的 ISP DNS。
希望有兴趣的亲能够参与到这个项目中,E-mail 至 airyai@gmail.com
项目地址:http://code.google.com/p/pwx-dns-proxy/
下载地址:http://code.google.com/p/pwx-dns-proxy/downloads/list
感谢网友AS的推荐
=====================================================================================
你直接双击dnsproxy.exe窗口只是一闪就关了,就是失败了。
成功运行后会有一个窗口显示当前DNS解释情况。那个窗口还不能关,关了就没dnsproxy.exe了。
还有记得把所有网卡,网络连接的DNS改成dnsproxy.exe的服务地址,不然没用。
或是把 “本地连接” 的DNS改成dnsproxy.exe,别的网卡,连接上的DNS都删掉。
win7 vista win2008用户如果无法运行可以参考此法
去microsoft的网站下这个工具
http://technet.microsoft.com/en-us/sysinternals/bb897553
用以下命令开一个system用户权限的cmd窗口
psexec -s -i cmd.exe
去dnsproxy目录运行以下命令
start dnsproxy.exe
然后会弹出一个空的全黑的dos窗口,那个就是dnsproxy的窗口。
之前打开的cmd窗口就可以关掉了。
注意:
start dnsproxy.exe命令的start一定不能少不然你的cmd窗口一关,dnsproxy的窗也一起关掉了。
不要在system权限的cmd窗口运行别的程序,这个帐号是给服务进程用的,别把没用的进程弄进去。
感谢网友路人甲提供的方法
============================================================================
安装成服务,就可以不看黑窗口了,不过建议先用黑窗口调试好再用服务加载:
@echo sc stop dnsproxy > !register_as_server.bat
@echo sc delete dnsproxy >> !register_as_server.bat
@echo sc create DNSProxy binPath= “%cd%\srvany.exe” start= auto >> !register_as_server.bat
@echo sc description dnsproxy “DNSProxy TCP DNS Server” >> !register_as_server.bat
@echo reg add HKLM\SYSTEM\CurrentControlSet\Services\dnsproxy\Parameters /v Application /d “%cd%\dnsproxy.exe” >> !register_as_server.bat /f
@echo reg add HKLM\SYSTEM\CurrentControlSet\Services\dnsproxy\Parameters /v AppDirectory /d “%cd%” >> !register_as_server.bat /f
@echo sc start dnsproxy >> !register_as_server.bat
@echo sc stop dnsproxy > !delete_dnsproxy_server.bat
@echo sc delete dnsproxy >> !delete_dnsproxy_server.bat
@echo 安装文件已生成.
@echo.
@echo 以 *管理员身份* 运行这个文件:!register_as_server.bat 注册服务;!delete_dnsproxy_server.bat 删除此服务
@echo.
@pause
sryany.exe 是 Windows Resource Kit 带的工具,只有 8kb 大小。可以去这下载:
http://u.115.com/file/bhzpcawn#
srvany.rar
nicovideo是IP被墙了吗? 用这个反DNS污染上不了nicovideo
不是域名污染,可能是基于关键词的TCP连接重置和IP封锁吧 参考 http://igfw.net/archives/594
Nico 应该是IP封锁,tracert 后发现断在电信那里。
还有,pwx-dns-proxy,在网站不稳定的时候, 还是会DNS劫持,跳转到114,
pwx-dns-proxy区分国内国外网址,一般国外的走tcp的国外DNS服务器,国内的走udp的国内DNS服务器,所以国内网址会被电信DNS劫持,不过国外网址不受GFW DNS污染,作者这样做是为了不影响国内网站访问速度。
安装成服务,就可以不看黑窗口了,不过建议先用黑窗口调试好再用服务加载:
@echo sc stop dnsproxy > !register_as_server.bat
@echo sc delete dnsproxy >> !register_as_server.bat
@echo sc create DNSProxy binPath= “%cd%\srvany.exe” start= auto >> !register_as_server.bat
@echo sc description dnsproxy “DNSProxy TCP DNS Server” >> !register_as_server.bat
@echo reg add HKLM\SYSTEM\CurrentControlSet\Services\dnsproxy\Parameters /v Application /d “%cd%\dnsproxy.exe” >> !register_as_server.bat /f
@echo reg add HKLM\SYSTEM\CurrentControlSet\Services\dnsproxy\Parameters /v AppDirectory /d “%cd%” >> !register_as_server.bat /f
@echo sc start dnsproxy >> !register_as_server.bat
@echo sc stop dnsproxy > !delete_dnsproxy_server.bat
@echo sc delete dnsproxy >> !delete_dnsproxy_server.bat
@echo 安装文件已生成.
@echo.
@echo 以 *管理员身份* 运行这个文件:!register_as_server.bat 注册服务;!delete_dnsproxy_server.bat 删除此服务
@echo.
@pause
sryany.exe 是 Windows Resource Kit 带的工具,只有 8kb 大小。可以去这下载:
http://u.115.com/file/bhzpcawn#
srvany.rar
感谢支持。
试了几次都失败,原来是引号全是中文的,WordPress喜欢换成中文引号这个「人性化」功能特蛋疼。。
我找到一个可以用ssh加密DNS查询的方法
用plink命令, 把下文“密码”“用户名”“SSH服务器端口”“SSH服务器地址” 改成你找到的SSH帐号
plink -N -v -D 127.0.0.1:5123 -L 8853:8.8.8.8:53 -pw 密码 -l 用户名 -P SSH服务器端口 SSH服务器地址
这条命令运行后可以把本地的127.0.0.1:8853当成是8.8.8.8:53的google DNS,因为做了端口转发。在网卡
的DNS设定上改成127.0.0.1:8853就可以用SSH加密向8.8.8.8做DNS查询了。
(同时这命令也开了一个127.0.0.1:5123的本地端口做socks5代理,这样SSH帐号就物尽其用了)
再结合dnsproxy.exe的cn域名用国内DNS查询的功能就十分完美了。既100%不被DNS污染也不会损失速度。
说漏了,127.0.0.1:8853要加在dnsproxy.exe的data/dnsproxy.conf里用,windows不能直用127.0.0.1:8853
因为windows只支持标准的53端口DNS服务器。
不过在XP里可以把8.8.8.8的53端口转成本机的53端口,那命令改成这样
plink -N -v -D 127.0.0.1:5123 -L 53:8.8.8.8:53 -pw 密码 -l 用户名 -P SSH服务器端口 SSH服务器地址
win7里如果不想用dnsproxy.exe,又想用8.8.8.8就用psexec那招来绑定本机53端口吧。
测试成功有效
补充,这个过程有点麻烦。。。
这个是为了以后,如果TCP查询DNS的方式也被关键字过滤封杀,预先作打算。
Linux里也能用这样的端口转发,把plink改成ssh就行了(本来plink就是win版的ssh)
ssh -N -v -D 127.0.0.1:5123 -L 53:8.8.8.8:53 -pw 密码 -l 用户名 -P SSH服务器端口 SSH服务器地址
8.8.8.8的53端口就变成本机127.0.0.1的53端口了,如果本机开了DNS服务不能转发成本机53,
那就改成别的端口,然后加到本机DNS服务的上游DNS列表里。
比如改成8853端口
plink -N -v -D 127.0.0.1:5123 -L 8853:8.8.8.8:53 -pw 密码 -l 用户名 -P SSH服务器端口 SSH服务器地址
把命令写到批处理文件里就行了(bat或cmd后缀的txt文件),以后双击批处理运行就不用次次打一样的命令了。
顺便说说plink从哪下,去putty主页下载plink新版, 在那堆文件列表里点plink.exe
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
之前的命令去掉端口转发就是一个纯粹连接ssh做socks5代理的命令。
例如连接SSH做个127.0.0.1:1080的socks5代理
plink -N -v -D 127.0.0.1:1080 -pw 密码 -l 用户名 -P SSH服务器端口 SSH服务器地址
注意:
那些参数 -N -v -D 之类的都是大小写敏感的,大写N或D之类的不能换成小写的。
快可以写一个plink教程了…..
感谢支持。。。
你的没有端口限制吗?难道是因为我开ICS网络连共享把这个端口保留了?
搞不清楚了,直接运行出现端口监听失败就用psexec吧。
注意:
你直接双击dnsproxy.exe窗口只是一闪就关了,就是失败了。
成功运行后会有一个窗口显示当前DNS解释情况。那个窗口还不能关,关了就没dnsproxy.exe了。
还有记得把所有网卡,网络连接的DNS改成dnsproxy.exe的服务地址,不然没用。
或是把 “本地连接” 的DNS改成dnsproxy.exe,别的网卡,连接上的DNS都删掉。
win7 vista win2008用户运行方法
去microsoft的网站下这个工具
http://technet.microsoft.com/en-us/sysinternals/bb897553
用以下命令开一个system用户权限的cmd窗口
psexec -s -i cmd.exe
去dnsproxy目录运行以下命令
start dnsproxy.exe
然后会弹出一个空的全黑的dos窗口,那个就是dnsproxy的窗口。
之前打开的cmd窗口就可以关掉了。
注意:
start dnsproxy.exe命令的start一定不能少不然你的cmd窗口一关,dnsproxy的窗也一起关掉了。
不要在system权限的cmd窗口运行别的程序,这个帐号是给服务进程用的,别把没用的进程弄进去。
感谢支持
我用64位win7没那么麻烦。
不过还是学习了一招
win7 vista win2008用不了这个
它们的53端只能分配给SYSTEM进程,也就是系统服务。
要用2004年一个网友写的runassrv这个工具把它改成以服务进程运行才可以用。
不过因为runassrv常被木马用来加载自己进服务里,被很多杀毒软件当成木马
现在不好找下载,我也不想发,免得被小白说我发木马,要用的自己找。
将 add_server(“isp”, “202.96.209.133″, 53, False) 里面的 202.96.209.133 修改成境外DNS。
是改成自己本地ISP的DNS,这个第二DNS是用来解释
add_lookups(“isp”, [
“.cn”,
“.qidian.com”,
“.baidu.com”,
“.sohu.com”,
“.163.com”,
“.sina.com”,
])
你把这个也改成8.8.8.8
就会出现打开baidu帖吧,百科十分慢的情况。
人家作者已经都设定好了,不懂就不要乱改。
下回来的202.96.209.133是电信的ISP,网通或别的线路用户请改成自己的原DNS,不然就会出现
网通蛋疼去连电信的baidu镜像的毛病。
这个习惯性思维了,真的不明白了,感谢指教。
打开主程序后好像没反应呢
那你修改本地DNS试试啦。
DNS劫持什么的,最讨厌了。这个也许是个好消息。
没有测试。
这个我特地去windows7 64bit 下测试了,确实有效,可以解析出正常的IP,当然IP被墙了是连不上的。
之前有一个vpn被污染了,用这个方法,也连上去了。
你可以把之前的那几篇dns劫持的文章整理下哈
感谢测试,我有时间整理下。