Privoxy Android SSH Tunneling

最近想要解决自己的 Pixel 4 手机 越过长城 问题,但是又没有时间重新部署 OpenConnect VPN 。我忽然想到,既然我的Android系统安装了 Termux - Andorid终端 ,实际上手机就是一个完整的Linux系统,何不类似电脑一样,采用 SSH Tunneling: 动态端口转发 实现一键翻墙呢?

备注

Android系统网络配置中可以设置代理,但是这个代理仅限于 HTTP/HTTPS 代理,也就是说无法直接使用 SSH Tunneling: 动态端口转发 创建的 Socks5 代理。所以,这里才会引入一个简洁的 Privoxy代理服务 代理服务器,作为中间转接。

ssh + privoxy

termux中安装 openssh
apt install openssh iproute2
配置所有主机登陆激活ssh multiplexing,压缩以及不检查服务器SSH key(注意风险控制)
Host *
  ServerAliveInterval 60
  ControlMaster auto
  ControlPath ~/.ssh/%h-%p-%r
  ControlPersist yes
  StrictHostKeyChecking no
  Compression yes
在Android的 Termux - Andorid终端 中安装privoxy
apt install privoxy

默认安装后,配置文件位于 ~/../usr/etc/privoxy 目录下的 config 文件,默认配置就可以运行。

配置socks上游代理

既然我们已经构建了 SSH Tunneling: 动态端口转发 ,也安装好了 Privoxy代理服务 ,接下来就需要配置 privoxy 代理转发到Socks5:

  • 修改 ~/../usr/etc/privoxy/config 配置文件,在最后添加以下配置表示允许本地访问(回环地址拒绝外部访问)以及将访问转发到本地的 Socks5 代理服务器( SSH Tunneling: 动态端口转发 ) 上:

~/../usr/etc/privoxy/config 配置转发上游Socks5代理服务器
permit-access localhost
forward-socks5 / 127.0.0.1:1080 .
运行 privoxy
privoxy --no-daemon ../etc/privoxy/config
  • 一切就绪,现在只需要配置 Android 系统使用 127.0.0.1:8118 作为代理服务器就可以 越过长城

待改进

不足待改进:

  • Android提供了WLAN配置(WiFi)使用代理,但是没有提供移动网络的配置,所以上述方法在使用4G/5G移动网络时无效。不过,我想到一个改进方案 在Alpine Linux环境部署Privoxy透明代理 (待实践)

  • 需要有一个按需代理的配置方法,方便用户输入不同需要代理翻墙的地址,类似 FirefoxChrome 常用的插件 SwitchyOmega

参考