挑选合适的 VPS
推荐使用 Vultr 日本的 5 美元一个月的 VPS,价格不错而且延迟是最低的。DigitalOcean 虽然没有日本区的 VPS,但是 Github 教育包提供了一张 DigitalOcean 50美元的优惠券,使用下面我的推广链接的话还可以再获得10美元,在加上激活账号充值的5美元,总共65美元,而 DigitalOcean 最低价的 VPS 是5美元一个月,也就是说花5美元可以使用一年的 VPS。使用下面提供的链接注册会有新用户代金券:
安装配置 Shadowsocks
如果使用的是 Ubuntu16.04 以及以上的系统,可以直接通过系统自带的源安装,如果低于 16.04 的版本,则需要去 Shadowsocks 的 github 上下载最新程序编译安装。
1 2 3 4 5
| sudo apt install shadowsocks-libev
ss-server -c ./ss.json -u
|
配置文件格式如下,如果不清楚配置项的作用,那么可以直接用下面这份配置,修改密码即可:
1 2 3 4 5 6 7 8 9 10
| { "server": ["[::0]", ""0.0.0.0""], "server_port": 8838, "local_port": 1080, "password": "123456", "timeout": 300, "method": "chacha20-ietf-poly1305", "fast_open": true, "workers": 1 }
|
使用 ChaCha20 加密算法
ChaCha 系列算法是 Bernstein 于 2008 年发布的与相关的 Salsa20 算法的一个变种,Google 采用带有 Poly1305 消息认证码的 ChaCha20 的作为 Chrome 和 Google 网站 TLS 中的加密算法,用来替代 OpenSSL 中 RC4。此后,ChaCha20 在 RFC 7539 中标准化,于是推出了 ChaCha20-IETF-Poly1305。Shadowsocks 在 SIP004 提出了采用 AEAD 算法取代原先的不安全的流加密 + OTA,并弃用了一次性验证(OTA)。当前配置默认使用 ChaCha20-IETF-Poly1305。
使用 v2ray-plugin 混淆
这一步是可选,用来伪装流量以免被运营商检测出来并 BAN 掉 IP。主要有两种混淆方式:HTTP 和 HTTPS,前者配置简单但是效果不好,后者需要注册域名,配置 SSL 证书,操作比较麻烦但是安全性比较高。具体使用方法参考 github 主页:v2ray-plugin。
开启 BBR 模块
比起 Kcptun 或锐速,谷歌开源的 TCP 拥塞控制算法 BBR 更方便,而且加速效果不错,因此绝对是加速首选。由于 tcp_bbr 需要 Linux kernel 4.9+ 的内核提供支持,因此不满足要求的系统需要先升级内核。如果内核符合条件,执行 lsmod | grep bbr
,如果结果中没有 tcp_bbr 的话就先执行:
1 2
| modprobe tcp_bbr echo "tcp_bbr" | sudo tee --append /etc/modules-load.d/modules.conf
|
然后执行:
1 2 3
| echo "net.core.default_qdisc=fq" | sudo tee --append /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee --append /etc/sysctl.conf sysctl -p
|
最后是验证:
1 2 3 4 5
| sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control
|
如果显示结果如上所示,则说明 BBR 已经开启
开启 TCP Fast Open(TFO)
TCP Fast Open 要求服务器和客户端(Openwrt/LEDE)都是 Linux 3.7+ 的内核,内核参数配置文件 /etc/sysctl.conf
增加一行:
1
| net.ipv4.tcp_fastopen = 3
|
然后执行 sysctl -p
使之生效。服务端和客户端同时增加 Shadowsocks 配置项 "fast_open": true
,然后重启服务即可。
系统参数优化
修改文件句柄数限制
增加进程打开文件句柄数量,以便更好的处理大量的 TCP 连接。
1 2 3 4 5
| vi /etc/security/limits.conf
* soft nofile 51200 * hard nofile 51200
|
接下来,在开启 Shadowsocks 服务之前,先设置 ulimit
内核参数优化
/etc/sysctl.conf
的配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| fs.file-max = 51200 net.core.rmem_max = 67108864 net.core.wmem_max = 67108864 net.core.netdev_max_backlog = 250000 net.core.somaxconn = 4096 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.ip_local_port_range = 10000 65000 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_mem = 25600 51200 102400 net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864 net.ipv4.tcp_mtu_probing = 1 net.ipv4.tcp_congestion_control = hybla
|
修改完后使用 sysctl -p
重载配置。
多用户管理服务
首先根据官网教程在服务端/客户端的服务器上进行安装Shadowsocks-manager,然后需要分别配置服务端和客户端,该软件的好处是可以通过客户端可以管理多台服务器。
服务端配置
在服务端服务器上新建一个 ssmgr.yml
文件,输入:
1 2 3 4 5 6 7
| type: s shadowsocks: address: 127.0.0.1:1080 manager: address: 0.0.0.0:6000 password: '123456' db: 'db.sqlite'
|
需要注意的是,无论把这个配置文件放在哪里,软件真正的配置数据在 /root/.ssmgr
文件中。
然后在 /lib/systemd/system
(Ubuntu 18.04)中新建两个文件 ss-manager.service
和 ssmgr-server.service
:
- ss-manager.service:
1 2 3 4 5 6 7 8 9 10 11
| [Unit] Description=Shadowsocks-libev multi-user controller Documentation=man:ss-manager(1) After=network.target
[Service] Type=simple ExecStart=/usr/bin/ss-manager -c /etc/shadowsocks-manager/config.json --manager-address 127.0.0.1:1080
[Install] WantedBy=multi-user.target
|
注意:
ss-manager
的安装位置可能不在 /usr/bin
下面,请确认并修改;
/etc/shadowsocks-manager/config.json
是我的 Shadowsocls 配置文件,根据自己的配置文件位置进行修改;
--manager-address 127.0.0.1:1080
后面的地址端口要和上面 ssmgr.yml
中设置的一致。
- ssmgr-server.service
1 2 3 4 5 6 7 8 9 10
| [Unit] Description=Shadowsocks management server After=network.target ss-manager.service
[Service] Type=simple ExecStart=/usr/bin/ssmgr -c /etc/ssmgr/ssmgr.yml
[Install] WantedBy=multi-user.target
|
注意:
ssmgr
的安装位置可能不在 /usr/bin
下面,请确认并修改;
/etc/ssmgr/ssmgr.yml
是我的配置文件,根据自己的配置文件位置进行修改。
然后输入下列命令开启服务:
1 2
| sudo systemctl start ss-manager.service sudo systemctl start ssmgr-server.service
|
如果需要开机自启动,则输入以下命令:
1 2
| sudo systemctl enable ss-manager.service sudo systemctl enable ssmgr-server.service
|
客户端配置
在客户端服务器上新建一个 webgui.yml
文件,根据注释输入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| type: m manager: address: 服务器IP地址:6000 # 注意端口和服务端配置一致 password: '123456' # 注意密码和服务端配置一致 plugins: flowSaver: use: true user: use: true account: use: true email: use: true type: 'smtp' username: '邮箱用户名' password: '邮箱密码' host: 'smtp.163.com' # 根据自己使用的邮箱服务填写 webgui: use: true host: '0.0.0.0' port: '80' site: 'http://自定义域名或者IP地址' giftcard: use: true # 开启礼品卡服务以免订单无法加载,可以根据官方文档添加支付宝等 db: 'webgui.sqlite' redis: # 记得安装 Redis,使用默认配置即可 host: '127.0.0.1' port: 6379 password: '' db: 0
|
然后运行客户端:
1
| ssmgr -c /xxx/webgui.yml
|
之后根据自己设置的域名或者IP访问网站,注册的第一个用户即为管理员,然后进行进一步的管理,可在服务器页面添加额外的 Shadowsocks 服务器。