armbian版本:ARMBIAN 5.44 user-built Ubuntu 18.04.2 LTS 3.14.29

一、安装SS客户端
1、安装pip

apt install python-gevent python-pip

2、安装ss

pip install shadowsocks

3、生成配置文件

vi /etc/shadowsocks.json

{  
"server":"your_server_ip", #ss服务器IP

"server_port":your_server_port, #端口

"local_address": "127.0.0.1", #本地ip

"local_port":1080, #本地端口

"password":"your_server_passwd", #连接ss密码

"timeout":300, #等待超时

"method":"rc4-md5", #加密方式

"fast_open": false,
  
  # true 或 false。如果你的服务器 Linux 内核在3.7+,可以开启 fast_open 以降低延迟。开启方法: echo 3 > /proc/sys/net/ipv4/tcp_fastopen 开启之后,将 fast_open 的配置设置为 true 即可

"workers": 1 # 工作线程数  
}

4、后台运行

nohup sslocal -c /etc/shadowsocks.json /dev/null 2>&1 & 

5、验证Shadowsocks客户端服务是否正常运行

curl --socks5 127.0.0.1:1080 http://httpbin.org/ip

出现SS服务器IP地址即运行正常

二、设置代理

1、安装privox

apt-get install privoxy -y

启动privoxy服务

systemctl enable privoxy  
systemctl start privoxy  
systemctl status privoxy

2、配置privoxy

vi /etc/privoxy/config 添加socks5代理,如下:

listen-address 127.0.0.1:8118 # 8118 是默认端口,不用改  
forward-socks5t / 127.0.0.1:1080 . #转发到本地端口,注意最后有个点

3、设置http、https代理

vi /etc/profile 在最后添加如下信息  
PROXY_HOST=127.0.0.1  
export all_proxy=http://$PROXY_HOST:8118  
export ftp_proxy=http://$PROXY_HOST:8118  
export http_proxy=http://$PROXY_HOST:8118  
export https_proxy=http://$PROXY_HOST:8118  
export no_proxy=localhost,172.16.0.0/16,192.168.0.0/16.,127.0.0.1,10.10.0.0/16

重载环境变量

 source /etc/profile

遇到的坑:
1、pip安装ss报错解决

vi /usr/bin/pip  
解决方案:  
原:from pip import main   
修改后:from pip._internal import main

2、SS报错1

AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol  
解决方案:  

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

libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)  
替换成  
libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)  

libcrypto.EVP_CIPHER_CTX_cleanup  
替换成  
libcrypto.EVP_CIPHER_CTX_reset

3、SS报错2

解决方案:

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

libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)   
改成:  
libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)  

libcrypto.EVP_CIPHER_CTX_cleanup(self._ctx)   
改成:  
libcrypto.EVP_CIPHER_CTX_reset(self._ctx)

取消代理命令  
while read var; do unset $var; done < <(env | grep -i proxy | awk -F= '{print $1}')