【问题标题】:Android OpenVPN connectionAndroid OpenVPN 连接
【发布时间】:2015-07-29 09:45:22
【问题描述】:

我正在开发一个 Android 应用程序并希望它连接到 OpenVPN 服务器。 从 Android 4.0 开始,有一个 VPNService 类。然而,此类需要拦截所有网络数据包(并且需要特殊权限),因为它显然是在 Internet 协议上运行的。但是据我了解,OpenVPN 运行在 TCP 或 UDP 之上(我的服务器配置为使用 UDP)。我只需要将来自我自己应用程序的流量通过 VPN 隧道进行隧道传输。

  • 理论上是否应该可以避免这种情况(因为我不需要拦截所有流量,只需要拦截针对我的应用程序的 UDP-OpenVPN 数据包)?
  • 您知道满足我需求的 Android 库吗?
  • 如果没有,是否可以在 Android 中在 UDP 之上实现 OpenVPN 协议而不需要 VPNService 类?

我找到了follwing project: ics-openvpn。但是它也使用VPNService 类并拦截所有包。

【问题讨论】:

    标签: java android sdk vpn openvpn


    【解决方案1】:

    当然,您可以理论上在用户空间/应用内部执行 UDP/OpenVPN。但是您需要在您的应用程序中实现整个 TCP/IP,因为您需要模拟 整个 VPN 堆栈。

    对于类似 VPN 的单一应用解决方案,您可能最好使用 SOCKS/HTTP 代理等库。

    【讨论】:

    • 谢谢!但是为什么我也需要实现 TCP/IP。打开一个UDP套接字(使用Android SDK)并只在其中传递相应的OpenVPN数据包(使用自己的实现)就足够了吗?
    • 您如何为 OpenVPN 数据包生成有效负载,即 TCP/IP?
    • 无论哪种方式我都必须手动完成,因为 VPNService 类也不支持 OpenVPN 协议。
    • wirh vpnservice 操作系统通过 tun 接口为您提供有效负载 (TCP/IP)。
    • 天哪,现在我明白了。太糟糕了,我无法在不需要用户许可的情况下从我自己的应用程序中捕获数据包。我想我将为我的应用程序和基于 TCP+TLS 构建的服务器使用自定义协议。非常感谢!
    【解决方案2】:

    您需要使用VpnService 来创建OpenVPN 应用程序,该应用程序将ovpn 文件作为客户端配置的输入,例如OpenVPN Connect。因此任何人都可以根据自己的需要更改配置。此外,您必须为 OpenVPN 配置服务器。以 AWS EC2 或任何其他服务器为例。在服务器端配置 VPN 时follow this link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2020-07-11
      • 2020-05-31
      • 2017-02-21
      • 1970-01-01
      • 2019-07-18
      相关资源
      最近更新 更多