苏苏的博客

简约至极

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.5.1
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

其中 需要 libudns.a 可以到http://www.corpit.ru/mjt/udns.html下载编译

curl -sSL http://www.corpit.ru/mjt/udns/udns-0.4.tar.gz | tar xz && cd udns-0.4 && ./configure  && make -j2

复制编译好的libudns.a/usr/lib/libudns.a mv libudns.a /usr/lib/

make 之前需要存在以下文件/usr/lib/libev.a /usr/lib/libsodium.a /usr/lib/libmbedcrypto.a /usr/lib/libpcre.a /usr/lib/libudns.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版本的可供选择

网络内核参数优化

修改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

使用 kcptun 加速

https://github.com/xtaci/kcptun go语言编写,直接下载使用即可

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

统计ss当前的链接

统计当前连接ss的客户端,并统计连接数

netstat -nat | grep "192.168.1.3:443" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20

音乐标题
歌手