我正在创建自己的 AOSP,其中包含我自己的应用程序和服务。其中一项服务创建 ppp0 接口并尝试链接特定应用程序以通过该接口转发。我已经尝试过这些命令,但它没有按预期工作。
iptables -t mangle -A OUTPUT -m owner --uid-owner 10088 -j MARK --set-mark 100
ip route add via 10.0.0.201 dev ppp0 table 100
ip 规则从所有 fwmark 100 表 100 添加
iptables -t nat -A POSTROUTING -m owner --uid-owner 10088 -j SNAT --to-source 10.0.0.201
ip route add default dev wlan0
顺便说一下,10.0.0.201是ppp0接口IP地址。
这适用于用户 10088,但是当我使用 android chrome 浏览器(不是 UID 10088)时,我遇到了 DNS 问题,所以任何 URL 都无法解析,这意味着除了我的用户 UID 10088 之外没有互联网。
我在启用 vpn 后分析了 androids iptables,我发现了这些行:
-A st_mangle_OUTPUT -m mark --mark 0x3c -g st_mangle_ppp0_OUTPUT
-A st_mangle_OUTPUT -m owner --uid-owner 0-99999 -g st_mangle_ppp0_OUTPUT
-A st_mangle_ppp0_OUTPUT -j MARK --set-xmark 0x0/0xffffffff
-A st_mangle_ppp0_OUTPUT -j MARK --set-xmark 0x3c/0xffffffff
听起来他们标记了一些数据包并选择了一系列 uid,这正是我想要做的,除了我想要特定的 uid 而不是它们的范围。
ip route 为我提供了这个:
default via 192.168.0.1 dev wlan0
default via 192.168.0.1 dev wlan0 metric 310
10.10.0.200 dev ppp0 proto kernel scope link src 10.10.0.201
67.219.95.113 via 192.168.0.1 dev wlan0
70.83.139.168 via 192.168.0.1 dev wlan0
72.38.129.202 via 192.168.0.1 dev wlan0
104.167.113.112 via 192.168.0.1 dev wlan0
130.102.128.23 via 192.168.0.1 dev wlan0
139.112.153.37 via 192.168.0.1 dev wlan0
159.203.8.72 via 192.168.0.1 dev wlan0
190.181.129.115 via 192.168.0.1 dev wlan0
192.168.0.0/24 dev wlan0 scope link
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.110 metric 310
192.168.0.1 dev wlan0 scope link
209.81.9.7 via 192.168.0.1 dev wlan0
218.75.4.130 via 192.168.0.1 dev wlan0
218.189.210.4 via 192.168.0.1 dev wlan0
我正在寻找任何可以完成我的工作的解决方案,无论是解决这个问题还是解决另一个新的解决方案。
期待着听到您的意见。
预先感谢。