pwx-dns-proxy — 基于 Python 以及 Twisted 框架写成的支持几乎所有的 DNS 请求类型的DNS 代理服务器

2011年8月11日 | 分类: 翻墙相关 | 标签: , , ,

这个 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

感谢网友AvP提供的方法

本文原始地址http://igfw.net/archives/4300

  1. 打酱油
    2011年8月25日13:59

    nicovideo是IP被墙了吗? 用这个反DNS污染上不了nicovideo

    • iGFW
      2011年8月25日14:27

      不是域名污染,可能是基于关键词的TCP连接重置和IP封锁吧 参考 http://igfw.net/archives/594

      • 你才是受
        2011年9月1日03:34

        Nico 应该是IP封锁,tracert 后发现断在电信那里。

        还有,pwx-dns-proxy,在网站不稳定的时候, 还是会DNS劫持,跳转到114,

        • iGFW
          2011年9月1日09:07

          pwx-dns-proxy区分国内国外网址,一般国外的走tcp的国外DNS服务器,国内的走udp的国内DNS服务器,所以国内网址会被电信DNS劫持,不过国外网址不受GFW DNS污染,作者这样做是为了不影响国内网站访问速度。

  2. 2011年8月16日20:18

    安装成服务,就可以不看黑窗口了,不过建议先用黑窗口调试好再用服务加载:

    @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

    • iGFW
      2011年8月17日07:59

      感谢支持。

    • 2012年9月8日15:26

      试了几次都失败,原来是引号全是中文的,WordPress喜欢换成中文引号这个「人性化」功能特蛋疼。。

  3. 路人甲
    2011年8月13日01:55

    我找到一个可以用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污染也不会损失速度。

    • 路人甲
      2011年8月13日02:28

      说漏了,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端口吧。

      • 2011年8月13日03:37

        测试成功有效

      • 2011年8月13日03:38

        补充,这个过程有点麻烦。。。

        • 路人甲
          2011年8月13日10:48

          这个是为了以后,如果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服务器地址

        • 路人甲
          2011年8月13日11:14

          把命令写到批处理文件里就行了(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教程了…..

      • iGFW
        2011年8月13日08:24

        感谢支持。。。

  4. 路人甲
    2011年8月12日23:58

    a :我用64位win7没那么麻烦。
    不过还是学习了一招

    你的没有端口限制吗?难道是因为我开ICS网络连共享把这个端口保留了?
    搞不清楚了,直接运行出现端口监听失败就用psexec吧。

    注意:
    你直接双击dnsproxy.exe窗口只是一闪就关了,就是失败了。
    成功运行后会有一个窗口显示当前DNS解释情况。那个窗口还不能关,关了就没dnsproxy.exe了。

    还有记得把所有网卡,网络连接的DNS改成dnsproxy.exe的服务地址,不然没用。
    或是把 “本地连接” 的DNS改成dnsproxy.exe,别的网卡,连接上的DNS都删掉。

  5. 路人甲
    2011年8月12日17:11

    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窗口运行别的程序,这个帐号是给服务进程用的,别把没用的进程弄进去。

    • iGFW
      2011年8月12日21:05

      感谢支持

    • 2011年8月12日22:10

      我用64位win7没那么麻烦。
      不过还是学习了一招

  6. 路人甲
    2011年8月12日16:15

    win7 vista win2008用不了这个
    它们的53端只能分配给SYSTEM进程,也就是系统服务。
    要用2004年一个网友写的runassrv这个工具把它改成以服务进程运行才可以用。
    不过因为runassrv常被木马用来加载自己进服务里,被很多杀毒软件当成木马
    现在不好找下载,我也不想发,免得被小白说我发木马,要用的自己找。

  7. 路人甲
    2011年8月12日16:05

    将 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镜像的毛病。

    • iGFW
      2011年8月12日21:05

      这个习惯性思维了,真的不明白了,感谢指教。

  8. ygj
    2011年8月12日01:21

    打开主程序后好像没反应呢

    • iGFW
      2011年8月12日06:32

      那你修改本地DNS试试啦。

  9. 2011年8月11日17:53

    DNS劫持什么的,最讨厌了。这个也许是个好消息。

    • iGFW
      2011年8月11日18:06

      没有测试。

      • 2011年8月11日19:12

        这个我特地去windows7 64bit 下测试了,确实有效,可以解析出正常的IP,当然IP被墙了是连不上的。
        之前有一个vpn被污染了,用这个方法,也连上去了。
        你可以把之前的那几篇dns劫持的文章整理下哈

        • iGFW
          2011年8月11日19:15

          感谢测试,我有时间整理下。