我们正在使用在iOS上运行的Per-App VPN开发一个应用。此容器应用程序旨在让我们的某些特定应用程序在某些时间通过VPN连接网络,而所有其他应用程序则不能。
我们希望这些特定的应用程序在安装容器应用程序和配置文件后,在打开VPN之前能够正常连接网络。并且,一旦在容器应用中手动打开了VPN,这些特定的应用就会通过VPN连接网络。
我有些问题找不到答案。
我已将NETestAppMapping键添加到“开发”中我的容器应用程序的Info.plist中。这些特定应用程序的捆绑标识符被添加到NETestAppMapping中。在构建了容器应用程序并通过Apple Configurator 2安装了配置文件之后,我发现那些特定的应用程序无法连接到Internet,直到我在容器应用程序中打开了VPN。正常吗?
NETestAppMapping是在开发中配置那些特定应用程序的方法。我想知道用于指定应用程序映射的生产机制。
此外,曾经发生过一件很奇怪的事情。我从iPhone删除了配置文件,从容器应用程序删除了NETestAppMapping。然后,我以常规方式在容器应用中打开了VPN。完成此操作后,我发现我们想要的功能已实现。
非常感谢您。
答案 0 :(得分:1)
与Per-App VPN关联的应用程序将仅通过Per-App VPN路由其流量。如果禁用了“按需”功能,并且VPN处于关闭状态,则该应用程序将没有流量。
这样,我看到两种方法可以使应用仅在某些时间通过Per-App VPN路由:
使用NEPacketTunnelProvider
来实现VPN的方式,即VPN始终按需启动并继续处于“活动”状态,但是VPN应用程序可用于切换NEPacketTunnelProvider
是否实际上是通过VPN路由流量,或者是否只是充当TCP / UDP转发器。
在VPN应用中切换时,利用MDM及其SDK(假定支持)将应用与Per-App VPN关联或取消关联。请注意,这可能会很笨拙,且会有时间延迟,并且如果您的应用正在运行,可能会导致其被终止。我不推荐这种方法。
值得注意的是,NETestAppMapping
仅适用于开发版本,不适用于发行版本(例如Enterprise(内部)或App Store)。您将需要使用MDM来利用Per-App VPN。
以结合使用NEPacketTunnelProvider
和数据包转发的示例为例,我看一下本文:Does your phone spy on you? by Severin Amrein。