树莓派搭建Shadowsocks及网络流量转发指南
所需环境
- 树莓派一个
- 路由器
- 境外VPS及Shadowsocks-libev环境
原理
数据发起 -> 路由器 -> DNS(树莓派) -> iptables局域网放行 -> dnsmasq查询真实并缓存 -> 局域网iptables放行 -> 路由器 -> 网关(树莓派) -> iptables过滤国内直接放行,国外数据打包SOCKS5走本地1080端口外出。
A. 安装Shadowsocks
git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev
安装编译环境:
sudo apt-get install build-essential autoconf libtool libssl-dev gawk debhelper dh-systemd init-system-helpers pkg-config
注意:树莓派上可能无法安装dh-systemd
,此时可以直接编译安装:
./configure --prefix=/usr/local/shadowsocks
make && make install
ln -s /usr/local/shadowsocks/bin/ss-redir ss-redir
生成deb包:
dpkg-buildpackage -us -uc -i
安装刚生成的deb包(github主页有介绍,这里是debian安装过程):
编译好的deb及其他配置文件
sudo dpkg -i shadowsocks-libev*.deb
使用ss-redir
:
ss-redir -c /etc/redir.json
其中,/etc/redir.json
的配置如下(local_address
必须写0.0.0.0
,127.0.0.1
会出问题):
{
"server": "服务器地址",
"server_port": 服务器开放的端口,
"local_address": "0.0.0.0",
"local_port": 本地端口,
"password": "密码",
"timeout": 600,
"method": "aes-256-cfb",
"fast_open": false
}
B. iptables及转发
编辑/etc/sysctl.conf
:
#vim /etc/sysctl.conf
net.ipv4.ip_forward=1
开启数据转发:
#sysctl -p
编写两个脚本,一个用于启动iptables,一个用于停止(清理)iptables。
启动脚本(iptables.sh):
#!/bin/bash
# Create new chain
iptables -t nat -N SHADOWSOCKS
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
# Ignore your shadowsocks server’s addresses
iptables -t nat -A SHADOWSOCKS -d 服务器ip地址 -j RETURN
# 去除内网地址及一些特殊地址段
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
# 还可以加入国内IP段,参见https://gist.github.com/wen-long/8644507
# Anything else should be redirected to shadowsocks’s local port
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 1080
清理脚本(flash.sh):
#!/bin/bash
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
C. dnsmasq
安装dnsmasq:
apt-get install network-manager dnsmasq
启用本地DNS:
如果使用NetworkManager,需要这样设置以启用dnsmasq:
编辑/etc/NetworkManager/NetworkManager.conf
:
[main]
dns=dnsmasq
如果没有,则修改默认的DNS配置文件/etc/resolv.conf
:
nameserver 127.0.0.1
创建/etc/resolv.dnsmasq
并编辑:
nameserver 8.8.8.8
nameserver 8.8.4.4
编辑/etc/dnsmasq.conf
,在最后加入:
conf-dir=/etc/dnsmasq.d/,*.conf
listen-address=127.0.0.1,192.168.1.104
bind-interfaces
cache-size=100000
domain-needed
resolv-file=/etc/resolv.dnsmasq
其中,cache-size=100000
表示缓存10000条记录,resolv-file=/etc/resolv.dnsmasq
指定上游DNS地址,listen-address=127.0.0.1,192.168.1.104
为局域网及本机提供DNS服务。
创建/etc/dnsmasq.d/t.conf
,指定特定域名通过特定DNS服务器查询:
# Google and Youtube
server=/.google.com/208.67.222.222#5353
server=/.google.com.hk/208.67.222.222#5353
# ... (其他配置省略)
设置开机启动dnsmasq:
systemctl enable dnsmasq
systemctl start dnsmasq
查看dnsmasq是否启动正常:
journalctl -u dnsmasq
D. 使用
确保树莓派设置静态IP:
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.1.104
netmask 255.255.255.0
gateway 192.168.1.1
在路由器中修改DHCP的DNS为192.168.1.104
,网关也设置为192.168.1.104
。
启动服务:
systemctl enable dnsmasq
systemctl start dnsmasq
ss-redir -c /etc/redir.json
./iptables.sh
至此,树莓派上的Shadowsocks及网络流量转发配置完成。