搭建和配置SS服务器

介绍两种搭建SS服务器的方法,选其一即可。

不必下载使用网络上一键安装的sh或python脚本,因为可能链接已经失效或者版本太老。

以下说明以Ubuntu为例,其他版本的Linux系统均适用。

一、准备VPS

可以到https://www.vultr.com/上面买一个,一般每个月5美元。

二、使用Python搭建

1、安装pip

sudo apt-get install python-pip

2、安装SS

sudo pip install shadowsocks

若在执行 pip install -r requirements.txt 时遇到错误:Command "python setup.py egg_info" failed with error code 1

解决方法是更新setuptools和pip,执行以下命令

sudo pip install --upgrade setuptoolspython -m pip install --upgrade pip

3、建立配置文件

nano /etc/shadowsocks.json

在配置文件中填入以下内容,并按需修改

{
"server":"0.0.0.0", # 服务器监听地址,不改
"server_port":8388, # 监听端口,可更改
"local_address": "127.0.0.1", # 本地地址,不改
"local_port":1080, # 本地端口,可更改
"password":"mypassword", # 密码,一定要更改
"timeout":300, # 超时,可更改
"method":"aes-256-cfb" # 加密方式,可更改
}

4、启动服务

在命令行中启动服务,并后台执行。

ssserver -c /etc/shadowsocks.json -d start &

5、若启动时报undefined symbol: EVP_CIPHER_CTX_cleanup错误

INFO: loading config from ss.json
2016-12-14 22:47:50 INFO loading libcrypto from libcrypto.so.1.1
Traceback (most recent call last):
File “/usr/local/bin/sslocal”, line 11, in sys.exit(main())
File “/usr/local/lib/python2.7/dist-packages/shadowsocks/local.py”, line 39, in main
config = shell.get_config(True)
File “/usr/local/lib/python2.7/dist-packages/shadowsocks/shell.py”, line 262, in get_config
check_config(config, is_local)
File “/usr/local/lib/python2.7/dist-packages/shadowsocks/shell.py”, line 124, in check_config
encrypt.try_cipher(config[‘password’], config[‘method’])
File “/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py”, line 44, in try_cipher
Encryptor(key, method)
File “/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py”, line 83, in init
random_string(self._method_info[1]))
File “/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py”, line 109, in get_cipher
return m[2](method, key, iv, op)
File “/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py”, line 76, in init
load_openssl()
File “/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py”, line 52, in load_openssl
libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
File “/usr/lib/python2.7/ctypes/init.py”, line 375, in getattr
func = self.getitem(name)
File “/usr/lib/python2.7/ctypes/init.py”, line 380, in getitem
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /usr/lib/x86_64-Linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup

该问题是由于在openssl1.1.0版本中,废弃了EVP_CIPHER_CTX_cleanup函数,如官网中所说:

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.
EVP_CIPHER_CTX_init() remains as an alias for EVP_CIPHER_CTX_reset().

解决方案:

(1)打开文件:

sudo nano /usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py

(该路径请根据自己的系统情况自行修改,如果不知道该文件在哪里的话,可以使用find命令查找文件位置)

(2)跳转到52行(shadowsocks2.8.2版本,其他版本搜索一下cleanup关键字)

(3)修改代码

搜索cleanup(全文件共2处,此处位于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)

(4)保存并退出

(5)启动shadowsocks服务:service shadowsocks start 或 sslocal -c ss配置文件目录,问题解决。

(6)配置文件的目录改为刚才保存的目录。末尾的&表示后台运行。也可用nohup指令不挂断地运行。

nohup ssserver -c /etc/shadowsocks.json -d start &

三、使用Nodejs搭建(若用上述Python方式启动成功则该部分可略过)

1、安装nodejs和npm:

sudo apt-get install nodejs nodejs-legacy npm

2、安装SS

sudo npm install shadowsocks

3、修改配置文件

使用nodejs搭建时,配置文件会自动生成,所以无需新建。仍然按照前面介绍的方法修改配置文件。配置文件的位置在nodejs的shadowsocks安装目录下。可以根据安装过程的打印信息看到安装目录,或用find指令搜索config.json。

sudo nano [directory]/config.json

配置方法同上文Python搭建方式。

4、启动服务

在命令行中启动服务,并后台执行。

ssserver &

末尾的&表示后台运行。也可用nohup指令不挂断地运行。

nohup ssserver &

四、其他常见问题

1、启动服务时报错。

EADDRNOTAVAIL:地址无效。注意配置文件中的server写0.0.0.0。

EADDRINUSE:地址重复。不要重复开启服务。

2、服务已启动但无法连接。

首先确认配置文件正确。

然后确认端口(即server_port)没有被使用。

通过以下命令查看临时端口范围:

cat /proc/sys/net/ipv4/ip_local_port_range

通过在另一台Linux计算机上执行以下命令查看端口是否打开:

telnet [Your Server IP] [Your Port]

作为参考,22号端口一般都是打开的。

如果端口没有打开,考虑是否在服务器上开启了防火墙。用以下指令查看防火墙状态。

sudo ufw status

如果不是防火墙导致端口关闭,则可能是服务器后台管理系统进行了限制。

登录你购买服务器的网站,进入后台管理系统,查看服务器的端口配置。修改你想用的端口(写在配置文件里的)的配置,允许或启用TCP和UDP的进出。