Raspberry PI+Shadowsocks+Polipo实现科学上网

Step1:安装Shadowsocks客户端

Cao Yucheng
6 min readJan 19, 2018

执行:

sudo apt-get install python-pip python-m2cryptosudo pip install shadowsocks

Step2:配置Shadowsocks客户端

执行:

sudo nano /etc/shadowsocks.json

输入如下内容:

{    "server":"xxx.xxx.xxx.xxx",    "server_port":xxx,    "local_address": "127.0.0.1",    "local_port":1080,    "password":"xxx",    "timeout":600,    "method":"aes-256-cfb",    "fast_open": false,}
  • “server”:填入你的Shadowsocks服务器IP
  • "server_port":填入你的Shadowsocks服务器用于SS的端口号
  • “password”:填入你的Shadowsocks账户密码
  • “method”:填入你的Shadowsocks服务器使用的加密方法(一般默认为aes-256-cfb)
  • 其余的不用修改

Step3:添加开机启动

执行:

sudo nano /etc/rc.local

在最后一行 exit 0 上面添加如下语句:

/usr/local/bin/sslocal -c /etc/shadowsocks.json -d start

检查能否正确运行:

sudo systemctl status rc-local.service

若正确运行,应输出类似结果:

注:shadowsocks无法运行错误解决方案

在执行上一条命令时可能会出现rc.local执行失败的问题,这是由于shadowsocks运行出错,单独执行下面的命令:

/usr/local/bin/sslocal -c /etc/shadowsocks.json -d start

若报如下的错误:

Traceback (most recent call last):
File "/usr/local/bin/sslocal", line 9, in
load_entry_point('shadowsocks==2.8.2', 'console_scripts', 'sslocal')()
....
....
....
AttributeError: /usr/local/lib/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup

则是由于Openssl库更新导致的方法名称变更问题,修复方法如下:

执行:

sudo nano /usr/local/lib/python2.7/distpackages/shadowsocks/crypto/openssl.py

libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)

覆写为

ibcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)
图中被标注为黄色的字段为修改后应显示的内容

libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (self._ctx)

覆写为

libcrypto.EVP_CIPHER_CTX_reset.argtypes = (self._ctx)
图中被标注为黄色的字段为修改后应显示的内容

修改后重启树莓派,再次执行:

sudo systemctl status rc-local.service

应可得正确输出结果。

Step4:使用Polipo将Sock5流量转换为HTTP流量

sudo apt-get install polipo
  • 编辑配置文件:
sudo nano /etc/polipo/config

输入如下内容:

# This file only needs to list configuration variables that deviate# from the default values.  See /usr/share/doc/polipo/examples/config.sample# and "polipo -v" for variables you can tweak and further information.logSyslog = falselogFile = /var/log/polipo/polipo.logsocksParentProxy = "127.0.0.1:1080"socksProxyType = socks5chunkHighMark = 50331648objectHighMark = 16384serverMaxSlots = 64serverSlots = 16serverSlots1 = 32proxyAddress = "0.0.0.0"proxyPort = 8123
  • 重启Polipo:
/etc/init.d/polipo restart
  • 为当前终端设置全局代理:
export http_proxy=”127.0.0.1:8123”

撤销:

unset http_proxy
  • 设置全局代理到终端默认配置:
sudo nano /etc/profile

添加如下语句:

export http_proxy=”127.0.0.1:8123”
  • 测试:
curl www.google.com

若成功下载页面,则代理设置成功

Step5:配置chromium实现科学上网

  • 下载SwitchyOmega:Github-Releases
  • 安装SwitchyOmega:打开chromium的扩展程序页面,将下载的crx文件拖入
  • 配置SwitchyOmega:Github-Wiki

The End

--

--