Friday, November 12, 2010

[zz]IPv6+GAE——内网用户轻松穿越外网

转载自望月博客
IPv6+GAE——内网用户轻松穿越外网
文章太好了,不能不转

又是一篇投稿的文章,所不同的是,来自与非的 这篇投稿文章给我的触动很深,文章的质量和技术含量都是望月的博客接受投稿以来最高的,更让人感动的是,与非同学进行了精心的排版,提供了txt、pdf 和docx三种格式的文章。当然,看了文章内容之后,我也知道这篇文章所介绍的内容会让运营商和某些人(你懂的)不高兴,但是如果真的能对以广大在校学生 为主体的内网用户以极大的方便和实惠的话,那么何妨利用我的博客这个小小的平台,让更多的朋友享受这份实惠呢?姑且,能传播多远就传播多远吧。


引言

此文为校园网用户量身打造。
按本文介绍的方法,成功后的效果是:你只需登录内网,然后通过IPv6网络和GAE个人代理服务,即可访问外网。最妙的是,还顺便翻了墙。
本方案可以为你节省全部网费开支,当然运营商不大愿意看到的这样的结果,但我知道这是广大对于电信行业的垄断式经营怨声载道却又无可奈何的学子们梦寐以求的上网方案。我是站在群众一边的。
话又说回来,各位电信巨头在每个季度赚得盆满钵满之余,稍稍为祖国的教育事业让出一份利润,也不为过吧?要知道,大多数学生都是没有收入的,而目前提供给我们的各种网络业务,质量参差不齐,服务令人失望,而且仅此一家别无分号。
所以,每一个神奇的穿越技巧,都对应着一个糟糕的既有业务。
如果我们可以有选择,如果现在的各种服务都合情合理正规正常,没人会吃饱了撑的去折腾这些。
闲话到此为止,下面开始正式的技术讨论:)
首先,概述操作步骤如下,这是你将要在本文的指导下完成的整个配置流程:
1. 开启IPv6服务
2. 申请Google账号
3. 创建个人GAE应用
4. 配置GAppProxy/WallProxy代理
5. 更改本机hosts文件
6. 设置浏览器代理地址
7. 启动代理,开始上网!
以下是详细操作流程,按着步骤一步一步来,一定能成功的,祝你好运!

一、IPv6篇

1.1 准备工作:
1)关闭本地连接的第三方防火墙
当然你把本校的隧道地址添加为防火墙的白名单也可,但由于不同的防火墙软件设置不一样,一旦设置不对了就完全用不了IPv6,这里不再展开讨论。
关闭防火墙步骤:右击本地连接→属性,在“在连接时使用下列项目”中找到有你防火墙软件的名字那个选项,把前面的勾去掉,确定即可。
2)开启IPv6 helper服务
开始菜单,运行,输入“services.msc”(不要引号),打开服务窗口,找到“IPv6 helper service”,双击打开,启动类型改为“自动”,然后点击“启动”按钮,确定。

