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
以上两种安装模式,请自由选择,只要能安装成功就可以。