Shadowsocks 服务端安装及优化

分类: Shadowsocks

Shadowsocks(ss) 是由 Clowwindy 开发的一款软件,一种基于 Socks5 代理方式的加密传输协议,也可以指实现这个协议的各种传输包。目前包使用 Python、C、C++、C#、Go、Rust 语言等编程语言开发,大部分主要实现(iOS 平台的除外)采用 Apache 许可证、GPL、MIT 许可证等多种自由软件许可协议开放源代码。Shadowsocks 分为服务器端和客户端,在使用之前,需要先将服务器端部署到服务器上面,然后通过客户端连接并创建本地代理。

本文将安装 Shadowsocks libev 版本,该版本内存占用小,低 CPU 消耗,并可以安装在基于 OpenWRT 的路由器上。

从源码编译安装

Debian 8 或更高版本,Ubuntu 16.10 或更高版本。本文以 Ubuntu 为例安装。

先安装必需的包:

sudo apt-get install --no-install-recommends gettext build-essential autoconf libtool libpcre3-dev asciidoc xmlto libev-dev libc-ares-dev automake libmbedtls-dev libsodium-dev

安装 Libsodium:

# Installation of Libsodium
export LIBSODIUM_VER=1.0.13
wget https://download.libsodium.org/libsodium/releases/libsodium-$LIBSODIUM_VER.tar.gz
tar xvf libsodium-$LIBSODIUM_VER.tar.gz
pushd libsodium-$LIBSODIUM_VER
./configure --prefix=/usr && make
sudo make install
popd
sudo ldconfig

安装 MbedTLS:

# Installation of MbedTLS
export MBEDTLS_VER=2.6.0
wget https://tls.mbed.org/download/mbedtls-$MBEDTLS_VER-gpl.tgz
tar xvf mbedtls-$MBEDTLS_VER-gpl.tgz
pushd mbedtls-$MBEDTLS_VER
make SHARED=1 CFLAGS=-fPIC
sudo make DESTDIR=/usr install
popd
sudo ldconfig

安装 Shadowsocks-libev:

export SHADOWSOCKS_LIBEV_VER=2.6.0
wget https://github.com/shadowsocks/shadowsocks-libev/releases/download/v3.2.0/shadowsocks-libev-$SHADOWSOCKS_LIBEV_VER.tar.gz
tar xvf shadowsocks-libev-$SHADOWSOCKS_LIBEV_VER.tar.gz
pushd shadowsocks-libev-$SHADOWSOCKS_LIBEV_VER
./autogen.sh && ./configure --prefix=/usr && make
sudo make install

配置 Shadowsocks-libev

# Edit the configuration file
sudo vim /etc/shadowsocks-libev/config.json

# Edit the default configuration for debian
sudo vim /etc/default/shadowsocks-libev

# Start the service
sudo systemctl start shadowsocks-libev      # for systemd

Shadowsocks 配置文件

{
    "server":"127.0.0.1",
    "server_port":8388,
    "password":"password",
    "timeout":30,
    "method":"chacha20-ietf-poly1305",
    "fast_open":true    
}

请修改对应的端口(server_port)和密码(password),如果服务器支持 ipv6 可以设置 “server”:["[::0]", “0.0.0.0”] 并开启 “ipv6_first”:true, 加密方式(method)推荐 chacha20-ietf-poly1305

优化 Shadowsocks

开启 BBR,BBR 是 Google 最新开发的 TCP 拥塞控制算法,目前有着较好的带宽提升效果,推荐安装。

检查系统内核

BBR 在 Linux kernel 4.9 引入,首先检查服务器内核版本只要大于 4.9 版就可以使用。

$ uname -r
4.10.0-24-generic

开启 BBR

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

执行命令,使设置生效执行

$ sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

检查 BBR 是否开启成功

执行命令,结果中有 bbr 即表示内核已开启 BBR 算法。

$ sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno

执行命令,结果有 tcp_bbr 一行表示 BBR 已成功启动。

$ lsmod | grep bbr
tcp_bbr                20480  0

一键开启 BBR,如果觉得上面比较麻烦或出现问题可以使用该方法,检查是否安装成功请按照上面的方法。

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

请输入 y 后回车进行安装

增加 TCP 连接数量

sudo vim /etc/security/limits.conf

增加一下内容

* soft nofile 51200
* hard nofile 51200

检查是否生效(需要重启)

$ ulimit -HSn
51200

调整内核参数

sudo vim /etc/sysctl.d/local.conf

复制粘贴一下内容

# 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

执行命令,使配置生效

sysctls  -p

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

编辑 config.json:

sudo vim /etc/shadowsocks/config.json

将 fast_open 的值由 false 修改为 true。

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

重启

sudo reboot

最后最好重启一次查看是否可以正常使用。

一键安装

Debian 或 Ubuntu 下一键安装 Shadowsocks-libev 最新版本。该安装脚本由秋水逸冰提供。

使用 root 用户登录,执行以下命令:

wget --no-check-certificate -O shadowsocks-libev-debian.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev-debian.sh
chmod +x shadowsocks-libev-debian.sh
./shadowsocks-libev-debian.sh 2>&1 | tee shadowsocks-libev-debian.log

安装完成后,会提示相关服务器信息:

Congratulations, Shadowsocks-libev server install completed!
Your Server IP        :your_server_ip
Your Server Port      :your_server_port
Your Password         :your_password
Your Encryption Method:your_encryption_method

卸载方法:

./shadowsocks-libev-debian.sh uninstall

本脚本安装完成后,已将 Shadowsocks-libev 加入开机自启动。

使用命令:

启动:

/etc/init.d/shadowsocks start

停止:

/etc/init.d/shadowsocks stop

重启:

/etc/init.d/shadowsocks restart

查看状态:

/etc/init.d/shadowsocks status

以上两种安装模式,请自由选择,只要能安装成功就可以。