此外对于使用360安全卫士或者类似的国内所谓安全软件,由于它们会自作聪明地把这个必需服务给“优化”掉,所以你需要特别留意把禁掉的服务还原回来,否则IPv6是用不成的。
3)某些安装不成功情况下,在“运行”中输入“esentutl /p %windir%\security\Database\secedit.sdb”(不要引号),也可解决问题。
1.2 安装IPv6
(仅针对WinXP/2003,Vista和Win7自带IPv6,不必安装。)
开始,运行,输入“cmd”,回车打开命令提示符窗口;再输入“IPv6 install”,回车,搞定。
1.3 配置IPv6
由于校园网通常不是纯IPv6环境,所以需要一个“隧道”(很形象的比喻,具体技术细节大家有兴趣自己去搜吧),以电子科大的IPv6隧道设置为例(地址为:202.115.255.242)
配置步骤:
开始,运行,输入“cmd”,回车打开命令提示符窗口,输入“netsh”,回车,然后输入以下内容:
netsh>int
netsh interface>IPv6
netsh interface IPv6>isatap
netsh interface IPv6 isatap>set router 202.115.255.242
(注:对于非校园网用户,其实也可以借助隧道应用IPv6服务,比如设置为上海交大的隧道地址:isatap.sjtu.edu.cn,但速度就不很理想 了,看IPTV通常会很卡。所以对于公网用户,不妨直接参考下文GAE篇进行代理,Google可是IPv4/IPv6通吃的)
完成后可打开http://www.6rank.edu.cn/网站进行验证,看能否登录,若可,则表示你的IPv6大功告成。(也可通过在命令行中输入“ipconfig”查看本机IP地址中有无形如“2001:******”的地址段,这个地址就是你的IPv6地址,若有,即表示配置成功)
1.4 更改HOSTS文件
更改hosts是最初等的翻墙术了,但在IPv6环境下效果那是出奇的好~
打开“C:\WINDOWS\system32\drivers\etc\”路径下的hosts文件(可用记事本打开);
在末尾添加一组以Google为首的n多IPv6网站地址目录(传送门——最新Google IPv6 hosts地址集合:https://docs.google.com/View?id=dfkdmxnt_61d9ck9ffq,你会发现Google的IPv6地址数量很可观,多多益善啊!都复制进hosts里吧,这些可都是捷径啊~)
保存,退出。
你再用浏览器打开Google看看,是不是可以登上了?还不会跳转到Google HK,而且居然还可以查看网页快照!开心吧?且慢,再输入一个youtube.com试试,额滴神啊,阔别多年的U2B又回来了!爽翻了吧,呵呵~
好,我们歇一下,先开罐啤酒为生猛的IPv6干一杯~
接下来,轮到第二位主角——GAE——登场了,有了Google的引擎推动,IPv6那可是如虎添翼啊!

二、GAE篇——暨GAppProxy代理详解

前文所介绍的IPv6技术只能达到访问部分外网的目的,可网络的世界是广阔的,天下甚多网站,一个小小的hosts岂能装得下?
况且所谓hosts翻墙,是很不稳妥的。
景德镇的局域网总是会出现各种意想不到的问题,所谓道高一尺魔高一丈,想用傻瓜的方式翻过GFW的高墙,那是不可能滴~
老罗不是说过么,坏人总是更勤奋一些。(我是坏人么?)
其实,下面将要介绍的GAE应用下的GAppProxy代理方法也不复杂,按照步骤操作,很快就能搞定~
Here we go!
2.1 准备工作
准备工作只有一条:你要有一个Google账号,也就是一个Gmail
什么?你只用Qmail?呃,你还是真不关心自己的邮件安全,趁早换吧~原因不多说了……总之这种“网络严肃服务”(我自己下的定义,就是指邮箱、域名、账号等对自己来说等很重要的服务)还是尽量远离天朝IT企业,这些服务在他们的托管下,用着心里不踏实。
当然,这不是他们的错。
况且你已经摆平IPv6了,还添加了n多Google hosts,不整个Google账号享用一下,岂非暴殄天物?
好了,赶紧申请一个吧~(传送门:https://www.google.com/accounts/)
2.2 创建GAE
毫不夸张地说,GAE(Google App Engine)是Google划时代的产品。它的强大和便捷远远超出你的想象……打住打住。
下面是具体操作步骤图解:
1)打开”http://appengine.google.com/”,输入你的Google账户、密码,登录;

2) 点击“Create an Application”;
国家一栏选“Other”;
电话号码填“+86 你的手机号”(注意一个手机号只能注册一次);

3) 片刻之后,Google会往你的手机发送一个验证短信,把验证码输入进去,确定;

4)填写你的Application Identifer,这个就是你以后上外网要仰仗的永久地址了,想个好点的名字哈(只能使用小写字母、数字和连字符”-“,长度不能小于6个字符。这里我使用的是uestcproxy,望文知意啊);然后输入Application Title,确定;

