【问题标题】:Use android VPN as VPN server使用 android VPN 作为 VPN 服务器
【发布时间】:2021-04-01 11:39:50
【问题描述】:

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

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

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

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

还是我应该检查一下?

欢迎任何想法/建议。

提前致谢。

【问题讨论】:

    标签: android routes vpn nat


    【解决方案1】:

    看起来是NO。

    这是我所做的。

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

    VPN 客户端工作正常。

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

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

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

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

    1. 确保存在返回接口的正确路由(对于数据包的源 IP)
    2. 所有数据包格式正确(在 Linux 上工作的代码相同)
    3. 确保我的应用被排除在 VPN 政策中。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-18
      • 2015-09-18
      • 2016-11-25
      • 1970-01-01
      • 2014-08-21
      • 2018-06-11
      • 2018-02-12
      • 2016-06-06
      相关资源
      最近更新 更多