这里记录一下我是如何在Mac上借助AWS(Amazon Web Services)免费搭建VPN服务器的

生活用百度,技术用谷歌
由于种种原因,我们并不能直接访问谷歌等一些国外网站
但是,
“没有什么事是程序员不能解决的,如果有,那就让别人解决吧”

Q: How to do?

A: Follow me!

这里要说明一点,服务确实是免费的(为期一年,超过一年将收费),不过仍然需要一张信用卡,亚马逊需要1美元的授权,只是授权,不会加入账单,在我看来可以理解为押金,如果你用的全部是套餐内的服务,钱是不会被扣的,而如果超出了套餐内容,这笔钱会根据用量扣除,下文也会讲到如何避免。

网上这种类似的教程很多,但是就像穿鞋,合不合脚,只有自己知道。

一、搭建远程服务器

登录亚马逊(http://aws.amazon.com/cn/),没有账号的请自行注册

  1. 选择免费试用Amazon EC2

  2. 选择系统映像,这里选择Amazon Liunx,当然也可以选择其他的,但是我用的是Amazon Liunx,然后“下一步”
    由于我这里单纯是为了但见一个VPN服务器,对配置没多大的要求,所以选择

  3. 选择实例类型,然后“下一步”

  4. 接下来的“配置实例”,“添加存储”直接用默认设置,点“下一步”即可

  5. 到“标签实例”中,创建密钥标签,内容自定

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

  7. “审核”页面,点击”启动”按钮,创建新的密钥对,命名之后点击下载,下载好的.pem文件保存好保存好保存好,以后通过SSH登录远程服务器要用,完成后就可以启动实例了。

  8. 等待一小会儿,刷新控制面板就可以看到正在运行的实例了。

  9. 实例我理解为我的远程服务器,可以在界面上操作它的启动、停止、重启和终止,其中重启不会改变公有IP,其他操作都会改变公有IP,所以进行重启之外的操作之后,Shadowsocks的相关配置记得统一变更

二、SSH登录远程服务器并安装相关程序(Shadowsocks)

  1. 右键选中的实例,打开“连接”,弹出信息框

  2. 打开终端

    • 首先需要使密钥不公开可见

      chmod 400 <*.pem文件路径>
      
    • SSH登录(命令可以复制上图中的示例)

      ssh -i <*.pem文件路径> ec2-user@<服务器公有DNS>
      

      根据提示输入yes即可连接远程服务器。

  3. 依次执行如下三条命令安装相关的软件

    $ sudo yum install -y python-setuptools
    $ sudo easy_install pip
    $ sudo pip install shadowsocks
    
  4. 软件安装完成,添加配置文件

    • 创建文件夹

      mkdir /etc/configfile
      
    • vim编辑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

六、如何避免收费

虽说我们选的是免费的套餐,但是仍有可能一个不小心信用卡上就多了一笔账单
有两种情况:

  1. 套餐过期继续使用

    所以记得到期的时间,如果不想产生费用,最简单粗暴的方法就是关停使用中的实例,实例终止之后系统会在一定时间内清理掉你得实例

  2. 因为你可能在不知情的情况下超出套餐用量

    针对这个问题,好在有CloudWatch,通过CloudWatch我们可以设定警告

    • 首先我们看一下AWS免费套餐的标准

    • 对于不做其他用途,仅用于搭建VPN平台的我来说,流量、存储什么的足够了,所以我主要给I/O设置了警报,当然可以结合实际情况,自定义警报类型

    • 打开CloudWatch

    • 选择警报->创建警报 -> EBS -> 勾选监控指标(卷读取操作) -> 下一步
      接下来定义警报内容:设置警报阈值,并在通知操作栏中选择通知列表(如果没有,需要新建,包括添加邮箱列表,邮箱确认等一系列步骤,这里不再赘述),最后成功创建警报,警报创建成功后,当指标超过设定的上限时,通知列表中的邮箱会收到来自AWS Notifications发来的警报邮件。

      监控不同的指标需要设定不同的警报,所以,再以同样的方法设定卷写入操作的指标监控警报。

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

本文地址: http://yongqianvip.github.io/2016/09/09/aws_vpn/