注:“Authentication Options (Advanced)”中最好选择默认选项,即“Open to all Google Accounts user”,其中第三个选项(Open to all users with an OpenID Provider)貌似很有用,不过现在尚处于实验阶段,不推荐使用。
5)GAE应用创建成功!

以后使用时可以进入“Dashboard”,查看流量等使用信息。

注:每个Google账号可以申请十个GAE应用,每个GAE应用每天都有1G的流量(我通常一天的流量不超过100MB),足够用了。
2.3 配置服务器端
上一步仅仅是在Google为你申请了一个应用,但还未激活。你现在需要一个小小的上载工具,把Google服务器中的那个GAE代理服务激活,成为你的专属代理服务器!
下面先介绍应用GAppProxy代理的方法,下一篇再介绍WallProxy代理方案。
GAppProxy可以去项目下载专页下载,这里的版本最新(传送门:http://code.google.com/p/GAppProxy/downloads/list)。
下面是具体操作步骤:
1)点击“GAppProxy服务端源码+windows自动布署工具”,进入下载页面进行下载(下载地址:http://GAppProxy.googlecode.com/files/uploader-2.0.0-win.zip);
2)把压缩包解开,点击uploader.exe,在AppID后输入你的Application Identifer,回车;
3)输入你的Gmail;
4)输入密码(注意:在输入密码的时候,屏幕不会有任何显示,不要紧,输完后回车即可);

5)稍等片刻,待配置完毕,当出现”ready to start serving“,大功告成!
打开 http://uestcproxy.appspot.com/fetch.py ,会看到你的GAppProxy服务器端已经在工作了:

2.4 配置GAppProxy本地代理
现在在Google的服务器中已经有了你的一席之地,接下来你就要在你的电脑和Google服务器之间打通一条通道,然后就能以Googl为跳板,遨游外面广阔的网络世界了!
这个通道,就由本地代理来开启。
所谓万事俱备,只欠代理^ ^
下面是具体操作步骤:
1)打开GAppProxy下载专页下载GAppProxy的Windows版客户端(下载地址:http://GAppProxy.googlecode.com/files/localproxy-2.0.0-win.zip);
2)解开压缩包,用记事本打开proxy.conf文件;
在末行添加fetch_server = http://xxxxxx.appspot.com/fetch.py,这里的xxxxxx即为前面你申请的Application Identifer(注意行首没有“#”号),保存退出;

3)点击proxy.exe,开启代理!
此时若已经登录公网,那么将会出现如下画面:Direct Fetch后面是Yes,表示你已经与Google服务器建立了直接连接。

这时你再在浏览器中设置好如下代理:”127.0.0.1:8000“,就可以轻松翻墙,自由浏览了~而且你现在看下你的IP地理位置(传送门:http://www.geoiptool.com/),居然是美国加州山景城的IP,神奇吧~
当然,我们的最终目的是在不登录公网的情况下也可以自由浏览,作为一个准Geek,这种半自由状态是不能接受的。
下面在最后一节,隆重推出内网直通公网的杀手锏,各位童鞋打起精神咯~
2.5 配置APPSPOT的HOSTS地址映射
在开始真正的自由浏览之前,你还需做最后的一项工作: 为hosts添加当前的GoogleIPv6解析地址。
具体操作如下:
1)拨号进入校内网络;开始菜单,运行,输入“cmd”打开命令行窗口;
2)输入“ping IPv6.google.com”,回车,得到最新Google的IPv6解析地址,记下来;

3)用记事本打开hosts文件(位于C:\Windows\System32\drivers\etc),在末尾添加两行:
2404:6800:8007::63 uestcproxy.appspot.com
2404:6800:8007::63 www.appspot.com
这里“2404:6800:8007::63”即为Google的IPv6解析地址(2010-10-31下午ping得到),“uestcproxy.appspot.com”是我申请的GAE地址。

