给树莓派的wifi热点添加socket代理

此套路主要用来在海外翻墙回国听音乐比如网易云音乐或者优酷看视频用。当然反过来可以拿来科学上网。

大概思路

第一步是国内弄个服务器或者在家里面(花生壳进行动态域名解析)也行,sock5 服务器搭建不错了,按照标准套路来。然后第二步就是在树莓派上起一个 wifi 热点。最后一步是配置路由表让 wifi 热点的流量最终全部导入到 socks5 代理服务器上,实现 wifi 直连国内的服务器。

为什么不用手机直连国内服务器呢?第一是不敢在服务器上配 ss ,因为还有其他业务怕被封。第二是 iOS 上没有好用的 sock5 代理 app, 我用的几个都有问题,协议实现的不对。第三是不方便,有了 wifi 之后,可以在树莓派上添加智能路由表,对流程分流。目前这一步没有做,懒……

Wifi 热点配置

参考此官方教程,但是最后创建 bridge 的那一步不做,因为我们不是想让 wifi 和 eth0 做 bridge 而是希望 wifi 的流量走 socks5 代理。

配置 sock5 代理客户端

使用 Redsocks 工具作为 socks5 的客户端。具体按照和使用这里不说了,比较简单。配置好以后会在本地开一个端口,默认是 12345,我们需要做的就是把所有想去代理包转发到这个端口上就ok了。

iptables 配置

使用 iptables 主要实现 wifi 接口的流量转发到 redsocks 端口上。我的树莓派配置如下, eth0 为物理网口,ip 为 192.168.0.x,也为流程出口; wlan0 为 wifi 热点网口,使用 dhcp 分配 ip : 192.168.8.0/24 .

首先开启 eth0 的 nat 功能,并配置 eth0 和 wlan0 的包互通:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT  

此时可使用 curl 命令测试 wlan0 网络是否正常。然后添加 redsocks 的 rules :

iptables -t nat -N REDSOCKS
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/24 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

这里不希望所有的流量都走代理,只是希望 wlan0 来的流程走代理,系统的还是走本地的网络。同时回来的流程要要送到 redsock chain 里面处理。

sudo iptables -t nat -A PREROUTING -s 192.168.8.0/24 -p tcp -j REDIRECT --to-ports 12345
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDSOCKS
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDSOCKS
sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345

配好之后,重新 restore iptable ,连上 wifi 应该就可以看到自己 ip 变成国内的 ip 了。

Ref: