iOS VPN 配置在电池供电时不断断开连接

iOS VPN configuration keeps disconnecting when on battery

我已经使用 NEVPNManager 在我的应用程序中设置了 IKEv2 VPN 配置。目的是让连接保持活动状态,直到用户将其关闭或被 VPN 服务器终止。为此,我设置了以下配置:

let protocol = NEVPNProtocolIKEv2()
...
protocol.disconnectOnSleep = false

但是,如果 iPhone 使用电池 运行,当设备闲置一段时间后,VPN 仍会断开连接。如果我将它插在充电器上,这似乎不会发生。

我已经研究过设置 OnDemandRules,它会在设备唤醒时重新建立连接,但这会导致另一个问题,即使 VPN 服务器将其关闭,设备也会继续尝试重新连接。有没有更好的方法来实现我正在寻找的规则(保持连接直到用户或服务器关闭它)?

问题不是由 iOS 进入睡眠模式引起的,这纯属巧合。断开连接的原因是 IKEv2 配置意外地将 localIdentifier 设置为固定值。这意味着如果一个设备试图连接到 VPN 服务器,任何现有的连接都将被丢弃,因为就服务器而言,它们都来自同一个源,因为它们具有相同的本地标识符。

因此,如果您 运行 遇到这个问题,请确保每台设备都获得唯一的本地标识符。使用 Apple 设备 ID 是一个不错的选择。