借用Google的云来看外面的世界

来源:http://www.hustyx.com/misc/agtodXN0eWl4aWFuZ3IPCxIHQXJjaGl2ZRjR6wsM

本文介绍如何让教育网也能访问外面的世界。

国内的网络大致可以想像为这样一个模型,教育网与电信网相连接,电信网与国外网络相连接, 教育网与电信网的连接是一条细管道连接,意思是连接处流量受限制,所以教育网访问电信网的网站会比较慢,电信网访问教育网资源也会很慢,所以一个稍微好点 的网站公司会使用双服务器,一个连接教育网,一个连接电信网,我们称这个细管道为电信与教育的鸿沟。电信网与教育网之间的连接是过滤连接,意思是对国外不 和谐网站的请求都会被屏蔽掉,达到和谐中国的目的,这样一个过滤装置有一个与中国长城齐名的名字,即GFW(Greate Fire Wall)。这只是一个简单的模型,实际网络当然要复杂得多。

所谓代理就是请求转发,比如有一台服务器,或者是一堆相互连接的服务器,它们 既与电信网相连接,又与教育网相连接,如果你是教育网,你想请求电信网的网络资源,你将你的请求发给这些服务器,这些服务器帮你请求资源,并将请求结果转 发给你,如此就是代理了,由于代理服务器同时与两个网络相连,而且它们专门完成这样的工作,所以在你看来,有了代理,教育网访问电信网也相当快,而且由于 电信网与国外网络是"通畅"相连的,所以设置一个好的电信代理后,只要你访问的资源是和谐的,教育网访问国外资源也是没有问题。但是好的代理一般不是免费 的,免费的代理一般都是挤满了人。

现在的问题是,我们希望访问那些"不和谐"的网站,想看看国外真实的世界,这时怎么办呢?一样是代理,如 果你是电信网,同样的道理,你需要在国外有一个代理服务器,而且该代理是和谐的。你直接请求不和谐的网站,即使你是电信网,请求也会被过滤掉,当然由上面 的模型可知,教育网更别妄想了,这时你将请求发给国外一个没被过滤的服务器,它收到请求内容后,帮你请求资源,然后它将请求的结果转发给你,如此做,在 GFW看来,你一直都在连接一台和谐的服务器,会认为你是良好公民,而实际你是在偷看外面真实的世界。所以,一些朋友的做法是在国外买一个虚拟主机,通俗 地说是网站的空间,做不做网站是次要的,重要的是他们将这个虚拟主机加上转发请求的功能,即改装为代理服务器,当然有基于低层的SSH socket转发,这个效率要高一些,也有效率低的基于Http包转发,这样就能上facebook,上twitter,上youtube什么的,了解一 个完整的世界。当然这个是个人解决方案,就我所知很多大型公司都在国外设有专门的代理服务器,为自己的员工提供方便,他们的理由也很正当,因为有外籍员工 嘛,和谐中国,总不能把日本人,美国人,英国人,法国人都和谐了吧!

如果你是电信网,要看外面的世界还是很方便的,因为发达国家的免费代理 服务器很多,所以你到网上找一个韩国或者日本的免费代理还是很简单的,这样避免了买虚拟主机的花费,不过就我的感觉来看,国外免费代理都相当的不稳定,时 好时坏。国外还有一类代理,这类代理比较稳定,多是国外大学里的代理服务器,主要是方便学术研究查资料用的,这类代理的特点是它们端口号都很特别,多像 3124,3127之类的,与普通代理的80端口,或者8080端口相比差距很大,这类代理有一个很大的问题,就是它们不支持登录,确切地说是只能 GET,不能POST,提交密码,提交评论都是不行的。

作为一个穷学生,只用得起教育网,但是又想上上twitter怎么办呢?这就要借助 于Google的云了,Google的服务器在数量上是相当惊人的的,据说服务器放在集装箱里,集装箱堆成一个足球场那么大,即使千分之一的老化概率,每 天都会有相当多的服务器要挂掉,为了及时更换服务器,管理员要穿溜冰鞋上班,所以,你甚至会感觉到在国内上Google还比上百度要快好多,据说即使在相 当恶劣的环境,如果有必要,Google也会放置服务器,再加上Google的云算法据说也是相当相当的牛,总之一切的一切,都保证了一点,就是如果 Google有一台服务器愿意帮你转发请求,那么世界的每一个角落你都能迅速访问到。这为我的妄想奠定了基础。

那么具体怎么做呢?首先我要 提一下GAE(google app engine),这是一个免费的网站空间,支持java和Python,这样一个Google的服务就是基于Google云的,所以你应该很快能够想到使 用http转发,就可以达到目的了。很早就有人想到这个了,也有相关文章介绍如何让Google的服务器为自己做代理,我自己也曾写过一个,图片文字还 行,但是视频和认证就没法子了。看到这里不要绝望,众人都渴求的东西总有一些乐于分享者,去实现,去share,现在有一个很好的开源项目解决了这些问 题,该项目就是wallproxy,使用这个网址http://code.google.com/p/wallproxy/,你能看到它的详细介绍与说 明。wallproxy分为两部分,一部分需要上传到GAE上,负责转发请求,这意味着你要申请GAE账号,搭建GAE的开发环境以便上传代码,另一部分 是在本地使用的,负责发送请求,不管如何,你都需要在本地安装Python(Python2.5或者Python2.6)。wallproxy默认使用代 理IP为127.0.0.1,端口为8086。如果你不想陷入这些复杂的设置,我这里有一个已经配置好的本地部分,下载下来后直接运行里面的proxy.py,设置浏览器的代理地址为127.0.0.1:8086即可,而服务器端呢?呵呵,我当然已经弄好了,你就省去了很大的麻烦,如果哪一天有空了,你可以再慢慢来整一个独属于自己的。

现 在很多网站都是使用的https,而不是简单的http,不同处是增加了证书认证,没有证书认证会使你在很多时候注册一个新账户碰壁,比如你将无法在 twitter注册账户,我使用Chrome浏览器,加之本地是Ubuntu系统,所以很方便就能完成导入证书的操作,具体步骤如下:
1、安装nss-tools:例如Ubuntu sudo apt-get install libnss3-tools
2、导入根证书,假设文件路径为/wallproxy/cert/ca.crt
certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n WallProxy -i '/wallproxy/cert/ca.crt'
以上2步就导入成功了,如果需要查看及删除的话
列出所有证书:certutil -d sql:$HOME/.pki/nssdb -L
查看证书详细信息:certutil -d sql:$HOME/.pki/nssdb -L -n WallProxy
删除证书:certutil -d sql:$HOME/.pki/nssdb -D -n WallProxy

如果是Windows系统,应该也需要借助第三方工具来解决这个问题,方法我不知道,相信网上会有解决方案。


没有评论: