Total Pageviews

Wednesday, 6 April 2016

用squid搭配privoxy,提升tor访问网页的速度

由于中国有个GFW,所以常常访问不了国外网站,有个软件叫tor,它提供类似P2P的技术,使用这个软件作为代理,它会随机地分配一个国外的网友的机器做代理,这样就可以访问到被拦截的网站了。

这个软件不用我详细介绍,而且它的缺点,常用的人肯定知道,就是速度太慢,访问被拦截的站速度慢点可以理解,但是用这个代理之后访问所有的网站都很慢,这样一来页面中一些没有被拦截的元素,本来访问比较快的,使用tor代理后变得奇慢无比。所以要想一个办法,可以让被拦截的站从tor代理,而无拦截的网站和链接就直接访问,何必经过一层tor?事实上即使是被拦截的站里,也有很多没有拦截的部分,比如youtube中的视频地址,大部分没有被拦截,假如直接访问,那么速度是比经过tor快很多倍的。

这个架构图我就不画太清楚了,免得被GFW。

浏览器 --(设置代理)--> 正向代理squid --(被拦截域名)--> privoxy -> tor
                              |
                              |
                              ---(一般网站)---->直接访问
   
其原理是利用squid和dns配置来实现的,原理是将原先tor所推荐用的代理服务器privoxy换成squid,然后想办法用squid做一个控制器,小部分被拦截的域名经过privoxy到tor上,另外大部分没有被拦截的域名squid就直接去这个域名取得数据:

1) 一般的网站,从dns服务器取得ip地址,squid就从该ip下载数据。
2) 被拦截的站,把其域名在/etc/hosts或自己搭的dns服务器指向到127.0.0.1。
3) privoxy配置端口为80,或127.0.0.1:80,不用原先的8118。

这样,用户可以在浏览器配置代理为squid,然后由这台squid分流,发现访问有问题的,在/etc/hosts里增加记录就去tor访问,多数网站本身就能直接读取,就不用经过tor,这样速度就快很多了。

配置我就不贴啦,不很难……我是装了个支持NCSA的squid,然后apt-get装上privoxy和tor,仅仅改动privoxy配置的端口为80,因为大多数网站都是用的80端口。

当然这样的配置还是有一些问题:

1) 尚未能解决访问地址是ip而非域名的链接,比如google的网页快照,因为ip是不能在hosts中改成另一个ip的。
2) 使用dns的好处是可以支持泛域名,这样就不用写一大堆域名,youtube上来就是几十个二三级域名的,用泛域名一个就写完了。
3) 要常常使用httpwatch找到页面中被拦截的元素,这比较麻烦,但一段时间后就能找得7788了。

我用这个代理主要配了youtube和wretch.cc,youtube和wretch的网页部分都被拦截了,所以要经过tor,速度比较慢;图片基本都没有被拦截,所以不经过tor,速度飞快,总体上看把图片的速度优化了就已经能明显感觉到差别.