注:添加appspot与Google的hosts地址映射非常重要,这是实现穿越的关键一环
4)点击proxy.exe,开启代理!
此时Direct Fetch 后面为No,不必担心,这是因为你现在处于内网环境,但通过IPv6网络照样可以连接到Google的服务器。

5)现在,打开Internet选项,设置浏览器代理地址。
然后后打开你的浏览器,输入任意一个外网网址,回车!
哈哈,怎么样,是不是顺利打开了~再看看此时的proxy程序窗口,一行行的数据正滚滚而过,表示你的网卡与Google的服务器沟通良好~
然后再输入一个墙外的网站地址试试,是不是也可以顺畅打开了?
Congratulation!
至此,依托IPv6+GAppProxy技术,从内网穿越外网的任务大功告成!
好好享用吧:)


三、GAE番外篇——比GAppProxy更强大的WALLPROXY代理

第三篇所介绍的方法是基于GAppProxy代理服务的,是个完整的解决方案。但GAppProxy有一个很不方便的地方,就是对https的支持 很不好,比如Facebook和Twitter的加密账户页面就无法正常显示。还有就是对于很多SSL连接,每次打开浏览器都会弹出证书无效警告,由于我 平时经常用Google的SSL搜索,每次打开新页面都要处理一下那个警告页面,使用久了也会感到不爽。

对于这个问题,GAppProxy项目的Groups上也讨论了很久,可解决方案不是太繁琐就是不完善,毕竟这只是个非商业项目,开发人员都是出于兴趣和爱好来维护,你也不能奢求太多。
后来在Twitter上偶然见一位网友提到另一个基于GAE的代理服务——WallProxy,据说可以很好地支持https,甚至还可以导入根证书而一劳永逸地解决SSL问题。
我顿时眼前一亮,连忙去搜索WallProxy的相关页面,很快看到步调博客上的《使用Google App Engine+WallProxy来看YouTube和玩Twitese》(传送门:http://www.budiao.biz/google-app-engineWallProxy.html),然后按照博主的方案一路操作下来,挂上代理一试——加密网站可以正常访问了~然后又试了下WallProxy独有的多app共存实现负载均衡技术,感觉也很不错,这下我申请的多个GAE-app地址都能派上用场,也不用担心每天1G的流量限制了。
虽然前文已经给出了完整的内网穿越外网的攻略,但鉴于WallProxy对加密服务的改善和灵活配置,我还是决定补充一个GAE的番外篇,把WallProxy隆重推荐给大家。
不过这里先说明下,WallProxy的设置步骤比之GAppProxy是比较繁琐的,而且你还要预装Python环境,如果实在懒得费功夫,而且对SSL应用要求不高的话,用GAppProxy代理足矣。
好,关于WallProxy的背景介绍到此为止,下面跟我来一起摆平这个不可多得的上网利器吧~
3.1 拥有至少一个GAE应用地址(方法同2.1~2.2)
3.2 安装Python
要求2.5以上,3.0以下版本。建议下载步调博主提供的压缩包(传送门:http://dl.dbank.com/c003f1c64w),这个压缩包已经包含了下文将要用到的所有工具,挺方便。
3.3 安装GAE SDK
SDK可以去GAE官方页面下载(传送门:http://code.google.com/intl/zh-CN/appengine/downloads.html)或者用3.2节给出的压缩包。
SDK这个套件不是必需的,但由于SDK用来管理上载服务实在很便捷,远比命令行来得直观,推荐安装。而且以后如果用到其他GAE服务(比如自建博客,自架Twitter API等)也会用得到。
如果你实在不想往电脑安装什么,可以用一个第三方上传工具SDUpload(传送门:http://code.google.com/p/sdapp/downloads/detail?name=SDUpload%200.1.rar&can=2&q=),不过对不熟悉命令行操作的人来说用起来稍显不便,这里不再赘述。
下文还是以SDK操作为例。
3.4 设置SDK
1)安装完SDK后,启动“Google App Engine Launcher”程序(图标是一个涡轮引擎),打开Edit-Preference
2)Python栏选择你的Python安装路径;
3)App Engine SDK栏选择你的SDK安装路径;
4)Editor栏可选一个你用着顺手的编辑器,也可空着(默认为写字板);OK。

