这里记录一下我是如何在Mac上借助AWS(Amazon Web Services)免费搭建VPN服务器的
生活用百度,技术用谷歌
由于种种原因,我们并不能直接访问谷歌等一些国外网站
但是,
“没有什么事是程序员不能解决的,如果有,那就让别人解决吧”
Q: How to do?
A: Follow me!
这里要说明一点,服务确实是免费的(为期一年,超过一年将收费),不过仍然需要一张信用卡,亚马逊需要1美元的授权,只是授权,不会加入账单,在我看来可以理解为押金,如果你用的全部是套餐内的服务,钱是不会被扣的,而如果超出了套餐内容,这笔钱会根据用量扣除,下文也会讲到如何避免。
网上这种类似的教程很多,但是就像穿鞋,合不合脚,只有自己知道。
一、搭建远程服务器
登录亚马逊(http://aws.amazon.com/cn/),没有账号的请自行注册
选择
免费试用Amazon EC2
选择系统映像,这里选择Amazon Liunx,当然也可以选择其他的,但是我用的是Amazon Liunx,然后“下一步”
由于我这里单纯是为了但见一个VPN服务器,对配置没多大的要求,所以选择
选择实例类型,然后“下一步”

接下来的“配置实例”,“添加存储”直接用默认设置,点“下一步”即可
到“标签实例”中,创建密钥标签,内容自定

“配置安全组件”,默认是”SSH”,建议改为”所有流量”,以后也可以改

“审核”页面,点击”启动”按钮,创建新的密钥对,命名之后点击下载,下载好的
.pem文件保存好,保存好,保存好,以后通过SSH登录远程服务器要用,完成后就可以启动实例了。
等待一小会儿,刷新控制面板就可以看到正在运行的实例了。
实例我理解为我的远程服务器,可以在界面上操作它的启动、停止、重启和终止,其中重启不会改变公有IP,其他操作都会改变公有IP,所以进行重启之外的操作之后,Shadowsocks的相关配置记得统一变更
二、SSH登录远程服务器并安装相关程序(Shadowsocks)
- 右键选中的实例,打开“连接”,弹出信息框


打开终端
首先需要使密钥不公开可见
chmod 400 <*.pem文件路径>SSH登录(命令可以复制上图中的示例)
ssh -i <*.pem文件路径> ec2-user@<服务器公有DNS>根据提示输入
yes即可连接远程服务器。
依次执行如下三条命令安装相关的软件
$ sudo yum install -y python-setuptools $ sudo easy_install pip $ sudo pip install shadowsocks软件安装完成,添加配置文件
创建文件夹
mkdir /etc/configfilevim编辑config.json(vim是一种文本编辑器感兴趣的去这里了解一下)
sudo vim /etc/configfile/config.json粘贴以下内容
{ "server_port”:8081, "password”:”123456789”, "timeout":300, "method":"aes-256-cfb", }其中,端口号
server_port根据自己情况制定(1024 ~ 65535),密码password自己制定并要牢记,加密方式method默认选aes-256-cfb,这些信息后边用户在终端登录要用到,超时时间timeout自己指定。
另外,如果想给不同端口设置不同密码,参照下边的格式即可{ "port_password":{ "8088":"password1", "8089":"password2" }, "method":"aes-256-cfb", "timeout":300 }编辑完成后按
Esc退出编辑模式(回到命令模式)
输入:wq(保存并退出编辑)启动shadowsocks
sudo ssserver -c /etc/configfile/config.json -d start备注:
笔者在执行上述命令时遇到命令不被识别的问题,所以最终只能使用命令全路径
ssserver路径通过which ssserver命令可以拿到
所以最终我的命令是:
/usr/bin/sudo /usr/local/bin/ssserver -c /etc/configfile/config.json -d start
三、本机安装Shadowsocks客户端
- 本机安装Shadowsocks客户端,看这里http://www.godusevpn.mobi/wiki.html就够了,虽然不买他们的服务,但是看看他们的教程还是可以的嘛🤗🤗🤗
- (以Mac为例)按照下图,打开Shadowsocks菜单
菜单->服务器->打开服务器设定
- 配置自己的服务器IP、端口号,加密方式
aes-256-cfb,密码
- 配置完成之后再打开Shadowsocks菜单
菜单->服务器-> 勾选刚才添加的项目
四、Google一下
到这里,你应该就可以顺利的访问下边的网站了
http://www.google.com
http://www.facebook.com
http://www.twitter.com
五、设置Shadowsocks开机启动
有的时候我们需要重启服务器,为避免每次重启服务器之后手动启动Shadowsocks,我们可以把它设置为开机启动
sudo vi /etc/rc.local
在rc.local文件末尾添加如下代码
sudo ssserver -c /etc/configfile/config.json -d start
备注:
如果上边也曾遇到过命令不识别的问题,这里也需要拼全路径的
/usr/bin/sudo /usr/local/bin/ssserver -c /etc/configfile/config.json -d start
六、如何避免收费
虽说我们选的是免费的套餐,但是仍有可能一个不小心信用卡上就多了一笔账单
有两种情况:
套餐过期继续使用
所以记得到期的时间,如果不想产生费用,最简单粗暴的方法就是关停使用中的实例,实例终止之后系统会在一定时间内清理掉你得实例

因为你可能在不知情的情况下超出套餐用量
针对这个问题,好在有CloudWatch,通过CloudWatch我们可以设定警告
首先我们看一下AWS免费套餐的标准

对于不做其他用途,仅用于搭建VPN平台的我来说,流量、存储什么的足够了,所以我主要给I/O设置了警报,当然可以结合实际情况,自定义警报类型
选择
警报->创建警报->EBS->勾选监控指标(卷读取操作)->下一步
接下来定义警报内容:设置警报阈值,并在通知操作栏中选择通知列表(如果没有,需要新建,包括添加邮箱列表,邮箱确认等一系列步骤,这里不再赘述),最后成功创建警报,警报创建成功后,当指标超过设定的上限时,通知列表中的邮箱会收到来自AWS Notifications发来的警报邮件。

监控不同的指标需要设定不同的警报,所以,再以同样的方法设定
卷写入操作的指标监控警报。
通过一系列警报和设置,我们可以提前有所准备,但可能做不到完全避免,同时由于我对AWS也只接触了一天的时间,CloudWatch肯定还有更多强大的功能没有被我发现,所以还有很多工作要做,也希望同学们有新的发现及时分享给大家。