服务端安装
如果没有 root 权限,首先获取 root 权限
1 | sudo su |
Debian / Ubuntu
1 | apt-get install python-pip |
CentOS
1 | yum install python-setuptools && easy_install pip |
在 etc 目录下创建 shadowsocks.json 文件,并且配置如下
1 | { |
创建完成后,给文件相应的权限
1 | sudo chmod 755 /etc/shadowsocks.json |
安装所需的软件
1 | sudo apt-get install python-m2crypto |
后台运行 shadowsocks 服务
1 | ssserver -c /etc/shadowsocks.json -d start |
配置shadowsocks开机自启动
编辑 /etc/rc.local 文件
1 | sudo vi /etc/rc.local |
在 exit 0 这一行的上边加入如下
1 | /usr/local/bin/ssserver –c /etc/shadowsocks.json |
到此配置完成。重启服务器后,ss会自动启动。
TIPS
加密方式推荐使用rc4-md5,因为 RC4 比 AES 速度快好几倍,如果用在路由器上会带来显著性能提升。旧的 RC4 加密之所以不安全是因为 Shadowsocks 在每个连接上重复使用 key,没有使用 IV。现在已经重新正确实现,可以放心使用。更多可以看 issue。
加速优化
下面介绍几种简单的优化方法,也是比较推荐的几种。
安装 BBR 加速
输入如下的命令进行安装:
1 | wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh |
安装完成之后重启服务器
内核参数优化
首先,将 Linux 内核升级到 3.5 或以上。
第一步,增加系统文件描述符的最大限数
编辑文件 limits.conf
vi /etc/security/limits.conf
增加以下两行
1 | * soft nofile 51200 |
启动shadowsocks服务器之前,设置以下参数
第二步,调整内核参数
修改配置文件 /etc/sysctl.conf
1 | fs.file-max = 51200 |
修改后执行 sysctl -p 使配置生效
net-speeder
net-speeder 原理非常简单粗暴,就是发包翻倍,这会占用大量的国际出口带宽,本质是损人利己,不建议使用。
Centos 下安装依赖包
1 | rpm -ivh epel-release-7-5.noarch.rpm |
然后安装依赖包:
1 | yum install libnet libpcap libnet-devel libpcap-devel |
下载官方的 tar.gz 压缩包。解压安装运行:
1 | tar zxvf net_speeder-v0.1.tar.gz |
首先你需要知道你的网卡设备名,可以使用 ifconfig 查看。假设是eth0,那么运行方法是:
关闭 net-speeder
pyenv 管理 python 版本
linux 中的 python 版本使用 pyenv 管理,如果 pyenv 失效了,可以通过以下命令恢复(更换 python 版本会导致 shadowsocks 不可用,因为安装的包找不到了)
1 | echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc |
常见错误处理
1.AttributeError: /usr/lib/x86_64-Linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup
最近在 Ubuntu 18.04 LTS 版本上安装编译 shadowsocks 之后无法启动,报错如下:
1 | NFO: loading config from ss.json |
这个问题是由于在 openssl1.1. 0版本中,废弃了 EVP_CIPHER_CTX_cleanup 函数,如官网中所说:
1 | EVP_CIPHER_CTX was made opaque in OpenSSL 1.1.0. As a result, EVP_CIPHER_CTX_reset() appeared and EVP_CIPHER_CTX_cleanup() disappeared. |
处理方法:
用vim打开文件(该路径请根据自己的系统情况自行修改,如果不知道该文件在哪里的话,可以使用find命令查找文件位置):
1 | vim /usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py |
- 进入编辑模式, 跳转到52行( shadowsocks2.8.2版本,其他版本搜索一下 cleanup)
- 将第52行 libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,) 改为libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)
- 再次搜索cleanup(全文件共2处,此处位于111行),将libcrypto.EVP_CIPHER_CTX_cleanup(self._ctx) 改为libcrypto.EVP_CIPHER_CTX_reset(self._ctx)
- 保存并退出,启动shadowsocks服务:
1
ssserver -c /etc/shadowsocks.json -d start
2.谷歌服务器启动之后无连接
这是因为在 shadowsocks.json 配置文件中将 server 配置成了公网ip,需要将这里配置为 内部ip即可。