AWS 上搭建万能翻墙代理

aws

前面有关 SAE 的文章提到翻墙的问题,最后思前想后,找到了番羽土啬的最终解决方案:亚马逊的云 AWS / EC2。首先首年免费,功能齐全,只要你能想到。海外天生没有墙的问题,而且如今在速度方面也有口皆碑。那——没有什么能够阻挡,你对自由的向往!!

首先注册个帐号吧,可以用亚马逊的帐号开通一下这个服务。需要信用卡,先扣一美刀,然后电话验证,塔哒。进入后台后,切换右上角的地区看加载速度如何,一般亚洲的会选东京的点。我试过新加波的,速度貌似不太行。确认了地区后,后面创建的实例都是该地区的。

开始一切之前还要生成一个密匙(PEM)命名好了下载到本地找个地方保存好,以后每次 SSH 连上实例都需要此密码文件。下文一般会用到两种实例,默认 Linux 系统的默认用户名是 ec2-user,Ubuntu 的默认用户名为:ubuntu

ssh -i /path/to/YOURNAME.pem ec2-user@YOUR_INSTANCE_IP

接着过滤“免费级别”选项,创建具体的实例(相当于一个个虚拟机)就可以开始出发了。事关围绕这个话题的市面的各种技术手法都可以在其上面实现,根据场景的不同我大概分了四类。

一、普通代理(TinyProxy)

还是 SAE 的问题,原需求是需要远程访问脸书推特的登陆接口,所以想到开个代理服务器。创建 Ubuntu Server,一切默认建了再说。然后在左侧的动态IP下生成一个(54.64.XX.YY),然后绑定到刚才创建的实力。注意:只创建不绑定是要扣钱滴。一开始我也不清楚,被扣了后来看账单才知道。好了,登陆。安装 TinyProxy

sudo -s
apt-get install tinyproxy
vi /etc/tinyproxy.conf
Port 8888
#Allow 127.0.0.1
LogLevel Error
/etc/init.d/tinyproxy restart

这个东东确实简单,现在用前面的动态IP和端口(54.64.XX.YY:8888),就可以访问墙外网站了,速度方面嘛,谁用谁知道吧。我后面看了配置文件,实际祂也支持反向代理,看配置规则也不算复杂。不过算了,用这个就是因为祂简单。

因为要开启新的端口,需要在后台左侧的“安全组”下该实例对应的组下,添加新开放的端口。这个步骤必不可少,下同。

aws_port

——回到前面刚刚提到的需求,本来我以为故事到这里就结束了。我没想到的是 SAE 的函数禁用了代理的支持,我折腾了大半天才明白是这么回事,真爱何在?节操何在?所以故事只能继续了。

二、反向代理(NGINX)

选择 Amazon Linux AMI,铛铛铛。然后安装 NGINX,这个就大名鼎鼎了咯,负载均衡啥的,反向代理更是易如反掌。后面的配置的例子就是我的社交登陆插件 Open Social 在 SAE 上的反向代理的配置。

sudo su
yum install nginx
vi /etc/nginx/nginx.conf
service nginx reload
server {
    listen 8080;
    server_name XYZ.yourdomain.com;
    if ($host !~* yourdomain\.com){
        rewrite ^/(.*)$ http://www.yourdomain.com/ permanent;
    }
    location / {
        rewrite ^/(.*)$ http://www.yourdomain.com/ permanent;
    }
    location ^~ /facebook/ {
        proxy_redirect off;
        proxy_pass https://graph.facebook.com/;
    }
    location ^~ /twitter/ {
        proxy_set_header Host api.twitter.com;
        proxy_pass https://api.twitter.com/;
    }
    location ^~ /google/accounts/ {
        proxy_redirect off;
        proxy_pass https://accounts.google.com/;
    }
    location ^~ /google/apis/ {
        proxy_redirect off;
        proxy_pass https://www.googleapis.com/;
    }
    location ^~ /google/http/ {
        proxy_redirect off;
        proxy_pass http://www.google.com/;
    }
    location ^~ /google/https/ {
        proxy_redirect off;
        proxy_pass https://www.google.com/;
    }
    location ^~ /wordpress/api/ {
        proxy_redirect off;
        proxy_pass https://api.wordpress.org/;
    }
}

同样,对应的安全组中要对应的开一下端口。原来脸书接口:https://graph.facebook.com/oauth/access_token,现在变成:http://XYZ.yourdomain.com:8080/facebook/oauth/access_token,测试效果非常不错。当然启用域名的前提,是需要在这个域名的管理后台将 XYZ A记录绑定到这个实例的动态IP上。否则也只能用IP。

简单的放刷判断可以判断域名和标识,代码如:

    if ($host !~* xiaomac\.com){
        rewrite ^/(.*)$ http://www.xiaomac.com/ permanent;
    }
    if ($http_user_agent !~* SAE){
        rewrite ^/(.*)$ http://www.xiaomac.com/ permanent;
    }

因为是在服务器上使用,一般也无法做加密等,所以域名和端口要注意保密,防止被滥用导致流量超标。

三、VPN(PPTPD)

这个看起来也比较简单,因为我之前因为需要购买过一个 VPN,现在流量还没用完呢,这个就没开。我找了教程放着备用。说实话,自建 VPN,还是很多好处的。首先暂时免费,重点速度有保障,其次才是完全的问题。

想想 VPN 本身的跨平台的先天优势,说不定随时就有需要开一个来用呢。还用回前面创建的 Ubuntu 实例,安装 pptpd

sudo -s
apt-get install pptpd
vi /etc/pptpd.conf
localip 192.168.9.1
remoteip 192.168.9.11-30

vi /etc/ppp/pptpd-options
ms-dns 8.8.8.8
ms-dns 8.8.4.4

vi /etc/ppp/chap-secrets
<username> pptpd <passwd> *

vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

vi /etc/rc.local 
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

service pptpd start
chkconfig pptpd on

需要跟进的配置文件蛮多的,前三段配置分别为网络连接成功后的网段、DNS、帐号密码等,后面两段是相关的转发配置。

四、本地代理(ShadowSocks)

前面提到翻墙,大家一定会说 GoAgent。是的,我不知道应该说些什么,喔,爱你在心口难开。是的,前面很多服务、资料或资源下载都是以它为前提才能实现的。每天的免费流量用到你吐。搭配 SwitchySharp,使用任何谷歌服务完全无压力。

不过有个前提,经常要定期更换一批 IP,因为太耀阳经常有些地址会被封,这也是个且用且珍惜的过程了。心若在梦就在,就算诸多磨难依然心怀感恩。

服务器要用的代理,这个场景下神般的 GoAgent 也无能为力了。不过说回来,在 AWS 上,也可以实现类似这样的本地代理,它叫:ShadowSocks,也是基于 python 的轻量级代理。简单看了下,还是略为复杂了点。

——如果真要对比,SS 确实比 GoAgent 有很多好处。首先自用的 IP 基本不怕被封,另外亚马逊的速度目前体验我是比较满意的。另外,目前 SS 目前的跨平台也做的很到位,iOS 甚至有同名浏览器,安装了配置一下就可以彻底观察科学上网。