3.5 配置上传文件
1)去WallProxy的下载页面下载WallProxy工具包(V0.3.7_for_windows版传送门:http://code.google.com/p/wallproxy/downloads/detail?name=wallproxy-win.7z&can=2&q=),或者使用3.2节给出的压缩包;
2)解压缩后得到三个文件夹:gae_server、php_server、local;
3)启动Google App Engine Launcher;
4)打开File-Existing Application,在Application Path中指定三个文件夹中的gae_server所在的硬盘地址,点击“Add”;
5)此时会发现SDK窗口中添加了一行内容,选中,然后点击“Edit”按钮,开始编辑app文件;
6)把application:后面的“your-gae-id”替换为你自己创建的GAE-app名称,即Application Identifer,保存;

7)回到SDK面板,你会发现name一栏中已经更新为你刚刚替换的Application Identifer;
点击“Deploy”,然后在打开的窗口中输入你的Gmail账号、密码;
点击“OK”,开始上传;

8)上传成功后即可关闭SDK程序。
3.6 添加APPSPOT与GOOGLE的IPv6地址的HOSTS地址映射(同2.5节)。
3.7 配置本地代理
1)打开三个文件夹中的local,点击WallProxy.exe;
2)点击“设置”按钮;
在打开的窗口中,把紧跟GAE_PROXY的一行中的’url’后面的地址替换为你自己的GAE应用地址,格式为’http://XXXXXX.appspot.com/fetch.php’(注意是php),确定退出;
3)点击“启动”按钮,此时若一切操作无误,代理便开始工作了;
4)设置浏览器代理地址为:127.0.0.1:8086(注意是8086,GAppProxy的是8000)。
现在随便打开一个网站试试吧~不出意外的话,你已经能够畅游万维网了!
3.8 WallProxy拓展应用
1)设置多GAE-app,只需在本地代理设置中添加多行GAE-app url即可(当然前提是这些GAE-app已经开通并且配置成功,检验是否配置成功的方法是:在浏览器中打开这个url,如果页面自动跳转到一个叫做“和 谐社”的Twitter页面,就表示成功了- -III)

2)导入ca根证书
这是WallProxy的特色功能,也是我青睐它的主要原因;
在第一次执行WallProxy.exe后,会在local文件夹下生成一个cert文件夹,打开后会看到一个ca证书文件;

打开后点击“安装证书”,然后按照提示将之装入“受信任的根证书颁发机构”;

安装完成后再打开任何SSL等加密连接,都不会再出现使用GAppProxy时遇到的证书无效问题。
终于可以把默认搜索引擎设为Google with SSL了~
3.9 WALLPROXY与GAppProxy同时使用
虽然WallProxy已经足够优秀,但我还是不愿让它彻底取代GAppProxy,GAppProxy的简单易用特性还是蛮招人喜爱的;另一方 面,毕竟人家做这个完全是义务劳动,再加上n多“不可控”因素(你懂的),谁也说不准某天某时某个代理就挂了,到那时该如何是好?
不如两个代理服务共存吧~
可以吗?
可以的~就算你手头只有一个GAE-app,也可以同时开两个代理!
还是以前文我申请的名为uestcproxy的GAE-app为例,现在已有http://uestcproxy.appspot.com /fetch.py配置为我的GAppProxy代理服务器,如果我再用SDK的把uestcproxy配置为WallProxy的代理服务器的话,很显 然GAppProxy就不能用了。
解决思路就在于每个GAE-app服务其实可以有多个版本,不同版本对应不同的地址,然后让GAppProxy和WallProxy客户端代理不同的地址,就不会产生冲突了。
具体操作步骤如下:
1)在3.5节中,注意app文件内容中第二行有“version”,这就是版本号,默认为1;
现在将之改为2。然后保存,上传。

