0x00 前言
本文仅供学习,请勿用于非法用途!
首先,你要有台服务器,个人用过几个不同服务商的 VPS,有:
- 搬瓦工:第一次自己买 VPS 搭 SS 的服务商,价格挺便宜的,实惠一点的,100出头一点可以用一年,每月 2T 的流量,20 GB 的硬盘,忘了是不是 SSD 的了。但是速度慢,很卡,后来没到期就不用了。
- 阿里云:买的是香港的服务器,2016 年双 11 买的,还打折(后来证明没什么卵用,没便宜),500 多一年,流量另算,1 GB 1 块钱,速度很快,但是 2017 年 10 月份十九大之前,竟然被封了 IP。所以换别的服务商。
- Vultr(通过此链接注册,你可以免费获得 10 美元,同时也能帮助我获得一些小奖励,谢谢!):阿里云被封了 IP 之后,看同事在用这个,就买了这个的日本机房的 VPS,但是搭完之后,没过3天,就被封了 IP,又燃起换服务商的想法,然后看到 Linode 有日本机房的 VPS 可以选,然后就退款,换到 Linode 了。
- Linode:换到 Linode 才真正开始了折腾之路,申请过更换 IP,但是被拒,然后我的解决办法是切换机房,从日本东京切换到新加坡,或者删掉已有的重新创建一个,IP 也是不一样的,但是依然被封 IP,有时候新创建的 VPS 的 IP 是已经被封的。感觉是因为用了
rc4-md5
的加密算法,遂使用更安全更快速的 chacha20
,依然逃不过被封 IP 的厄运。
- Google Cloud Platform: 于 2018 年 5 月底开始转战 GCP,速度很快,删掉了 Linode 的主机,而且 GCP 也送了 300 美元,够用好多个月了。
FUCKING GFW!!!!!!!!!!!!!!!!!!!!
ox01 开始搭建 SS
上面啰嗦了这么多,现在开始搭建 SS,这里服务商就以 Linode 为例,系统就用 Ubuntu 14.04 LTS。
0x0100 创建服务器
- 在 Linode 上新建一个服务器,配置随便,搭 SS 用最低的就够用了,然后地点选日本:
- 创建好了之后,点击名称或者 Dashboard 进入详情:
- 现在服务器还没有配置一个系统,我们点击 Deploy an Image,来安装一个系统:
- 系统选择 Ubuntu 14.04 LTS,再设置一下 root 密码,后面 ssh 登录会用到:
- 创建完之后,等下面 Host Job Queue 中的进度都完成了,点击 Boot 按钮启动服务器。或者直接点 Boot 按钮,Linode 会按队列来一个个执行:
- 服务器运行起来之后,现在我们就可以使用 ssh 登录服务器了,但是为了避免分配的服务器的 IP 是已经被封的,首先我们先 ping 一下 IP,避免做无用功:
看来是被封过的,那我们只能重头开始重新创建一个服务器了。
- 拿到一个 IP 没有被封的服务器,我们 ssh 连接上去,如果电脑终端连接不上去的,可以先用 Linode 提供的 Glish 连接:
0x0101 搭建 SS
然后等待完成,需要一点时间。
- 完成之后,我们先安装 python-pip 等一些库(中间需要确认安装一下,输入 y 然后回车):
1
| $ apt-get install python-pip python-m2crypto
|
1
| $ pip install shadowsocks
|
- 很快就安装好了,然后我们创建所需的文件夹和 config.json 文件:
1 2 3 4
| $ cd /etc $ mkdir shadowsocks $ cd shadowsocks/ $ vi config.json
|
然后输入一下内容:
1 2 3 4 5 6 7 8 9
| { "server": "YOUR_SERVER_IP", "server_port": 8388, "local_port": 1080, "password": "YOUR_SS_PASSWORD", "timeout": 300, "method": "aes-256-cfb", "fast_open": false }
|
(2017-10-30 更新):最近封锁越来越严重,推荐使用常用端口。
1
| $ sudo /usr/local/bin/ssserver -c /etc/shadowsocks/config.json --user nobody -qq -d start
|
也可以把这个命令加到 /etc/rc.local
里面,每次系统启动都会启动 SS,注意要在 exit 0
之前:
然后要么重启一下服务器,要么重新运行一下刚刚添加的那条命令,启动 SS。
到这里,SS 搭建就完成了。
0x0102 加密方式
上面使用的加密方式是 aes-256-cfb
,还有一个更快更安全的 chacha20
或者 salsa20
,但是我用过 chacha20
,还是被封 IP,要是想用这个加密方式,还要额外的几步,因为还缺少了一个库:libsodium
,不然启动 SS 的时候,会报错,安装方法如下:
1 2 3 4 5 6 7 8
| $ sudo apt-get install build-essential $ cd /tmp $ wget https://download.libsodium.org/libsodium/releases/LATEST.tar.gz $ tar zxf LATEST.tar.gz $ cd libsodium* $ ./configure $ make -j2 $ sudo make install
|
- 然后将下面的代码加入到
/etc/ld.so.conf
:
1 2 3 4
| include ld.so.conf.d/*.conf" /lib /usr/lib64 /usr/local/lib
|
0x0103 ss 启动成功,但是并没有运行
在启动了 ss 之后,终端打印:
1 2 3
| root@tw:~# sudo /usr/local/bin/ssserver -c /etc/shadowsocks/config.json --user nobody -qq -d start INFO: loading config from /etc/shadowsocks/config.json started
|
但是查看当前进程,并没有 ssserver
:
1 2 3 4 5
| root@tw:~# ps -e | grep ss 1372 ? 00:00:00 sshguard 1619 ? 00:00:00 sshd 2031 ? 00:00:00 sshd 2105 ? 00:00:00 sshd
|
被这个问题困扰了很久,中间还放弃过一次,但是本着不放过的原则,重新开始搭建。
想到既然启动成功,但是并没有运行,应该查看下 log,所以:
1
| sudo less /var/log/shadowsocks.log
|
日志中出现最多,最引人注目的是:
1
| socket.error: [Errno 99] Cannot assign requested address
|
看字面意思应该是分配地址有问题,遂去 Google 搜索,找到的可用方法是,将配置文件的 Server 地址改成 0.0.0.0
,重新启动下 ss,就可以正常启动并运行了。
0x02 更换系统内核并开启 TCP BBR
TCP BBR 是 Google 开发的新的拥塞控制算法,据说是用在 YouTube 上,并且在去年 9 月开源并且现在已经集成到 Linux 4.9-rc8 之后版本的内核中。虽然 Linode 也更新到了 4.9 版本内核,但是并没有 TCP BBR,所以还是要自己更换一下内核。
0x0200 更换系统内核
这里要注意的一点是,如果你的 VPS 使用的是 OpenVZ 的虚拟技术,你是不能使用 BBR 的。并且系统要求在 CentOS 6+,Debian 7+,Ubuntu 12+。
首先确定下自己购买的 VPS 的架构吧,这里就不涉及了,自己去找吧。
这里我就选 4.13.9
了,如果你要选择别的内核版本,完整列表在这里。
1 2
| $ cd /tmp $ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13.9/linux-image-4.13.9-041309-generic_4.13.9-041309.201710211231_amd64.deb
|
- 等待下载完成,然后使用
dpkg -i
命令安装:
1
| $ dpkg -i linux-image-4.13.9-041309-generic_4.13.9-041309.201710211231_amd64.deb
|
- 如果看到了刚刚安装的内核,证明安装成功了,然后我执行一下内核更新,然后重启:
发现还是旧的内核,网上找了一下原因,解决办法如下:
1
| $ apt-get install linux-image-virtual grub2
|
会出现这个界面,我是直接回车确定的:
- 确定一下你的内核已经被安装上,是否有刚刚安装的那个内核:
如果和下面有不一样的,修改成一样的(其实我这基本都不用改,默认就是这样):
1 2 3 4 5
| GRUB_TIMEOUT=10 GRUB_CMDLINE_LINUX="console=ttyS0,19200n8" GRUB_DISABLE_LINUX_UUID=true GRUB_SERIAL_COMMAND="serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1" GRUB_TERMINAL=serial
|
- 显示在最顶端的 kernel 就是即将启动的 kernel 。如果没显示在最顶端,就把其余的 kernel 删掉(一般都在最顶端):
- 然后进入 Linode 的 Dashboard,点击 Edit:
- 在 Kernel 选项处选择 GRUB 2,然后点击 Save Changes 按钮,然后重启 VPS,看看是否内核更新了:
如果显示的是你安装的新的内核,说明成功了。
0x0201 开启 TCP BBR
1 2
| echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
|
1
| sysctl net.ipv4.tcp_available_congestion_control
|
则会打印:
1
| net.ipv4.tcp_available_congestion_control = bbr cubic reno
|
如果结果中有 tcp_bbr
说明 BBR 已经启动了。
0x03 修改 SSH 远程登录端口
- 修改
/etc/ssh/sshd_config
,在 Port 22
下添加你的端口:
- 修改
/etc/ssh/ssh_config
,在 Host *
下添加你的端口:
1 2 3 4 5
| Host * Port 22 Port YOUR_PORT # ForwardAgent no ...
|
- 再 SSH 连接新的端口,成功连接后再修改上面的配置把 22 端口注释掉。再在本机
~/.ssh/
下新建一个 config
文件,文件内容为:
1 2 3
| Host YOUR_HOST User YOUR_USER_NAME Port YOUR_NEW_PORT
|
这样下次连接就只需要 ssh YOUR_HOST
就可以了。
- 修改 SSH 默认端口后 git 的一些远程操作会失败,解决办法也是修改
config
文件:
1 2 3 4 5 6
| Host github.com HostName github.com Port 22 Host bitbucket.org HostName bitbucket.org Port 22
|
0x04 参考链接
BBR 官方论坛
BBR Quick Start
Shadowsocks wiki Encryption