【发布时间】:2021-10-22 18:24:41
【问题描述】:
我正在将 Android 设备的 VPN 应用程序移植到 iOS(使用 NEPacketTunnelProvider)。
Android 使用以下 API 为某些 tcp/udp 连接提供绕过 VPN 的机制:
class VpnService {
// ...
public boolean protect(int socket) { /* ... */ }
我在 iOS 中没有看到等效的 API。如何为 iOS 实现等效功能?
【问题讨论】:
-
如果您想包含或排除网络扩展接收的流量,特别是 Packet Tunnel Provider,它通过包含和排除路由支持。用于此的类是NEPacketTunnelNetworkSettings。这将允许操作系统决定是否将某些流量定向到您的 VPN 扩展。但是,一旦您的 NE 收到流量,就无法绕过 VPN。您必须处理您在 NE 中收到的流量。
-
您需要更多的VPN经验;问题是关于有选择地排除连接(不被路由),而不是一次性排除整个 IP 地址。
-
"
once your NE has received the traffic" 问题是关于排除服务本身创建的连接,以及在进行任何流量之前(例如,正是提到的protect方法所做的)。
标签: ios vpn tunnel networkextension android-vpn-service