Shadowsocks 优化

安装 Shadowsocks 之后,性能方面还有优化的余地,使用的平台是 Debian 8,这里做下记录。

对于以下优化,首先要求 Linux 内核版本 ≥ 3.5,修改相关内核参数需要切换到 root 用户。

调优 Shadowsocks 遵循以下原则:

  1. 尽可能重用端口和连接。
  2. 尽可能地扩大队列和缓冲区。
  3. 选择大时延和高吞吐量的 TCP 拥塞算法。

一、修改文件句柄数限制

首先使用 ulimit -a 查看 user resource limits,若 open files 一项的值较小(通常是 1024),则进行以下操作。

增加进程打开文件句柄数量,以便更好的处理大量的 TCP 连接。

1
$ vi /etc/security/limits.conf

增加以下两行

1
2
* soft nofile 51200
* hard nofile 51200

接下来,在开启 Shadowsocks 服务之前,先设置 ulimit

1
ulimit -n 51200

二、内核参数优化

/etc/sysctl.conf 配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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

三、开启 TCP Fast Open

TCP Fast Open 要求服务器和客户端都是 Linux 3.7+ 的内核,内核参数配置文件 /etc/sysctl.conf 增加 net.ipv4.tcp_fastopen = 3,将 Shadowsocks 配置项 "fast_open": false 改为 "fast_open": true

OpenWrt/LEDE 开启 TCP Fast Open 方法:

要求:系统内核版本 ≥ 3.7,shadowsocks-libev ≥ 3.0.4,Shadowsocks 服务端开启 TCP Fast Open

修改 /etc/sysctl.conf,加入如下一行:

1
net.ipv4.tcp_fastopen = 3

执行如下命令使之生效:

1
sysctl -p

配置文件 /etc/config/shadowsocksconfig servers 项增加一行:

1
option fast_open '1'

最后重启下 Shadowsocks 即可:

1
/etc/init.d/shadowsocks restart

四、使用 ChaCha20 加密算法

ChaCha 系列算法是 Bernstein 于 2008 年发布的与相关的 Salsa20 算法的一个变种,Google 采用带有 Poly1305 消息认证码的 ChaCha20 的作为 Chrome 和 Google 网站 TLS 中的加密算法,用来替代 OpenSSL 中 RC4。

此后,ChaCha20 在 RFC 7539 中标准化,于是推出了 ChaCha20-IETF-Poly1305

Shadowsocks 在 SIP004 提出了采用 AEAD 算法取代原先的不安全的 流加密 + OTA,并弃用了一次性验证(OTA)。

五、开启 TCP BBR 拥塞控制算法

TCP BBR 拥塞控制算法 是 Google 开发的单边加速算法,实现高效的数据传输,使用该算法要求 Linux kernel ≥ 4.9,如果内核版本低,参考这篇文章 升级内核。

开启 BBR

执行下面这两条指令

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

保存生效

1
$ sysctl -p

如果下面的指令结果有 bbr,说明成功开启了 BBR。

1
sysctl net.ipv4.tcp_available_congestion_control

关闭 BBR

1
2
$ sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf && sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf
$sysctl -p

开启/关闭 BBR,都需要重启服务器。

相关链接:

(完)