使用 android VPN 作为 VPN 服务器

Use android VPN as VPN server

Android VPNService 允许您创建 tun 设备,我们可以访问路由到 tun 的数据包到我们的程序。

我正在使用 C/NDK 访问这些数据包。

假设我编写专有协议从远程 vpn 客户端获取数据包并发布到 tun,我是否可以期望这些数据包在 Android 中路由并可能在接口上 natted 并访问 Internet?

例如,我在Android(通过vpn 服务)中创建一条路由,用于10.0.0.0/24 到tun。 我发布源 IP 为 10.0.0.5 的数据包以调整它们是否会遍历内核并通过 Internet 到达目的地。 (或者这些数据包只是简单地返回接口,因为 tun 是默认网关!) 如果他们在正确 natted 后连接到互联网,我可以期待回复 (dst ip 10.0.0.5) 到 tun 界面吗?

还是我应该检查一下?

欢迎提出任何想法/建议。

提前致谢。

好像是NO

这是我所做的。

使用 NDK 在 android 上构建了一个 VPN,使用 VPNService 在 java 上构建了一点点 VPN。

VPN 客户端工作正常。

当我从远程客户端接收数据包并将这些数据包注入隧道(使用正确的路由)时,这些数据包没有到达目标。

目标是我的 linux 盒子,并使用 tcpdump 等待这些数据包到达。

所以将其他地方捕获的数据包注入android 隧道是行不通的。 (当然,在具有 root 访问权限的 Linux 上是微不足道的)

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

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

最后,数据包也没有返回隧道。

我可以确认它们被内核删除了。