使用安卓VPN作为VPN服务器



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上这是微不足道的(

以下是我在将这些数据包注入隧道之前采取的预防措施。

  1. 确保存在返回接口的正确路由(对于数据包的源IP(
  2. 所有数据包都已正确格式化(在Linux上运行的代码相同(
  3. 确保我的应用程序被排除在VPN策略之外

最后,数据包也不会返回隧道。

我可以确认它们已被内核丢弃。

最新更新