CentOS服务器Shadowsocks

在很久之前我用Windows时一直使用 SoftEther VPN 来访问外网,但现在已经转向了SS,而且仅是通过转发流量来科学上网的话,无疑SS是最合适的,因此在 hostwinds 上也买了一台centos7服务器准备搭建shadowsocks。

Shadowsocks官网: https://shadowsocks.org/en/index.html
Shadowsocks配置介绍: https://shadowsocks.org/en/config/quick-guide.html
Github:https://github.com/shadowsocks/

SS配置服务器

查看python版本

1
2
[root@hwsrv-548851 ~]# python --version
Python 2.7.5

我的centos服务器默认没有安装Python Pip,同时可能还需要更新pip

1
2
[root@hwsrv-548851 ~]# yum install python-pip
[root@hwsrv-548851 ~]# pip install --upgrade pip

之后就可以通过pip安装shadowsocks

1
[root@hwsrv-548851 ~]# pip install shadowsocks

到此SS服务端安装完成,接下来还需要json格式的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"server":"my_server_ip",
"server_port":8388,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"barfoo!",
"timeout":600,
"method":"chacha20-ietf-poly1305"
}
server: 服务器主机IP,默认 0.0.0.0
server_port: 服务器端口 ,默认 8388
local_address: 一般为 127.0.0.1
local_port: 本地端口,一般 1080
password: 连接SS服务器的密码
timeout: 连接超时时间/s ,默认 300
method: 加密方式,默认 aes-256-cfb

如果要从命令行来启动服务端,则可以

1
[root@hwsrv-548851 ~]# ssserver -p 8998 -k mypassword

一般都是从配置文件来启动ss服务端
类似如下 config.json

1
2
3
4
5
6
7
8
9
{
"server": "104.168.xxx,xxx",
"server_port": 8998,
"local_address": "127.0.0.1",
"local_port": "1080",
"password": "mypassword",
"timeout": 60,
"method": "aes-256-cfb"
}

使用配置文件启动服务端并在后台运行: ssserver -c config.json -d start ,检测是否成功启动

1
2
3
[root@hwsrv-548851 ~]# netstat -anp|grep -i 8998
tcp 0 0 104.168.xxx,xxx:8998 0.0.0.0:* LISTEN 27701/python2
udp 0 0 104.168.xxx,xxx:8998 0.0.0.0:* 27701/python2

SS配置客户端

SS的客户端分为Windows,MacOS,Linux,Android,iOS和OpenWRT
这里介绍Windows,Linux

Linux

对于archlinux最直接的方法: sudo pacman -S shadowsocks-qt5 从GUI连接ss服务器
也可以从pip下载shadowsocks: pip install shadowsocks,然后再创建一个同服务端的config.json配置文件如 sslocal -c config.json -d start

WIndows

Windows下的 ss客户端 也可以从Python pip安装 shadowsocks 。也可以从 https://github.com/shadowsocks/shadowsocks-windows/releases 下载

不过如果从pip下载 shadowsocks,那么是无法直接启动的,解决方法如下:
https://slproweb.com/products/Win32OpenSSL.html 下载最新版Windows openssl安装,然后去openssl安装目录 C:\Program Files\OpenSSL-Win64 找到 libcrypto-1_1-x64.dll 复制到 Python Scripts目录并重命名为libcrypto.dll 。否则提示 libcrypto(OpenSSL) not found 错误。

完成以上时运行 sslocal -c config.json 会提示错误 AttributeError: function 'EVP_CIPHER_CTX_cleanup' not found

原因是 openssl1.1.0版本中,废弃了EVP_CIPHER_CTX_cleanup 函数,可以用 EVP_CIPHER_CTX_reset 函数替代EVP_CIPHER_CTX_cleanup 函数。

那么我们只需打开 C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Lib\site-packages\shadowsocks\crypto\openssl.py 文件(路径可能不同),将 EVP_CIPHER_CTX_cleanup 全部替换为 EVP_CIPHER_CTX_reset,总共两处需要修改,之后保存即可。

执行 sslocal -c config.json 成功!

参考