2017-08-07 更新 libsodium 版本, ssr python 换源
2017-12-10 更新 libsodium 版本, ssr python Wiki更换地址


实在受不了 apt 和 gayhub 的那龟速,于是挂上 SSR ,别和我说树莓派国内有镜像源,有树莓派的自己 sudo apt upgrade 就知道有多感人了

使用前首先需要有一台国外的安装了 SSR 的 VPS ,或着某某机场的 SSR

这里使用的是 SSR Python,并不是 SSR-libev ,而且是全局代理(应该不会有人用拿树莓派来浏览国内网站的吧...)

下面开始安装 SSR :

如果你的 SSR 加密是 salsa20 或 chacha20 或 chacha20-ietf 需要编译 libsodium ,如果不是略过这一步

sudo apt install build-essential
VERSION='1.0.15'
CPUNUM=`cat /proc/cpuinfo | grep 'processor' | wc -l`
cd ~
wget -c "https://github.com/jedisct1/libsodium/releases/download/${VERSION}/libsodium-${VERSION}.tar.gz"  # 慢慢等
tar xzf libsodium-${VERSION}.tar.gz
pushd libsodium-${VERSION}
./configure
make -j${CPUNUM}
sudo make install
sudo ldconfig
popd
rm -rf libsodium-${VERSION}*

从 github 下载 SSR Python 源码(慢慢等吧,还有可能失败)

sudo apt install m2crypto git supervisor libevent-dev
git clone -b manyuser https://github.com/shadowsocksr-backup/shadowsocksr
cd ~/shadowsocksr
bash initcfg.sh
vi user-config.json  # 编辑配置文件, vi 不熟悉可以用 nano

编辑好后测试一下是否能运行
python shadowsocks/local.py
没报错的话 Ctrl+C 结束继续下一步,如果有报错继续改配置文件

如果对配置文件不熟悉的可以看详细看 https://github.com/ssrbackup/shadowsocks-rss/wiki/config.json
server 填服务器地址
server_port 填服务器端口
local_addresslocal_port 不需要修改,其余的自己按照 Wiki 修改

下载和编译 redsocks

redsocks 的作用是将 socks 转换为 http

cd ~
git clone https://github.com/darkk/redsocks
pushd redsocks
make
cp redsocks.conf.example redsocks.conf
sed -i "s/ip = example.org/ip = 127.0.0.1/" redsocks.conf
popd

新建一个专门用来运行 SSR 和 redsocks 的账号

sudo useradd -M -s /sbin/nologin ss

supervisor 守护进程和开机自启

下面的配置把 log 全部扔掉了,如果有需要的可以自己改 stdout_logfile

sudo bash -c "cat > /etc/supervisor/conf.d/ss.conf" <<EOF
[program:ss]
directory = /home/pi/shadowsocksr/shadowsocks
command = python /home/pi/shadowsocksr/shadowsocks/local.py
autostart = true
autorestart = true
startsecs = 10
startretries = 36
user = ss
redirect_stderr = true
stdout_logfile = /dev/null
EOF

sudo bash -c "cat > /etc/supervisor/conf.d/redsocks.conf" <<EOF
[program:redsocks]
directory = /home/pi/redsocks
command = /home/pi/redsocks/redsocks -c /home/pi/redsocks/redsocks.conf
autostart = true
autorestart = true
startsecs = 10
startretries = 36
user = ss
redirect_stderr = true
stdout_logfile = /dev/null
EOF

sudo supervisorctl update

nat 转发

# 创建一个叫 REDSOCKS 的链
sudo iptables -t nat -N REDSOCKS

# 忽略服务器的地址,下面的 server_ip 填服务器 ip 或域名,这里和 SSR 配置文件里的 server 值要一样
sudo iptables -t nat -A REDSOCKS -d server_ip -j RETURN

# 忽略本地地址
sudo iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

# 除上面之外的所有流量都转发到 socks 的本地端口
sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345

# 应用上面的规则,将 OUTPUT 出去的 tcp 流量全部经过 REDSOCKS 链
sudo iptables -t nat -A OUTPUT -p tcp -j REDSOCKS

# 保存规则
sudo bash -c "iptables-save > /etc/iptables.up.rules"

# 开机自动加载规则
sudo bash -c "cat > /etc/network/if-pre-up.d/iptables" <<EOF
#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules
EOF

sudo chmod +x /etc/network/if-pre-up.d/iptables

sudo apt update 看一看是不是速度快多了
curl myip.ipip.net 可以查看当前的ip,如果还是国内的话说明哪步错了

不需要全局代理时删除上面的 iptables 规则

# 下面的server_ip填服务器ip或域名,和上面添加的值要一样
sudo iptables -t nat -D REDSOCKS -d server_ip -j RETURN
sudo iptables -t nat -D REDSOCKS -d 0.0.0.0/8 -j RETURN
sudo iptables -t nat -D REDSOCKS -d 10.0.0.0/8 -j RETURN
sudo iptables -t nat -D REDSOCKS -d 127.0.0.0/8 -j RETURN
sudo iptables -t nat -D REDSOCKS -d 169.254.0.0/16 -j RETURN
sudo iptables -t nat -D REDSOCKS -d 172.16.0.0/12 -j RETURN
sudo iptables -t nat -D REDSOCKS -d 192.168.0.0/16 -j RETURN
sudo iptables -t nat -D REDSOCKS -d 224.0.0.0/4 -j RETURN
sudo iptables -t nat -D REDSOCKS -d 240.0.0.0/4 -j RETURN
sudo iptables -t nat -D REDSOCKS -p tcp -j REDIRECT --to-ports 12345
sudo iptables -t nat -D OUTPUT -p tcp -j REDSOCKS