【发布时间】:2015-08-29 18:16:28
【问题描述】:
我正在开发一个 Android 版本的应用来连接到软件定义的网络。它背后的本机代码支持一次连接到多个虚拟网络,我正在将其适应 Android 的 VpnService。
由于 Android 将您限制为单个 vpn 接口,我为每个虚拟网络调用一次 VpnService.Builder.addAddress() 和 VpnService.Builder.addRoute(),然后调用 establish()。调用establish() 后,我可以从两个虚拟网络上的其他设备对每个分配的地址ping Android 设备,但是我只能路由到Android OS 中的一个虚拟网络。
是否可以使用VpnService.Builder为tun接口分配多个地址和路由?
更新:2015 年 6 月 15 日
似乎配置正确。在日志和 adb shell 中环顾四周,我有 tun0 和 tun0:1
# ifconfig tun0
tun0: ip 10.248.13.87 mask 255.255.240.0 flags [up point-to-point running]
# ifconfig tun0:1
tun0:1: ip 29.182.13.87 mask 254.0.0.0 flags [up point-to-point running]
并且两个 TUN 条目都在路由表中
Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
eth0 00000000 0202000A 0003 0 0 0 00000000 0 0 0
eth0 0002000A 00000000 0001 0 0 0 00FFFFFF 0 0 0
tun0 0000F80A 00000000 0001 0 0 0 00F0FFFF 0 0 0
tun0 0000001C 00000000 0001 0 0 0 000000FE 0 0 0
但是,只有两条路线中的一条可以到达。这是对 VPN 连接另一端的两台主机的 ping:
ping -c 4 10.248.4.247
PING 10.248.4.247 (10.248.4.247) 56(84) bytes of data.
64 bytes from 10.248.4.247: icmp_seq=1 ttl=128 time=126 ms
64 bytes from 10.248.4.247: icmp_seq=2 ttl=128 time=93.5 ms
64 bytes from 10.248.4.247: icmp_seq=3 ttl=128 time=73.5 ms
64 bytes from 10.248.4.247: icmp_seq=4 ttl=128 time=53.4 ms
--- 10.248.4.247 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3029ms
rtt min/avg/max/mdev = 53.492/86.826/126.702/27.026 ms
root@generic_x86:/proc/net # ping -c 4 29.95.148.247
ping -c 4 29.95.148.247
PING 29.95.148.247 (29.95.148.247) 56(84) bytes of data.
--- 29.95.148.247 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3013ms
【问题讨论】: