iOS Per-App VPN 未连接到 Internet

iOS Per-App VPN Not Connected To Internet

我们正在开发一个应用程序,在 iOS 上运行 Per-App VPN。此容器应用程序是为我们的一些特定应用程序设计的,可以在特定时间通过 VPN 连接网络,而所有其他应用程序则不能。

我们希望这些特定的应用程序在安装容器应用程序和配置文件之后,在打开 VPN 之前正常连接网络。一旦在容器应用程序中手动打开 VPN,这些特定应用程序就会通过 VPN 连接网络。

我有一些问题找不到答案。

  1. 我已将 NETestAppMapping 密钥添加到开发中的容器应用程序的 Info.plist。并将这些特定应用程序的捆绑标识符添加到 NETTestAppMapping。在构建容器应用程序并通过 Apple Configurator 2 安装配置文件后,我发现那些特定的应用程序无法连接到互联网,直到我在容器应用程序中打开 VPN。正常吗?

  2. NETTestAppMapping 是一种在开发中配置这些特定应用程序的方法。我想知道指定应用程序映射的生产机制。

而且,曾经发生过一件非常奇怪的事情。我从 iPhone 中删除了配置文件,并从容器应用程序中删除了 NETestAppMapping。然后我以正常方式在容器应用程序中打开 VPN。完成后发现实现了我们想要的功能

非常感谢。

与 Per-App VPN 相关联的应用程序将仅通过 Per-App VPN 路由其流量。如果禁用 On-Demand 并关闭 VPN,则不会有流量从该应用流出。

因此,我看到有两种方法可以让应用仅在某些时候通过 Per-App VPN 进行路由:

  1. 使用 NEPacketTunnelProvider 实施 VPN,这样 VPN 始终按需启动并继续 'active',但 VPN 应用程序可用于切换是否NEPacketTunnelProvider 实际上是通过 VPN 路由流量,还是它只是充当 TCP/UDP 转发器。

  2. 当在 VPN 应用程序中切换开关时,使用 MDM 及其 SDK(假设支持)将您的应用程序与 Per-App VPN 关联和取消关联。请注意,这可能会很笨拙,有时间延迟,如果它是 运行,可能会导致您的应用程序被终止。我不会推荐这种方法。

值得注意的是,NETestAppMapping 仅适用于开发版本,不适用于分发版本(例如企业(内部)或 App Store)。您需要使用 MDM 才能使用 Per-App VPN。

有关使用 NEPacketTunnelProvider 进行数据包转发的示例,我会看一下这篇论文:Does your phone spy on you? by Severin Amrein