Android 双层代理配置 (shadowsocks + VPN)

在 Android 环境下使用双层代理,同时使用 shadowsocks 和其它VPN App:

手机 -> ss server -> VPN server -> Target

手机环境:
已 root
安装 shadowsocks-android 和任一其它 VPN App

配置:

1. 在终端(adb shell 或任一 terminal app)里以 root 用户执行命令修改路由:

ip rule add to <SS_SERVER_IP> lookup wlan0
ip rule add to <SS_SERVER_IP> lookup rmnet_data0

每次手机重新启动后都需要执行一次上面命令。

2. 将 Shadowsocks-Android 设为 NAT 模式;编辑 profile 文件,开启 per-app mode, 去掉 “bypass mode” 选项,app list 里只选中 VPN App。

3. 启动 shadowsocks 和 VPN 即可,VPN 需要工作在 tcp 模式。

How it works:

当 shadowsocks 配置为以上模式时(步骤2),只会拦截 VPN App 的 OUTPUT 流量 (以及 dns 解析请求) 并转发到本地 ss 端口。所以只有 VPN App 到 VPN Server 的流量会走 ss(VPN 的虚拟网卡流量是内核维护的,不属于 VPN App,所以不会被捕获),这样就实现了双层代理。

ivy_dsds:/ # iptables -t nat -vxnL OUTPUT
Chain OUTPUT (policy ACCEPT 11095 packets, 773246 bytes)
......
    1213    79262 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53 to:127.0.0.1:1133
      33     1980 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            owner UID match 10124 to:127.0.0.1:8123

但是 VPN 启动后会修改路由表默认路由,所以必须保证到 ss server IP 的路由直连。这个只需要用 ip rule 添加一个自定义路由规则即可(步骤1)

0 Responses to “Android 双层代理配置 (shadowsocks + VPN)”


Comments are currently closed.