时光不改's 记忆碎片

Ubuntu 16.04 下 Shadowsocks服务器端安装及优化

字数统计: 1.4k阅读时长: 6 min
2019/05/08 Share

Ubuntu 16.04 下 Shadowsocks服务器端安装及优化

前言

本教程旨在提供简明的Ubuntu 16.04下安装服务器端Shadowsocks。不同于Ubuntu 16.04之前的教程,本文抛弃initd,转而使用Ubuntu 16.04支持的Systemd管理Shadowsocks的启动与停止,显得更为便捷。优化部分包括BBR、TCP Fast Open以及吞吐量优化。

本教程仅适用于Ubuntu 16.04及之后的版本,基于Python 3,支持IPv6。

安装pip

本教程使用Python 3为载体,因Python 3对应的包管理器pip3并未预装,首先安装pip3:

1
sudo apt install python3-pip

安装Shadowsocks

因Shadowsocks作者不再维护pip中的Shadowsocks(定格在了2.8.2),我们使用下面的命令来安装最新版的Shadowsocks:

1
pip3 install https://github.com/shadowsocks/shadowsocks/archive/master.zip

安装完成后可以使用下面这个命令查看Shadowsocks版本:

1
sudo ssserver --version

目前会显示“Shadowsocks 3.0.0”。

创建配置文件

创建Shadowsocks配置文件所在文件夹:

1
sudo mkdir /etc/shadowsocks

然后创建配置文件:

1
sudo nano /etc/shadowsocks/config.json

复制粘贴如下内容(注意修改密码“password”):

1
2
3
4
5
6
7
8
9
10
{
​ "server":"::",
​ "server_port":8388,
​ "local_address": "127.0.0.1",
​ "local_port":1080,
​ "password":"mypassword",
​ "timeout":300,
​ "method":"aes-256-cfb",
​ "fast_open": false
}

然后按Ctrl + O保存文件,Ctrl + X退出。

测试Shadowsocks配置

首先记录下服务器的IP地址

1
ifconfig

找到IPv4地址(和IPv6地址),如我的ifconfig输出为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
eth0      Link encap:Ethernet  HWaddr 46:91:89:4e:c1:52

​ inet addr:138.68.51.55 Bcast:138.68.63.255 Mask:255.255.240.0

​ inet6 addr: fe80::4491:89ff:fe4e:c152/64 Scope:Link

​ inet6 addr: 2604:a880:2:d0::3727:7001/64 Scope:Global

​ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

​ RX packets:102667 errors:0 dropped:0 overruns:0 frame:0

​ TX packets:7869 errors:0 dropped:0 overruns:0 carrier:0

​ collisions:0 txqueuelen:1000

​ RX bytes:151166937 (151.1 MB) TX bytes:1151476 (1.1 MB)

所以我的IPv4地址是138.68.51.55,IPv6地址是2604:a880:2:d0::3727:7001。
然后来测试下Shadowsocks能不能正常工作了:

1
ssserver -c /etc/shadowsocks/config.json

在Shadowsocks客户端添加服务器,如果你使用的是我提供的那个配置文件的话,地址填写你的IPv4地址或IPv6地址,端口号为8388,加密方法为aes-256-cfb,密码为你设置的密码。然后设置客户端

使用全局模式,浏览器登录Google试试应该能直接打开了。

这时浏览器登录http://ip138.com/就会显示Shadowsocks服务器的IP啦!

测试完毕,按Ctrl + C关闭Shadowsocks。

配置Systemd管理Shadowsocks

新建Shadowsocks管理文件

1
sudo nano /etc/systemd/system/shadowsocks-server.service

复制粘贴:

1
2
3
4
5
6
7
8
9
10
11
[Unit]

Description=Shadowsocks Server
After=network.target

[Service]
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks/config.json
Restart=on-abort

[Install]
WantedBy=multi-user.target

Ctrl + O保存文件,Ctrl + X退出。

启动Shadowsocks:

1
sudo systemctl start shadowsocks-server

设置开机启动Shadowsocks:

1
sudo systemctl enable shadowsocks-server

至此,Shadowsock服务器端的基本配置已经全部完成了!

优化

这部分属于进阶操作,在你使用Shadowsocks时感觉到延迟较大,或吞吐量较低时,可以考虑对服务器端进行优化。

开启BBR

BBR系Google最新开发的TCP拥塞控制算法,目前有着较好的带宽提升效果,甚至不比老牌的锐速差。

升级Linux内核

BBR在Linux kernel 4.9引入。首先检查服务器kernel版本:

1
uname -r

如果其显示版本在4.9.0之下,则需要升级Linux内核,否则请忽略下文。

更新包管理器:

1
sudo apt update

查看可用的Linux内核版本:

1
sudo apt-cache showpkg linux-image

找到一个你想要升级的Linux内核版本,如“linux-image-4.10.0-22-generic”:

1
sudo apt install linux-image-4.10.0-22-generic

等待安装完成后重启服务器:

1
sudo reboot

删除老的Linux内核:

1
sudo purge-old-kernels

开启BBR

运行lsmod | grep bbr,如果结果中没有tcp_bbr,则先运行:

1
2
modprobe tcp_bbr
echo "tcp_bbr" >> /etc/modules-load.d/modules.conf

运行:

1
2
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

运行:

1
sysctl -p

保存生效。运行:

1
2
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

若均有bbr,则开启BBR成功。

优化吞吐量

新建配置文件:

1
sudo nano /etc/sysctl.d/local.conf

复制粘贴:

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
31
32
33
34
35
36
37
38
39
40
41
\# max open files
fs.file-max = 51200
\# max read buffer
net.core.rmem_max = 67108864
\# max write buffer
net.core.wmem_max = 67108864
\# default read buffer
net.core.rmem_default = 65536
\# default write buffer
net.core.wmem_default = 65536
\# max processor input queue
net.core.netdev_max_backlog = 4096
\# max backlog
net.core.somaxconn = 4096

\# resist SYN flood attacks
net.ipv4.tcp_syncookies = 1
\# reuse timewait sockets when safe
net.ipv4.tcp_tw_reuse = 1
\# turn off fast timewait sockets recycling
net.ipv4.tcp_tw_recycle = 0
\# short FIN timeout
net.ipv4.tcp_fin_timeout = 30
\# short keepalive time
net.ipv4.tcp_keepalive_time = 1200
\# outbound port range
net.ipv4.ip_local_port_range = 10000 65000
\# max SYN backlog
net.ipv4.tcp_max_syn_backlog = 4096
\# max timewait sockets held by system simultaneously
net.ipv4.tcp_max_tw_buckets = 5000
\# turn on TCP Fast Open on both client and server side
net.ipv4.tcp_fastopen = 3
\# TCP receive buffer
net.ipv4.tcp_rmem = 4096 87380 67108864
\# TCP write buffer
net.ipv4.tcp_wmem = 4096 65536 67108864
\# turn on path MTU discovery
net.ipv4.tcp_mtu_probing = 1

net.ipv4.tcp_congestion_control = bbr

运行:

1
sysctl --system

编辑之前的shadowsocks-server.service文件:

1
sudo nano /etc/systemd/system/shadowsocks-server.service

ExecStart前插入一行,内容为:

1
ExecStartPre=/bin/sh -c 'ulimit -n 51200'

即修改后的shadowsocks-server.service内容为:

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Shadowsocks Server
After=network.target

[Service]
ExecStartPre=/bin/sh -c 'ulimit -n 51200'
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks/config.json
Restart=on-abort

[Install]
WantedBy=multi-user.target

Ctrl + O保存文件,Ctrl + X退出。

重载shadowsocks-server.service:

1
sudo systemctl daemon-reload

重启Shadowsocks:

1
sudo systemctl restart shadowsocks-server

开启TCP Fast Open

TCP Fast Open可以降低Shadowsocks服务器和客户端的延迟。实际上在上一步已经开启了TCP Fast Open,现在只需要在Shadowsocks配置中启用TCP Fast Open。

编辑config.json:

1
sudo nano /etc/shadowsocks/config.json

fast_open的值由false修改为trueCtrl + O保存文件,Ctrl + X退出。

重启Shadowsocks:

1
sudo systemctl restart shadowsocks-server

注意:TCP Fast Open同时需要客户端的支持,即客户端Linux内核版本为3.7.1及以上;你可以在Shadowsocks客户端中启用TCP Fast Open。

至此,Shadowsock服务器端的优化已经全部完成了!

CATALOG
  1. 1. Ubuntu 16.04 下 Shadowsocks服务器端安装及优化
    1. 1.1. 前言
    2. 1.2. 安装pip
    3. 1.3. 安装Shadowsocks
    4. 1.4. 创建配置文件
    5. 1.5. 测试Shadowsocks配置
    6. 1.6. 配置Systemd管理Shadowsocks
    7. 1.7. 优化
    8. 1.8. 开启BBR
    9. 1.9. 升级Linux内核
    10. 1.10. 开启BBR
    11. 1.11. 优化吞吐量
    12. 1.12. 开启TCP Fast Open