Rproxy,一个基于Twisted的反向代理,以及锻炼身体工具推荐

本文如需转载,请注明来自 http://obmem.com,此域名已墙所以没事,发翻/墙的东东要慎重@@。

如题写了个反向代理的东东,一如我写得诸多小东西一样,我开始思考着有没有价值发出来——大部分小东西都是没太多价值的,但是这个我认为应该有些不同:于是我开始调查目前翻/墙手段的现状。

1. 锻炼身体的工具

1.1 最上等的工具莫过于ssh tunnel或vpn


内容加密意味着除了ban vpn的ip外,墙没有任何手段来组织你锻炼身体,唯一的风险在于ssh所在IDC或者他们使用的ISP监听你的请求,这在除了天朝以外的地方大概都会是违法行为,所以风险会小很多。

不足处是并不是所有人都能搞到/部署墙外vpn或ssh,这也算是此类工具的缺点吧。在锻炼身体方式中我觉得最万能、最方便也最安全的还是tunnelier+ssh+autoproxy的方式,如这篇攻略所言。前提是有ssh账号。

PS。前几天失手买了个网速其烂无比的埃及VPS,性能倒是很不错,因为是一买就是半年的缘故,闲着也是闲着,决定贡献出来,账号密码都是egypt,服务器IP是41.223.52.83,系统为ubuntu 10.04,该账号有sudoer权限,想要锻炼身体或者没信用卡买米国VPS,但是也想玩玩试试手的都可以试试看;root权限威力太大,菜鸟请慎用。这个东东因为网速巨慢,上限大概也才200K,到国内单线程可能才20K,所以我一点都不担心会被人投诉abuse,哈哈。

1.2 次等的手段就是代理服务器

事实上所有其他工具都可以归于这一类,我想重点讨论的也是这一类。任何形式的代理服务器,如果不是你自己所有的话,都是有风险的。代理服务器可以轻松地监听你所做的任何操作,甚至连普遍认为的高匿名性的TOR,也不例外:区别只是在于你可以祈祷中转你请求的那几台服务器人品足够好而已。

传统http,socks代理服务器:比如5u/proxy.net提供的一些免费代理服务器,在浏览器中设置即可使用,优点是简单易用,兼容性非常强,缺点是不安全,容易被窃听。

服务端-客户端结构的代理服务器比如:free门,no界,gapp/proxy等。有客户端意味着可以对内容进行加密,这一类代理我认为是代理中最出色的:他们的优点是既完全加密又有非常好的兼容性,而缺点就在于需要客户端,并不是在所有电脑上你都可以装客户端的。

这之中我更推荐gapp/proxy,因为该服务可以自架在google的appengine上,你只需担心google会监听urlfetch的风险,而不需担心no界等服务器端记录你的请求。我认为google还是比他们可靠一些的。在gae翻墙工具中,又有两个新一点的wallproxy和hyk-proxy,更是加强了许多。

但是说实话,gae虽好,但是部属起来麻烦;光看那让人望而生畏的文档就让一般的庸手望而却步了。完成部署的人要么是geek一族,若原属电白那实在是毅力非同一般。

网页代理:很流行的东东,也有叫做反向代理的,但是其实这个称谓不太科学,反向代理是指“给网站做代理”而非“给用户做代理”,一般是用于服务器端的负载平衡的工具,并不会在内容上做手脚。而所有网页代理都会替换网站的原本返回值,最起码他们必须得替换链接,次常见的就是插入js,插入广告了。常用做网页代理的工具有:PHProxy,Glype等等。

这些东西部署简单,而且铺天盖地,但是除非自己架设,否则我是不太敢使用这些代理,这太容易修改成钓鱼版了,铺天盖地的网页代理中,多少具有钓鱼功能?我觉得可能还是有一大部分的。

同样网页代理也可以做到gae上去。例如mirrorrr-plus和gae-rproxy,前者的代表是红杏/浏览,后者的代表是wagagate;他们都是很强大的网页代理工具,甚至rproxy也有像gae-rproxy借鉴了一些功能,例如中文转码几乎是原封不动地调用了gae-rproxy的anti-crab代码。这两种网页代理工具相比gapp/proxy的优势在于,配置的人必须geek,而使用者则不必;无客户端,于是可以在任意环境中使用,比如手机;可以说这也是网页代理的最大优势。

2.Rproxy

回顾了那么多,似乎没什么必要再开发一款功能雷同的工具?

