Android VPNService允许您创建tun设备,我们可以将路由到tun的数据包访问到我们的程序。
我正在使用C/NDK访问这些数据包。
假设我编写了专有协议来从远程vpn客户端获取数据包并发布到tun,我能指望这些数据包在Android中路由,并可能在接口上聊天和访问互联网吗?
例如,我在Android中创建了一个10.0.0.0/24到tun的路由(通过vpn服务(。我将源IP为10.0.0.5的数据包释放到tun,它们将穿过内核并通过Internet到达目的地。(或者这些数据包只是直接返回接口,因为tun是默认网关!(如果他们在正确的交谈后到达互联网,我可以期待回复(dst ip 10.0.0.5(到达tun接口吗?
还是我应该检查一下?
欢迎任何想法/建议。
提前谢谢。
看起来它是一个NO.
以下是我所做的。
使用NDK在安卓系统上用C构建了一个VPN,并使用VPNService构建了一点java。
VPN客户端运行良好。
当我从远程CLient接收到数据包并将这些数据包注入隧道(使用正确的路由(时,这些数据包没有到达目标。
目标是我的linux盒子,并使用tcpdump等待这些数据包到达。
因此,将在其他地方捕获的数据包注入android隧道是行不通的。(当然,在具有root访问权限的Linux上这是微不足道的(
以下是我在将这些数据包注入隧道之前采取的预防措施。
- 确保存在返回接口的正确路由(对于数据包的源IP(
- 所有数据包都已正确格式化(在Linux上运行的代码相同(
- 确保我的应用程序被排除在VPN策略之外
最后,数据包也不会返回隧道。
我可以确认它们已被内核丢弃。