【问题标题】:How to turn off my Packet Tunnel Extension with termination of host app如何通过终止主机应用程序关闭我的数据包隧道扩展
【发布时间】:2018-12-11 18:11:19
【问题描述】:

现在我已经使用 iOS 11+ 的网络扩展 API 实现了一个简单的数据包隧道扩展。我想让它成为仅限应用程序的 VPN,以便来自我的应用程序的流量可以通过我们的 VPN 和代理进行隧道传输。所以,我的问题是

  1. 如何在用户切换到其他应用程序时停止隧道 - 一种选择是使用应用程序委托方法 -(void)applicationWillResignActive:(UIApplication *)application-(void)applicationDidEnterBackground:(UIApplication *)application
  2. 如果用户通过强制退出直接终止应用程序,那么 VPN 也应该关闭 - 我们可以使用 -(void)applicationWillTerminate:(UIApplication *)application,但当我尝试时,有时它无法正常工作。
  3. 当应用程序崩溃时如何处理相同的情况。 - 作为一种解决方法,我正在考虑实现类似乒乓机制的东西,如果应用程序处于活动状态,那么它应该继续 ping 或更新将由数据包隧道扩展访问的任何共享数据。因此,如果应用停止或退出,Tunnel 会知道应用处于不活动状态,并自行停止隧道。
  4. 要保持 VPN 隧道处于活动状态,我们需要定期更新令牌,因此有什么方法可以更新 VPN 首选项并立即反映更改,而无需重新启动(停止并重新启动)隧道。

请针对上述情况提出适当的解决方案或解决方法。这对我有很大的帮助。

【问题讨论】:

    标签: ios vpn http-proxy networkextension nevpnmanager


    【解决方案1】:

    我认为您无法在应用程序中以编程方式可靠地实现您希望的目标。

    您可以将您的 VPN 设置为 Per-App VPN,并仅将您的应用与 VPN 相关联。这应该可以满足您的大部分要求。这样做的限制是它只能通过移动设备管理 (MDM) 解决方案进行部署。

    另一种选择是将 VPN 作为标准 VPN 运行并让所有应用程序通过它进行隧道传输,但在 VPN 网络扩展中使用NEPacketTunnelFlow::readPacketObjects(),从NEPacket 响应中获取NEFlowMetaData,并使用@ 987654325@ 参数来识别您的应用程序。然后,您可以在网络扩展中对数据包处理进行编码,以便您的应用程序中的数据随后可以通过您的 VPN 和代理发送,并且所有其他收到的数据包都可能被转发给它们的预期接收者。

    【讨论】:

    • 第二个选项也仅限于 per-app VPN,即还需要 MDM:“此元数据仅存在于流经 per-app VPN 提供商的数据,即应用代理提供商和数据包隧道每应用 VPN 模式下的提供商”。
    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2016-12-19
    • 2019-09-22
    • 2020-07-25
    相关资源
    最近更新 更多