科学上网搭建


Motivation

上一个梯子到期了,这次想尝试下免费 VPS 的效果,最知名的有 AWS 和 Google Cloud 这两个选项。由于 Google Cloud 需要梯子才能访问,所以我从 AWS 开始申请了一个位于东京的免费 VPS,每个月 15G 下行流量。

申请免费 VPS

目前市场上有很多收费境外 VPS,一年所需要花费的价格从十几刀到几十刀不等。但是同时也有一些厂商提供免费的试用期限,比如 AWS 和 Google Cloud 的一年期免费服务。

首先登录 AWS 申请页面 选择创建免费账户,填写各种信息。其中最重要的一项是一个支持 visa 或 mastercard 的信用卡,amazon 会从其中扣除 1 美元作为验证,但是后面会再还回来。

AWS 注册页面

注册完毕后在右上角选择服务器所在地址,我选的是东京。然后在左上角点击服务,选择 EC2(Elastic Compute Cloud) 进入 EC2 控制台,然后点击启动实例。

AWS 启动服务器

启动实例事实上就是创建一个虚拟的远程服务器,并选择各种参数,在这个过程中要注意只选择标注免费套餐可用的选项。现在我们启动一个 ubuntu 服务器,在启动服务器时会生成一个秘钥文件用来远程访问这个服务器,这个文件不会再次生成,我们要好好保存。EC2 控制台界面如下图所示。

EC2 控制台

这个界面中比较重要的是 IPv4 公有 IP。现在我们可以通过这个 IP 和刚刚那个秘钥文件来远程控制这个 VPS。

shadowsocks 服务端搭建

上个步骤中 ubuntu 服务器创建后会自动生成一个 username 为 ubuntu 的账户。使用任意远程 ssh 登录的工具均可以远程登录上这个账户。以 xshell 为例,在登录主界面上填上刚才的 IP,然后在用户身份验证中选择 public key 登录,并选择下载下来的秘钥文件,便能登录到这个 ubuntu 系统中。

ss 原理

如上图所示,shadowsocks 翻墙的原理在于利用一个境外服务器作为跳板,然后将出入流量进行加密混淆从而让 GFW 无法分辨出其是否为翻墙流量。我搭建 shadowsocks 服务端功能时主要参考的是 Github 上的 shadowsocks 项目文档。简单地说,分为下列几部。

  1. 安装

```shell

apt-get install python-pip
pip install git+https://github.com/shadowsocks/shadowsocks.git@master

```

  1. 编写配置文件

用 vi 新建文件 /etc/shadowsocks.json,在其中写入

```json

{
    "server":"0.0.0.0",
    "port_password": {
        "8381": "foobar1",
        "8382": "foobar2",
        "8383": "foobar3",
        "8384": "foobar4"
    },
    "local_address": "127.0.0.1",
    "local_port":1080,
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}

```

上述配置是一个多用户配置,通过在 port_password 里添加键值对可以设定多个对外端口。通过对其中某些端口限速,即可以达到多用户访问控制的效果。

  1. 运行 shadowsocks server

通过下面指令可以在后台启动或关闭 ss server

```shell

ssserver -c /etc/shadowsocks.json -d start ssserver -c /etc/shadowsocks.json -d stop

```

/etc/rc.local 是一个 ubuntu 中开机后会自动执行的脚本。我们可以将开启 ss server 的指令添加到其中 "exit 0" 语句前面,以令其开机自动启动。

  1. 利用 iptables 控制网络速度

一般 VPS 都会有流量限制,对于 AWS 免费套餐来说,流量限制更是达到了上传和下载各 15G 之少。这时如果要分给多人用的话,就需要控制某些端口的访问速度。这个功能可以通过 iptables 来实现。

```shell

iptables -A INPUT -p tcp --sport 8384 -m limit --limit 100/s -j ACCEPT
iptables -A INPUT -p tcp --sport 8384 -j DROP

iptables -A OUTPUT -p tcp --sport 8384 -m limit --limit 100/s -j ACCEPT
iptables -A OUTPUT -p tcp --sport 8384 -j DROP

iptables -A FORWARD -p tcp --sport 8384 -m limit --limit 100/s -j ACCEPT
iptables -A FORWARD -p tcp --sport 8384 -j DROP

```

执行上述 shell 语句,可以使得在 8384 这个端口上无论上传、下载还是转发,每秒钟都不能超过 100 个包,每个包从60到1000多比特不等。

客户端使用

shadowsocks 服务器搭好后要配合客户端来一起使用,客户端下载地址位于这里。以 windows 的客户端为例,如下图所示

ss客户端

图中服务器 IP 处填先前的公有 IP,端口和密码则填 config 文件中设定的数值,点击连接即可畅享翻墙。