我正在通过我的应用程序创建一个 VPN 配置文件,并且我有以下规则并进行了设置:
let newIPSec = NEVPNProtocolIPSec()
newIPSec.serverAddress = AppConfiguration.getVPNEndPoint()
newIPSec.authenticationMethod = NEVPNIKEAuthenticationMethod.sharedSecret
newIPSec.username = VPNCredentialsModel.instance.vpnUserName()
newIPSec.passwordReference = VPNCredentialsModel.instance.vpnPasswordReference() as Data?
newIPSec.sharedSecretReference = VPNCredentialsModel.instance.vpnPresharedKeyReference() as Data?
newIPSec.useExtendedAuthentication = true
newIPSec.disconnectOnSleep = false
self.manager.protocolConfiguration = newIPSec
let connectRule = NEOnDemandRuleConnect()
connectRule.interfaceTypeMatch = .any
let ignoreRule = NEOnDemandRuleIgnore()
ignoreRule.interfaceTypeMatch = .any
ignoreRule.probeURL = URL(string:probeURL)
self.manager.onDemandRules = [ignoreRule,connectRule]
self.manager.isOnDemandEnabled = true
self.manager.isEnabled = true
更新
我的probeURL 是一个rest API 调用,它更新后端并根据用户状态返回200 或500。由于正在执行一些 sql 查询,因此存在一些延迟。probeURL 需要 200 OK 否则会使忽略规则无效。忽略规则变为无效并尝试连接到 VPN,但由于 VPN 阻止了用户,用户无法再连接。iOS 设备不断尝试无限循环并阻止来自其他应用程序的互联网访问,从而将设备推入砖块状态。有没有更好的方法来处理这种情况?
建议
我可以用一个文件端点更新数据库,该端点像一个标志一样指向用户状态 - (每个用户都有一个文件端点)。如果文件可用,则返回 200 OK,如果已删除,则返回 404。这样,探测 url 可以在需要时无延迟地接收 200 OK。但是,这可能是实施和文件管理的额外层。您对此有何看法?有人可以推荐一种更好的方法来处理这个测试用例吗?
测试
我正在使用以下探测 URL 测试一个成功的场景:httpstat.us/200 以使 ignoreRule 有效且不连接
httpstat.us/500 表示 ignoreRUle 无效并继续连接到 VPN