CY-Left

未分类

Ubuntu 安装配置 Shadowsocks 客户端

安装

apt-get install python-pip
pip install shadowsocks

配置

在方便的位置茶创建 shadowsocks.json 配置文件,通常放到 /etc 下:
建议先安装 vim

sudo vi /etc/shadowsocks.json

然后在shadowsocks.json里面添加配置信息

{
  "server":"这里填写 ss 服务器 ip",
  "local_address": "127.0.0.1",
  "local_port":1080,
  "server_port":my_server_port,
  "password":"my_password",
  "timeout":300,
  "method":"aes-256-cfb"
}

然后将

my_server_port 改为自己的服务器端口 (通常为 443)
my_server_password 改为自己的密码
method的值改为自己的加密方式,一般是 aes-256-cfb 或者 rc4-md5

安装浏览器代理

安装 SwitchyOmega 插件

启动

/etc/shadowsocks.json

前端启动:sslocal -c /etc/shadowsocks.json;
后端启动:sslocal -c /etc/shadowsocks.json -d start;
后端停止:sslocal -c /etc/shadowsocks.json -d stop;

重启(修改配置要重启才生效):sslocal -c /etc/shadowsocks.json -d restart

问题

一般按照流程, 就可以科学上网了,但是可能会遇见这样的错误:undefined symbol: EVP_CIPHER_CTX_cleanup

解决,在终端输入:

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

具体路径不同,请根据报错路径而定,但目的只有一个,就是找到openssl.py文件。

如果 nautilus 指令报错,那就用 cd 命令到这个目录下,使用 vim 编辑修改 openssl.py 文件。

如果是用文本文档打开,那搜索CIPHER_CTX_cleanup,应该有两处,替换为CIPHER_CTX_reset,然后保存文件。

如果是用vim编辑,那么输入

:%s/cleanup/reset/
:x

然后重新运行Shadowsocks即可。

原因:
这个问题是由于在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().

EVP_CIPHER_CTX_reset函数替代了EVP_CIPHER_CTX_cleanup函数

EVP_CIPHER_CTX_reset函数说明:

EVP_CIPHER_CTX_reset() clears all information from a cipher context and free up any allocated memory associate with it, except the ctx itself. This function should be called anytime ctx is to be reused for another EVP_CipherInit() / EVP_CipherUpdate() / EVP_CipherFinal() series of calls.

EVP_CIPHER_CTX_cleanup函数说明:

EVP_CIPHER_CTX_cleanup() clears all information from a cipher context and free up any allocated memory associate with it. It should be called after all operations using a cipher are complete so sensitive information does not remain in memory.

可以看出,二者功能基本上相同,都是释放内存,只是应该调用的时机稍有不同,所以用reset代替cleanup问题不大。

本文虽拙,却也系作者劳动,转载还请保留本文链接: http://cyleft.com/?p=826