2)此时GAE将会为你分配两个不同的地址,分别是:
http://1.latest.uestcproxy.appspot.com
http://2.latest.uestcproxy.appspot.com
对应两个不同的版本。

你若输入http://uestcproxy.appspot.com/fetch.php,回车后将显示错误;
而如果改换成http://2.latest.uestcproxy.appspot.com/fetch.php,就可以顺利跳转到那个Twitter页面了~
3)现在,把WallProxy的设置页面中的url改成http://2.latest.uestcproxy.appspot.com/fetch.php,就可以顺利使用WallProxy代理上网了~

4)对于GAppProxy端,则无需任何改动。
这是因为,尽管http://1.latest.uestcproxy.appspot.com为版本1的地址,但它同时也是默认版本,而默认地址的格式是不变的。
现在,两个代理共存共用了!你可以一个代理用来看Youtube,另一个用来上Twitter,何等的畅快啊~

后记

写这篇文章缘于某日在学校BBS上闲逛,来到IPv6版块,看到大量令人惊奇的IPv6应用文章,其中最令人激动的就是借助更改hosts文件访问几乎所有Google服务,对于我这个Google重度依赖用户,IPv6简直就是福音书。
后来又发生了一件让人很不愉快的事,让我对电信的服务彻底失望。我就想,我们缴的网费并不便宜,却只得到这么差劲的服务,原因还不就是因为它无可动摇的垄断地位,这是多么令人愤懑的事情啊。
作为一个学理工的,我只能从技术上寻找对策了。
恰逢在Google Reader中看到一篇介绍GAE的文章,其中提到了搭建个人GAE应用,然后可借助GAppProxy代理上网。
在此之前,我已经用过了不下5种代理工具,然而要么我对其安全不放心,要么效果差强人意。
有着Google血统的东东,应该不会让人失望吧?
抱着尝鲜的心态(凡是跟Google沾边的服务,我总是要试一试的),用自己的Gmail账号建立了一个GAE应用,然后下载GAppProxy工 具包,简单几步配置完成后,打开浏览器一试,OMG,这速度真快啊!除了个别SSL网址打开有异常外,其他一切服务堪称完美~我从未想象在景德镇看 Youtube,缓冲速度会这么猛。
爽了一段时间后,我的网费再次告急。
在去购买新的充值卡的路上,我突然想到在我的hosts文件中包含了大量Google的IPv6地址,让我得以直接从内网访问Google,那么,为何不能以此为通道,借Google作跳板,直接从内网访问公网呢?
思路有了,剩下的一切都好办。
一天之内,我就搞定了所有的配置工作,然后成功登录自己的Blog。
感谢教育网率先开通IPv6服务,感谢GFW的技术迟钝以致IPv6至今仍是一方净土,感谢Google一如既往地提供上乘的互联网服务,感谢那些热心的人编写出如此强劲的代理程序。
采用这种依托GAE平台的代理服务上网,最实际的效益就是:网费开支为零——没有哪位同学要请我喝一杯么?
不过最令我感到欣慰的,并非省去了一笔网费,而是我在完全合理、合法的情况下,完成了一次对既有约束的突破。
在这个死气沉沉的大局域网之内,我通过某种不温不火的方式为自己找到了一丝自由的感觉,这,才是最大的收获。

后记的后记

1.老实说,因为我并非内网用户,所以对这篇文章的感触还不是那么强烈,不知道作为内网用户的你的感触呢?
2.为了对与非同学的辛勤劳动和对我的信任的感谢,我送出了两张也就是价值100元的极客库的代金券,礼轻情意重。
3.望月的博客继续欢迎高质量的投稿和评论,上篇文章的最佳评论为来自syna同学的评论,尽管只有寥寥几句“看了你这篇文章,我做了一个非常艰难的决定,在我潜水这么多年之后,我决定出来冒个泡……”,但是,你把我打动了。

No comments:

Post a Comment