shadowsocks libev
静态编译shadowsocks libev
在alpine里编译
apk update && apk upgrade && apk add wget make gcc g++ perl
先安装依赖
# Installation of Libsodium
cd /tmp
export LIBSODIUM_VER=1.0.12
wget --no-check-certificate https://download.libsodium.org/libsodium/releases/libsodium-$LIBSODIUM_VER.tar.gz
tar xvf libsodium-$LIBSODIUM_VER.tar.gz
cd libsodium-$LIBSODIUM_VER
./configure --prefix=/usr && make -j2 && make install
cd /tmp
ldconfig
# Installation of MbedTLS
cd /tmp
export MBEDTLS_VER=2.6.0
wget --no-check-certificate https://tls.mbed.org/download/mbedtls-$MBEDTLS_VER-gpl.tgz
tar xvf mbedtls-$MBEDTLS_VER-gpl.tgz
cd mbedtls-$MBEDTLS_VER
make SHARED=1 CFLAGS=-fPIC && make DESTDIR=/usr install
cd /tmp
ldconfig
安装完这两个依赖后,下面准备开始静态编译
apk update && apk upgrade && apk add gcc g++ make autoconf curl wget build-base linux-headers libev-dev libtool udns-dev libsodium-dev mbedtls-dev pcre-dev
SS_VER=3.0.8
cd /tmp
curl -sSL https://github.com/shadowsocks/shadowsocks-libev/releases/download/v${SS_VER}/shadowsocks-libev-${SS_VER}.tar.gz | tar xz --strip 1
CFLAGS=-Os ./configure --prefix=/usr --enable-static --disable-documentation
sed -i "s/LDFLAGS = /LDFLAGS = -all-static/g" ./src/Makefile
sed -i "s/LDFLAGS = /LDFLAGS = -all-static/g" ./Makefile
make 之前需要存在以下文件/usr/lib/libev.a /usr/lib/libsodium.a /usr/lib/libpcre.a
make -j2
编译完成后即可在src目录得到静态编译的ss-local,ss-server等
使用
启动server端
ss-server -s 0.0.0.0 -p 443 -k 123456 -m rc4-md5 -t 300 -d 8.8.8.8 -u
with Linux kernel > 3.7.0 可以加上--fast-open
ss-server -s 0.0.0.0 -p 443 -k 123456 -m rc4-md5 -t 300 -d 8.8.8.8 --fast-open -u
后台运行:
ss-server -s 0.0.0.0 -p 443 -k 123456 -m rc4-md5 -t 300 -d 8.8.8.8 -u > /tmp/ss.log 2>&1 &
GO语言版本的也十分方便哦
这里提供一个基于docker
的go语言版本,docker go shadowsocks,只有3.3MB
十分方便
同时也含有libev版本的可供选择
加密方式
AEAD 是 Shadowsocks 最新的协议标准,增强了应对发现和检测的强度。
https://shadowsocks.org/en/spec/AEAD-Ciphers.html
以下是四种常见的AEAD Cipher,相较OTA Cipher而言AEAD Cipher极大降低了被主动探测的风险,故推荐使用AEAD Cipher
aes-128-gcm aes-192-gcm aes-256-gcm chacha20-ietf-poly1305 以及几种常用的OTA Cipher方式
rc4-md5 aes-128-cfb aes-128-ctr 关于AEAD Cipher的选择,需要注意的是,虽然ARM早在2015就收购了Shadowsocks-libev依赖的加密库之一mbed tls,但至今mbed tls并未对ARMv8做出实质性的优化,导致AES GCM系Cipher在较新的64位移动设备上性能低下
1、“chacha20-poly1305” “chacha20-ietf-poly1305”有区别
2、ChaCha20-Poly1305是Google所采用的一种新式加密算法,性能强大,在CPU为精简指令集的ARM平台上尤为显著(ARM v8前效果较明显),在同等配置的手机中表现是AES的4倍(ARM v8之后加入了AES指令,所以在这些平台上的设备AES方式反而比chacha20-Poly1305方式更快,性能更好),可减少加密解密所产生的数据量进而可以改善用户体验,减少等待时间,节省电池寿命等。
3、chacha20-ietf-poly1305也是一种新式加密算法,比chacha20-poly1305”更快。
4、谷歌选择了ChaCha20和伯恩斯坦的Poly1305消息认证码取代过去一直在互联网安全领域使用的基于OpenSSL的RC4密码,谷歌最初是为了保证能够在Android手机上的Chrome浏览器和谷歌网站间的HTTPS(TLS/SSL)通讯。
5、在谷歌采用TLS(安全传输层协议)不久后,ChaCha20和Poly1305均用在OpenSSH中的ChaCha20-Poly1305新算法中,这使得OpenSSH可能避免因编译时间对OpenSSL产生依赖。ChaCha20还用于OpenBSD(一种多平台类UNIX操作系统)中的RC4随机数生成器,在DragonFlyBSD中作为内核的伪随机数产生器(Cryptographically Secure Pseudo-Random Number Generator,简称CSPRNG)的子程序。
网络内核参数优化
修改ulimit
ulimit -n
可以查看当前的
vim /etc/security/limits.conf
添加一下两行
* soft nofile 51200
* hard nofile 51200
KVM 和 XEN 可以修改内核,明显提升网络环境差的情况下的表现,使用hybla
控制算法,效果明显,能提速30%
/etc/sysctl.conf
net.core.somaxconn = 4096
net.netfilter.nf_conntrack_max = 64000
fs.file-max = 51200
#提高整个系统的文件限制
net.ipv4.tcp_syncookies = 1
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 0
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
#为了对NAT设备更友好,建议设置为0。
net.ipv4.tcp_fin_timeout = 30
#修改系統默认的 TIMEOUT 时间。
net.ipv4.tcp_keepalive_time = 1200
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 10000 65000 #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为10000到65000。(注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口!)
net.ipv4.tcp_max_syn_backlog = 8192
#表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000
#表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。
#额外的,对于内核版本新于**3.7.1**的,我们可以开启tcp_fastopen:
net.ipv4.tcp_fastopen = 3
#increase TCP max buffer size settable using setsockopt()
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
#increase Linux autotuning TCP buffer limit
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
#increase the length of the processor input queue
net.core.netdev_max_backlog = 250000
#recommended for hosts with jumbo frames enabled
net.ipv4.tcp_mtu_probing=1
#使用拥塞算法Hybla
net.ipv4.tcp_congestion_control = hybla
然后sysctl -p
使之生效
也可以使用命令使本次生效
sysctl -w net.ipv4.tcp_congestion_control=hybla
sysctl -w net.ipv4.tcp_fastopen=3
可参见 https://github.com/Long-live-shadowsocks/shadowsocks/wiki/Optimizing-Shadowsocks
OPENVZ只能修改
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.netfilter.nf_conntrack_max = 64000
使用kcptun加速
服务器上
alias kcptun_start='server_linux_amd64 -t 127.0.0.1:443 -l :4433 -sndwnd 2048 -rcvwnd 2048 -mode fast2 > /var/log/kcptun.log 2>&1 & '
客户机上
alias kcptun_start='kcptun_client -r vpsIP:4433 -l :4433 -sndwnd 2048 -rcvwnd 2048 -mode fast2 > /var/log/kcptun.log 2>&1 &'
python 版本
升级pip本身
pip install --upgrade pip
pip install shadowsocks --upgrade
--upgrade 同 -U
代表如果已安装则升级到最新版
/etc/systemd/system/
目录下shadowsocks.service
[Unit]
Description=Shadowsocks
[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json
[Install]
WantedBy=multi-user.target
/etc/systemd/system/v2ray.service
[Unit]
Description=V2Ray Service
After=network.target
Wants=network.target
[Service]
Type=simple
PIDFile=/var/run/v2ray.pid
ExecStart=/usr/bin/v2ray/v2ray -config /etc/v2ray/config.json
Restart=on-failure
[Install]
WantedBy=multi-user.target
配置 tls + ws
使用 kcptun 加速
https://github.com/xtaci/kcptun
go语言编写,直接下载使用即可
KCP Server:
./server_linux_amd64 -t "127.0.0.1:443" -l ":4000" -mode fast3 -nocomp -sockbuf 16777217 -dscp 46
KCP Client:
./client_darwin_amd64 -r "52.78.236.26:4000" -l ":80" -mode fast3 -nocomp -autoexpire 900 -sockbuf 16777217 -dscp 46
./client_darwin_amd64 -r "52.78.236.26:4000" -l ":443" -mode fast3 -nocomp -autoexpire 900 -sockbuf 16777217 -dscp 46
alias kcptun_start='server_linux_amd64 -t 127.0.0.1:443 -l :serverPort -sndwnd 2048 -rcvwnd 2048 -mode fast2 > /var/log/kcptun.log 2>&1 & '
client端: client_linux_amd64 -r serverIp:serverPort -l :443 -sndwnd 2048 -rcvwnd 2048 -mode fast2
kcptun 使用udp
通信,监听的udp端口,未开启tcp端口. python shadowsocks
是tcp端口和udp端口都开启.
使用netstat -anlup
查看本机的udp端口使用情况,远端可以使用nc测试UDP端口 nc -vuz 172.168.1.3 137
配置文件的json格式参见 http://zhangyongcun.com/2016/11/22/使用-Kcptun-加速-shadowsocks/
client wget http://share.suconghou.cn/files/shadowsocks/kcp/client_config.json
server wget http://share.suconghou.cn/files/shadowsocks/kcp/server_config.json
server_config.json
/etc/systemd/system/kcpserver.service
[Unit]
Description=kcptun-server
[Service]
TimeoutStartSec=0
ExecStart=/usr/local/bin/server_linux_amd64 -c /etc/server_config.json
[Install]
WantedBy=multi-user.target
server
./udp2raw -s -l0.0.0.0:8855 -r 127.0.0.1:4000 -k "passwd" --raw-mode faketcp -a
统计ss当前的链接
统计当前连接ss的客户端,并统计连接数
netstat -nat | grep "192.168.1.3:443" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20