ubuntu 18.04 安装配置shadowsocks

有时候真想不明白当局者的想法是怎样的,屏蔽一些时事政治相关的或者一些不可描述的网站就算了,大家也都可以理解。但为什么连各大技术服务站点也一锅端了呢?github 访问越来越慢了, Android studio 建个工程,gradle 就得同步大半天, npm 也好不到哪去。想下个 Android的系统源码下不动,下个 Fuschia 的源码也下不动。

幸亏国内还有一些良心的学校,企业提供了各种开源镜像,才让我们的开发环境稍微改善。

但有些场景还是需要搭梯子才能满足的,比如 google 搜索,查看最新 Android 开发文档, 下载 Fuschia 系统源码等。之前一直用 lantern,还买了会员,但今年也不太稳定了。于是改用 shadowsocks 试试,以下是折腾记录。

1. 安装配置 shadowsocks

在 Linux 系统上可以通过 pip 安装命令行版本的 shadowsocks

1
2
sudo apt install python-pip
sudo pip install shadowsocks

任意目录新建配置文件 shadowsocks.json, 我就放在了自己的家目录

1
2
3
4
5
6
7
8
9
{
"server": "代理服务器IP",
"server_port": 代理服务器端口,
"password": "代理服务器访问密码",
"local_address":"127.0.0.1",
"localPort": 1080,
"method": "aes-256-cfb", //代理服务器访问数据加密方式,根据自己配置ss 服务端时的配置自行填写
"timeout":600
}

启动 shadowsocks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
qiushao@qiushao-pc:~$ sudo sslocal -c ~/shadowsocks.json -d start
INFO: loading config from /home/qiushao/shadowsocks.json
2019-11-14 23:29:01 INFO loading libcrypto from libcrypto.so.1.1
Traceback (most recent call last):
File "/usr/local/bin/sslocal", line 11, in <module>
load_entry_point('shadowsocks==2.8.2', 'console_scripts', 'sslocal')()
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 379, in __getattr__
func = self.__getitem__(name)
File "/usr/lib/python2.7/ctypes/__init__.py", line 384, 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
qiushao@qiushao-pc:~$

啊哦,好像不太顺利,网上搜索一下 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().

解决方法: 把所有的 EVP_CIPHER_CTX_cleanup 都改成 EVP_CIPHER_CTX_reset 就行。

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

改完之后再运行一遍,这次提示运行成功了

1
2
3
4
5
qiushao@qiushao-pc:~$ sudo sslocal -c ~/shadowsocks.json -d start
INFO: loading config from /home/qiushao/shadowsocks.json
2019-11-14 23:40:23 INFO loading libcrypto from libcrypto.so.1.1
started
qiushao@qiushao-pc:~$

2. 配置系统代理

打开系统设置 –> 网络 –> 网络代理
shadowsocks settings1

选择手动设置,按如下设置就行:
shadowsocks settings2

配置完之后,打开chrome浏览器我们发现已经可以愉快的玩耍了。但 firefox 不知为什么不行。反正也不用,就不管它了。
如果你的目的只是在浏览器上科学上网而已,那到此已经完成了,后面的可以不用继续看了。

3. 安装配置 privoxy

privoxy 本身也是一个代理软件,我们有 shadowsocks 不就够了?为什么要用到这家伙?
因为 shadowsocks 是 socks5 协议,但我们的终端只支持 http, https 协议。
所以需要使用 privoxy 把socks 和 http 协议作下转换。
这个安装配置也很简单:

1
2
sudo apt install privoxy
sudo vim /etc/privoxy/config

按下图来配置就行
privoxy setting

配置完后重启一下 privoxy 就行

1
sudo service privoxy restart

4. 终端代理配置

在 ~/.bashrc 中加入以下配置

1
2
3
4
5
# proxy settings
export http_proxy="http://127.0.0.1:8118"
export https_proxy="http://127.0.0.1:8118"
git config --global http.proxy http://127.0.0.1:8118
git config --global https.proxy http://127.0.0.1:8118

然后 source ~/.bashrc 终端和git就可以科学上网啦。

1
2
3
4
5
6
7
8
9
10
11
12
qiushao@qiushao-pc:~$ wget www.google.com
--2019-11-15 21:32:29-- http://www.google.com/
Connecting to 127.0.0.1:8118... connected.
Proxy request sent, awaiting response... 200 OK
Length: 12913 (13K) [text/html]
Saving to: ‘index.html’

index.html 100%[==========================================================================>] 12.61K --.-KB/s in 0s

2019-11-15 21:32:29 (381 MB/s) - ‘index.html’ saved [12913/12913]

qiushao@qiushao-pc:~$

想了解墙的基本原理及翻墙的基本原理的同学,可以参考下面这篇博客
上网限制和翻墙基本原理