CentOS 7系统架设Shadowsocks-libev服务器

1. 安装Shadowsocks服务端

Shadowsocks程序有多个版本:

  • shadowsocks-python
  • shadowsocks-nodejs
  • shadowsocks-go
  • shadowsocks-libev

经过对比,选择shadowsocks-libev
原因:

1
2
3
4
5
yum install git gcc openssl-devel
git clone https://github.com/madeye/shadowsocks-libev.git
cd shadowsocks-libev
./configure && make
make install

2. 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkdir -p /etc/shadowsocks
cat << EOF > /etc/shadowsocks/config.json
{
"server":"0.0.0.0",
"server_port":10000,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"yourpasswd",
"timeout":300,
"method":"aes-192-cfb",
"fast_open": false,
"workers": 1
}
EOF

关于TCP Fast Open

看起来很美,但一定要经过测试,表现稳定后才用。如果你已经使用了 VPN 之类的网络层封装/隧道,不推荐开启 TCP Fast Open ,不确定能被正确封装并且被隧道另一头支持
而且需要Linux 3.7内核支持,自己视情况开启

如果设置"fast_open": ture,则需要设置(未验证):
echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf

3. 防火墙设置

如果开启了防火墙,也需要进行设置。
例如,对于Firewall,执行:

1
2
firewall-cmd --permanent --add-port=8888/tcp
firewall-cmd --reload

8888为服务端口号,根据自己情况修改

4. 守护进程形式运行服务端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cat << EOF > /usr/lib/systemd/system/shadowsocks.service
[Unit]
Description=ShadowSocks service
After=syslog.target network.target auditd.service
[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/ss-server -c /etc/shadowsocks/config.json
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF

注意:如果服务端口小于1024,则需要改为user=root

加入开机启动,以及启动命令:

1
2
systemctl enable shadowsocks
systemctl start shadowsocks

5. Win客户端

由于某些原因,shadsocks-windows应该已经停止更新了
而且,使用shadsocks-windows客户端,在服务器日志中会出现错误:

invalid password or cipher
ERROR: failed to handshake with xx.xx.xx.xx

推荐使用librehat/shadowsocks-qt5客户端

参考: