2015年5月26日星期二

DNSForwarder 杜绝DNS污染 直连高速翻墙


20140219120928

此软件非原创,转载自:http://micasmica.blogspot.com/2011/08/dns.html


由于谷歌新一轮被墙,导致GFWList无法更新,DNSForwarder使用困难。
DNSForwarder其实不仅仅是个解决污染的工具了,还附带了一点DNSMasq的意思在里面。研究了一下配置文件,终于想出一个比较合理的方案:
国内域名通过TCP通道走114.114.114.114解析,被墙域名通过UDP通道开启防污染走OpenerDNS来穿墙(感谢评论中Solidium的提示)。 区分方式继续使用GFWList,为了保证GFWList下载成功,在排除域名中增加 *.*google*.* 条目,保证所有google相关域名都走UDP通道。
配置文件我已经改写完成,并更新了最新版的DNSForwarder 5.0.7,打包后分享给大家。
这次不传百度网盘了,怕和谐,就放主机里了,点这儿下载:http://nonofiles.qisns.com/dnsforwarder.7z
下载后不用任何修改,直接运行就可以。需要做到开机自启动请自行添加-d参数的启动项,系统DNS设置首选 127.0.0.1,备用114.114.114.114即可。
亲测谷歌推特脸书U2B在https下全部能打开,基本上是目前不用代理翻墙最好的解决方案了。



貌似最近U2B视频支持https方式直接观看了,这样一来就意味这只要我们能杜绝DNS污染问题,就可以轻松地高速观看U2B上的视频了,任何其他的穿墙方式都无法比拟,因为它们都是代理中转,而通过https直连谷歌服务器就相当于无视墙的存在,不存在性能损耗,实际测试效果也确实令人惊叹,Google的分布式服务器相当给力,在我8M的移动网络下竟然能非常流畅地播放1440P,页面打开速度和视频跳转速度完全不输优酷!
20140219120928
其实实现原理并不复杂,还是和上次我写的脚本同一个思路:用TCP方式查询DNS来杜绝污染即可。
然而要做好这一点并不简单,因为目前支持TCP方式查询的公用可靠的DNS主要是Google DNS和OpenDNS,但是他们毕竟是国外的DNS,用他们去解析墙外网站没问题,但是解析国内网站很可能分配到国外服务器去导致速度缓慢。不但要能翻,而且要翻得舒服,就不那么容易了。毕竟每次要翻时打开相关软件,看国内网站又要切换回来很麻烦。现在能做到比较好的自如切换方式就是用代理切换软件,效果也还是可以的。VPN那种我看还是算了,毕竟是全局,太不方便。
话说回来,DNS查询如何做到墙外地址用TCP方式查询Google DNS实现突破封锁,而国内网站只使用国内DNS查询呢?
我还真找到了这样的软件!名曰 DNSForwarder
作者原文:http://micasmica.blogspot.com/2011/08/dns.html,当然也是在这里下载 (提示:需要先穿墙才能访问
20140219122258
使用其实很简单,下载回来解压,你可以先看看说明和它的config配置文件,基本上就是全套配置和使用说明了。
最简单的使用方法是,执行和你操作系统匹配的编译版本,然后把你当前活动连接的DNS设置为127.0.0.1(回环地址,是Dnsforwarder默认的请求接收地址),这样的话所有的DNS解析请求都会先送入Dnsforwarder,然后由它来接替系统的解析工作。
默认情况下Dnsforwarder会全局向Google DNS以TCP方式解析地址,也就是说完成了上面的简单操作,你已经可以访问墙外地址了。只不过此时它是全局方式,也就是不分青红皂白一律向Google DNS解析地址,有可能造成国内网站访问缓慢。
如果你对穿墙的要求不高,偶尔看看即可,那么到这里就可以了,要用的时候执行上面的步骤,不用的时候把DNS改回来即可。
现在试试访问Youtube,Google Plus,Facebook等,应该都可以上了,而且速度相当快。
如果不能访问,请检查
1.刷新系统DNS缓存
2.检查访问地址前有没有加https://
3.部分浏览器内部也有DNS缓存,尝试重启浏览器
4.没有看到链接被重置的字样时请耐心等待,有时解析时间较长
5.Twitter等少数网站不仅仅是被DNS污染封锁,所以仍然不能访问

下面是进阶篇:
首先强烈建议你看明白作者给的config里的说明,很有帮助
我上文提到的,根据国内外网站区分不同解析方式的配置,其实作者已经写好了。就在“配置文件实例”里面的“防止污染方式二”,把这个txt复制到上层文件夹然后更名为“dnsforwarder.config”覆盖掉原来的即可。然后我建议再做些小调整,用记事本打开这个config文件,你会看到里面分别给TCP Server和UDP Server写好了两组地址。
TCP对应的就是国外网站查询的DNS,UDP则是普通国内网站所使用的。
我的建议是TCP部分使用8.8.8.8,8.8.4.4,作者把4.4的放前面了,我不知是何意义,我个人颠倒过来了。
UDP服务器一般用114.114.114.114的就很好,绝大多数国内运营商支持得都很好,各大网站分配的IP都比较合理。如果你不习惯或者发现速度没以前理想,也可以换成你原来运营商给你分配的两组DNS。
保存好了配置文件,执行相应的exe执行文件即可使用了,同上面一样,记得设置当前连接的DNS!
如果想更惬意些,甚至可以让它开机自启动。Dnsforwarder提供了静默参数,你可以在启动项里添加它!然后加上 -d 参数即可实现静默启动,看不见任何窗口,这样你就可以完全忘记它的存在了,访问国外极速秒开,国内依旧秒开,如此惬意!
关于如何添加启动项,这个网上有很多教学,我是用注册表加的,如图:
20140219124609
当然如果有时出现了些小问题,你也可以从任务管理器把它结束掉再手动重开,并不需要再次重启。


最后说几句:用TCP方式进行DNS解析是一种比较另类的穿墙方式,比起其他VPN代理方式来说,无需花费金钱,且不存在流量中转等同于直接访问,速度非常出色。我个人是非常推崇的,现在连GoAgent都不用了。Host的方法理论效果一致,但是总是需要维护,而且没法涵盖到所有域名,要知道U2B的视频流的节点实在太多,几乎不可能获取完整的域名列表。缺点自然是因为不是所有被封锁的网站都吃这一套的,最起码Twitter就不可以。另外只支持https方式访问,有时会带来些不便,不过反正翻多了,https也成了习惯了,也不算个问题。
还是强烈大家一试的,最起码从性能速度上讲,我还从未见过任何其他方式能够比拟,如此下来收看U2B真的是一种享受!

另外给不能访问作者博客的朋友们先提供个网盘分流,发表此文时的最新版:http://pan.baidu.com/s/1bnEJC2j

1 条评论:

  1. 看完了,有个疑问,是不是这样操作之后就不用梯子了?有了正确的DNS,又是通过https访问,是这样吗?因为看文章里没有提及梯子。

    回复删除