如何在iOS VPN中实现VpnService的保护?



我正在将Android设备的VPN应用程序移植到iOS(使用NEPacketTunnelProvider)。

Android为一些tcp/udp连接提供了一种绕过VPN的机制,使用以下API:

class VpnService {
// ...

public boolean protect(int socket) { /* ... */ }

我在iOS中没有看到类似的API。如何在iOS上实现类似的东西?

来自Android并且对Apple API一无所知(除了Swift和objc++语言),我将尝试指出一个普通开发人员想知道的东西。


一个iOS应用程序的生命在视图关闭的那一刻结束,因此永久vpn服务只可能在扩展中,这是一个完全不同的目标,而不是你的视图(因为iOS没有服务的概念)。

除了知道以上,学习的事实,任何连接(又名套接字)创建从您的扩展被神奇地排除(又名保护)从通过packetFlow(又名隧道),无论它是一个原始套接字由C/c++或OOP-Wrapped类在Swift5。

令人惊讶的是,实际上使您的扩展套接字通过隧道是困难得多,
,你需要使用NEPacketTunnelProvider类的方法:

- createTCPConnectionThroughTunnelToEndpoint:enableTLS:TLSParameters:delegate:
- createUDPSessionThroughTunnelToEndpoint:fromEndpoint:

注意以上是实例方法,这就是ObjC中的负号的意思,
因此仅在扩展上下文中可用(但无论如何都无法从应用程序目标的隧道中逃脱)。

参见:https://developer.apple.com/forums/thread/94430

最新更新