试想一下这个场景:某站站长发现自己被墙,如果是IP被墙,那么就意味着要换IP,一般来说只能是换机房;如果是域名被墙,那么更加麻烦,还得换域名。在此之前,站长只能通知用户说到:很抱歉我们被墙了,翻/墙来看吧,推荐翻/墙方式A、B、C、D等,请自行挑选合适的手段。用户非常无所适从,随着时间的流逝,一部分用户可能会因为觉得翻墙过于麻烦而逐渐转向国内同类站点。

如果这时,站长可以很方便地进行一分钟配置,然后告诉用户,非常抱歉我们被墙了,目前我们已经找到了临时的解决方法,你们暂时可以通过另一个域名访问,请静候我们尽快地解决问题。这时对所有用户来说,只是网站暂时用另一个网址来访问而已,完全没有任何其他障碍。与此同时,站长可以轻松悠哉地着手处理搬家或其他事宜,而不用火烧眉毛似地急着通宵摆弄新系统上线。

rproxy就是由这个想法而诞生的,不同于一般的网页代理,rproxy试图做一个”真正”的反向代理,让用户根本就察觉不到”代理”的存在。

试用rproxy

rproxy的优势:

  • 无客户端 : 意味着在任何平台,任何环境下都可以访问,这也是所有网页代理的优势。
  • 更好的性能:只对所要反向代理的网站进行地址替换,节约了不必要的系统开销。
  • 访问感受去代理化: 对网站的访客来说仅仅是地址的改变,不影响任何功能上的使用。
  • 基于twisted:所以性能有保障的同时,代码也非常简单,核心代码仅仅几十行,一目了然,易于维护修改。
  • 不基于GAE:所以即使GAE被墙了也是可以用的,并且没有GAE的种种流量和API调用次数限制。

rproxy的劣势:

  • 兼容性:与所有网页代理的通病一样,由于无法解析javascript,所以对javascript比较复杂的应用完全无解。
  • 速度:访问速度取决于代理站点的网络速度,不像GAE那样可以利用google的网络。
  • 有不擅长的应用环境:太大的站点,如果站点庞大到需要利用cdn一类的技术,需要在多个站点之间反复跳转,javascript过于复杂,有大量flash应用(暂时无法进行内容替换)等等。诸如you/tube之类的站点无法很好地进行代理。

3.Rproxy的简单架设攻略

apt-get install git-core python-twisted python-mako python-openssl apt-get install python-setuptools; easy_install bitstring cd /var/www; git clone git://github.com/observerss/rproxy.git cd /var/www/rproxy vi rproxy.py #设置PORT和DOMAIN twistd -y rproxy.py

然后访问 DOMAIN:PORT 设置反向代理选项即可,如果裸用rproxy,请把DOMAIN设置成”DOMAIN:PORT”。推荐还是用nginx/apache2转发一下端口。例如nginx就可以这么配置:

server {     listen          80;     server_name     DOMAIN *.DOMAIN;     root            /var/www/rproxy;     location / {         proxy_pass http://127.0.0.1:PORT/;         proxy_redirect off;         proxy_set_header Host $http_host;         proxy_set_header X-Real-IP $remote_addr;         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     } }

配置完成后,直接访问 DOMAIN,即可在web页面配置反向代理。

配置说明:

  • target:需要做反向代理的网站
  • alias:别名,如图,取完别名后即可用 6p.rproxy.org 访问 6park.com
  • html : 是否替换html链接
  • css:是否替换css中的链接
  • js:是否替换javascript中的链接,一般以上三项全选则可完成翻墙
  • flash:是否替换flash中的链接,目前所有网页代理都无法替换flash,不过我倒是有点思路,可惜有点麻烦,暂时还没搞定
  • global:把该设置全局化,这意味着在比如同时给google和6park做了反向代理,那么访问gg并搜索6park的时候,gg返回的6park链接也将是转义过的。
  • SSL:和rproxy服务的链接将用https代替http,好处是加密连接;缺点是需要ssl证书,否则就等着浏览器疯狂抗议吧。ssl浏览会比较慢且twisted/nginx似乎在这方面有点bug。注意:如果该网站本身就支持https浏览,这项千万不能设置成Y,否则会让rproxy不能正常使用。如要https浏览,直接把http改成https即可,rproxy会自动使用ssl访问目标。

已知bug:

  • 访问twitter的signup会无限redirect
  • 对于使用google captcha反机器人的站点,因为使用次数过多,会触发captcha,而google会检查captcha的referer,导致其不能显示。例如twitter,需要禁用浏览器referer(例如在firefox中输入about:config,搜索referer,设置为0)
  • you/tube的swf自定了baseurl为www.you/tube.com,所以翻/墙不会成功。
  • httponssl功能需要服务器设置ssl,而且没有证书的话真不太好使。

没有评论: