8

我正在使用 OpenVPN 和 ICS (Android 4.X) 附带的新 VpnService API

有没有办法定义从 VPN 隧道中排除 IP 地址?(这样发往该 ip 的流量将直接路由到网络,而不通过 VPN 隧道)。我们正在尝试通过允许带宽密集型服务(例如 youtube 未加密通过)来减少 VPN 的网络负载和成本,同时仍保护其余流量。

据我了解,在 Android 打开 Tun 设备之前,它可以接收一个路由列表,指定哪些流量应该通过 VPN,而不是排除哪些流量:

VPNService.Builder API 文档

4

2 回答 2

4

我需要从 VPN 中排除本地 WiFi 子网。我使用了添加多个路由而不是 0.0.0.0 / 0 的方法。例如,如果您需要排除子网 192.168.240.90 / 21(二进制表示为 11000000.10101000.11110000.01011010),那么您应该将以下 21 条路由添加到您的 VpnService(二进制表示):

00000000.00000000.00000000.00000000 / 1
10000000.00000000.00000000.00000000 / 2
11100000.00000000.00000000.00000000 / 3
11010000.00000000.00000000.00000000 / 4
11001000.00000000.00000000.00000000 / 5
11000100.00000000.00000000.00000000 / 6
11000010.00000000.00000000.00000000 / 7
11000001.00000000.00000000.00000000 / 8
11000000.00000000.00000000.00000000 / 9
11000000.11000000.00000000.00000000 / 10
11000000.10000000.00000000.00000000 / 11
11000000.10110000.00000000.00000000 / 12
11000000.10100000.00000000.00000000 / 13
11000000.10101100.00000000.00000000 / 14
11000000.10101010.00000000.00000000 / 15
11000000.10101001.00000000.00000000 / 16
11000000.10101000.00000000.00000000 / 17
11000000.10101000.10000000.00000000 / 18
11000000.10101000.11000000.00000000 / 19
11000000.10101000.11100000.00000000 / 20
11000000.10101000.11111000.00000000 / 21

这个想法是反转前缀位置(从右侧)的位,并使前缀位置之后的所有位为零。结果,除了那些去本地子网的包之外的所有包都将匹配一个或另一个路由

于 2016-12-22T17:59:21.980 回答
1

简短的回答没有。

长答案。您要么必须执行多条路由(例如,使用从 /1 到 /32 的 32 条路由来排除 ip)。您可以解析数据包并使用新的受保护套接字代理这些数据包。(可能是 CPU 密集型)

于 2013-01-27T11:11:58.173 回答