项目地址:
https://code.google.com/p/pwx-dns-proxy/
简介:
这个 DNS 代理服务器是基于 Python 以及 Twisted 框架写成的,并且它支持几乎所有的 DNS 请求类型,包括 A 地址以及 AAAA 地址(IPv6)。
远程服务器的 DNS 应答根据它们的 TTL 值将会被缓存在本地。
另外,这个服务器能够链接多个上游服务器,并且根据查询域名的不同,使用特定的服务器查询。
在查询上游服务器的时候,可以(强制)使用 TCP 协议,而不是 UDP 协议。这样,就可以避免大部分 DNS 污染了。
提供了本地 HOSTS 表的功能,支持 IPv4 和 IPv6 的地址。
这个项目的初衷是为中国大陆的用户提供一个完整的 DNS 代理解决方案——因为它能够透过 GFW,获得被屏蔽的网站的真实 IP 地址。另外,当中国大陆的用户使用 VPN 翻墙的时候,他们既能够使用更安全的、国外的 DNS 服务器,也能够享受更快的上网速度——DNS 查询结果会被缓存,而且大陆拥有 CDN 的门户网站也能够通过 ISP 的 DNS 服务器查询地址,不至于翻山越岭到美国的服务器上访问这些门户网站的内容。
终于无需再去频繁的更新那些被 DNS 劫持的站点地址 HOSTS 文件了!而且针对仅仅遭受 DNS 劫持的 Dropbox,Xmarks 以及那些境外文件服务网站,使用这个工具比使用 VPN 以及 SSH 都要来得方便(当然前提是站点本身没有被墙,只是 DNS 被污染)
DNS 服务器效率测试:
在服务器配置文件中我使用了 202.14.67.14 这个香港 ISP 的 DNS 服务器来查询,由截图看出, PWX 的确有缓存功能。
配置文件 dnsproxy.conf 中有详细的参数解析,个人建议 TCP 查询并不一定要用 8.8.8.8 这个 Google 的服务器地址,北方可以找韩国的,南方可以用香港的 ISP DNS 服务器。
在Windows下,使用 nslookup 命令时加上 -vc 参数可以强制使用 TCP 协议而不是 UDP 协议进行 DNS 查询。例如 :
nslookup -vc encrypted.google.com 8.8.8.8
进行DNS查询就可以得到正确的查询结果,其中 encrypted.google.com 是要解析的地址,8.8.8.8 是解析用到的 DNS 服务器地址,用此命令可以预先测试 DNS 服务器是否支持 TCP 方式的查询。
安装调试方法:
直接解压,运行 dnsproxy.exe 会有个黑窗口停留在任务栏,如果黑窗口一闪而过请查看配置文件是否有错。设置系统 DNS 服务器地址为 127.0.0.1 ,启动浏览器,应该能正常打开网页,同时黑窗口会有一些查询调试信息出现。正常后,可以运行 install.bat 来把这个软件安装成系统服务,开机自动运行而且不会有黑窗口出现。
DNS 服务器为保证安全性会随机打开一些高位端口(1024+,我机器都是20000+的端口号)来执行查询通讯,确保你的防火墙允许这个程序访问这些端口,如果系统有限制可以通过 TCPOptimizer 来改。