Archive

Archive for the ‘SAE/GAE’ Category

GAppPorxy基本原理以及代理失效解决方案

June 29, 2010 3 comments

本文不介绍具体的部署方法. 以前没用过GAE的同学想试一试的, 参考此文: 用Google App Engine做个人代理服务器 第二版 .

众所周知, GFW 阻断内陆到国外网络连接的方式之一, 是关键词过滤. 所以, 一般稳定的翻墙方法都会做数据加密, 使得关键词过滤失效. VPN/SSH Tunnel 是做信道加密, HTTPS 则是在网络协议上加密. GAppProxy, 相当于是在用户客户端和GAE服务器之间建立一个内容加密处理 – 实际上不算加密了, 因为用的是再正常不过的压缩和编码算法.

先说 HTTP吧. GAppProxy的客户端是作为一个本地代理服务器工作的. 浏览器设置本地代理, 然后客户端把HTTP请求的地址提取出来, 把请求的目标地址做个base64编码, 与同其它信息一起以post方式, 发给部署在GAE的服务器. GAppProxy的服务端取到post数据后, 再构造请求, 发给目标服务器; 服务端收到目标服务器返回结果后, 检查content-type. 如果是文本类型(content-type里面包含text字符串), 做gzip压缩, 发回给客户端. 客户端收到数据不做处理, 交给浏览器.

HTTPS 方式的原理基本不变, 但存在的问题是GAppProxy的客户端, 服务端通信没有用上HTTPS, 还是HTTP方式, 所以不能保证数据安全性. 而且, HTTPS证书是得花钱买的, 客户端程序自带的HTTPS证书往往不被浏览器信任, 所以经常出现登录补上的问题. 总之, 设置GAppProxy 未HTTPS 代理的方式是不推荐的.

然后说下我自己改过的地方. GAppProxy的实现中, 有个使用google.cn:80 作为HTTP代理的逻辑. 客户端启动时, 会去尝试读取GAppProxy服务端的负载均衡服务器. 负载均衡服务器地址是写死的, 是http://gappproxy-center.appspot.com/available_fetchserver.py 在 /localproxy/common.py. 如果客户端读不到服务器, 客户端则设置google.cn:80为默认的http 代理. gappproxy早就是敏感词, 所以负载均衡的服务器很可能连不上; google也已经离开中国, google.cn:80 的代理大概也已经失效. 所以客户端很容易出问题. 前段时间我就遇到过. 其实很简单, 从代码里把google.cn 的代理去掉就行.

同时, GAppProxy是可以设置为公共的HTTP 代理服务器的. GAppProxy在/localproxy/proxy.py 里写死了是监听本地地址127.0.0.1. 而把这个地址改成0.0.0.0, 则变成了一个公共的HTTP代理服务器 – 这取决于你所在的网络. 如果是局域网, 那是局域网代理; 如果是有独立IP的虚拟主机, 那么全国人民都可以把它当翻墙代理用. 上次在twitter上还看到说, 有的公司业务需要教全体员工用GAppProxy翻墙… 我的第一反应是, 那公司的技术人员不靠谱…….. 局域网随便找台机器做翻墙代理就OK了…….

另外, 我这里有一份基于GAppProxy google code svn 的head version修改的客户端代码, 就一个proxy.py 文件. 去掉了google 代理, 并可以作为公共HTTP代理服务器用. 需要的同学点击这里下载源代码. 还有, 不要说我发此文加速GAE被墙之类的话. 我不爱听.

Categories: GAE, GAppProxy, SAE/GAE

介绍两种基于Google App Engine的翻墙方法

June 25, 2010 Leave a comment

前言:
1. 由于本人有后期的研究计划,本文以后可能会有更新。
2. 本文主要介绍Linux环境下的操作方式。Windows用户也可以套用类似的方法,本文下面会介绍下Windows环境的简单配置方法。

最近打算做一个Android平台上的翻墙工具,所以研究了下代理方式的翻墙方法。Windows下已经有不少现成的免费工具,但是Linux下 不多。西厢计划虽然牛逼,但是安装配置过程复杂,效果也不稳定。所以最近主要研究了墙外代理的方式。动手实践了两种:HTTPS在线代理,以及本地加密代 理。都是代理,但是绕墙原理不同。

HTTPS在线代理,是基于HTTPS协议的安全性。比较典型的,如mirror项目。体验地 址:https://opliruqi.appspot.com/。
优点:方便
缺点:不稳定,mirror项目在处理https登录可能有问题,所以只能浏览不需要https登录验证的网页。而且因为服务端有HTML文件处 理操作(如URL转换),可能会导致页面效果欠佳。

本地加密代理,是在本地把目标地址加密,GAE上解密并获取页面内容,处理之后发回客户端。典型的,如GAppProxy项目。
Windows系统下配置方案:
1. 安装python环境。一般是下载 http://python.org/ftp/python/2.6.5/python-2.6.5.msi 用64位系统的,下这个 http://python.org/ftp/python/2.6.5/python-2.6.5.amd64.msi
不过上面两个地址被墙,大家用迅雷试一试。(我怀疑python.org就是因为GAppProxy被墙的…因为GFW最怕这种应用层加密的 翻墙方法,这种方式不要求你有vsp,只需要有GAE帐号或者网络空间即可)
2. 下载客户端:liruqi.sinaapp.com/localproxy.zip。已经配置好了的。不过有GAE帐号的同学,还是用自己的吧,为了你们 的数据安全,也为减少我的压力。
3. 设置浏览器代理。把http代理设置为 127.0.0.1:8765

优点:稳定,快速,Youtube视频也可以看
缺点:还是SSL的问题,如果用其作为SSL代理,那么证书不被浏览器信任而频繁报错;如果不用,上了GFW黑名单的网站(如 twitter,facebook),有域名劫持,https依旧没法连上。这篇博文(http://blog.solrex.cn/articles /fix-gappproxy-set-cookie-and-https-cert-bugs.html)似乎在说,它解决了这个问题。但是我下载了它 的代码,测试不通过。

总之,SSL登录验证问题没有解决。GAppProxy配合西厢计划的反DNS污染的模块同时工作,(即GAppProxy只作为HTTP代理) 是最完美的。我打算在android平台上也做一个,其中的SSL代理问题也没解决,技术方案目前想到两种:
1. 订阅一个人工维护的域名到ip的列表
2. 把西厢计划的反DNS污染的模块编译到ROM中(这个工作已经有人尝试过,可行。但是对于用户而言技术难度太大)
其实,一般看看国外新闻,维基百科什么的,也用不到HTTPS。Twitter第三方遍地都是。不处理,问题也不大。

大家有意见、建议,可以到twitter(@liruqi)或者新浪微博(@liruqi)上讨论。本博客尚未开通评论功能。

–The orignal post is published on May-16 17:56

Categories: 翻墙, GAE, GAppProxy, SAE/GAE