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.