我正在通过我的应用创建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 else使忽略规则无效。忽略规则变为无效并且它尝试连接到VPN但由于VPN阻止了用户,用户无法再连接。 iOS设备不断尝试无限循环并阻止来自其他应用程序的互联网访问,将设备推送到砖块状态。有没有更好的方法来处理这种情况?
建议
我可以使用文件端点更新数据库,该端点将用户状态指向为标志 - (每个用户都有一个文件端点)。如果文件可用,则返回200 OK,如果删除则返回404.这样,探测URL可以在需要时无延迟地接收200 OK。但是,这可能是一个额外的实现和文件管理层。你对此持何看法?有人可以推荐一种更好的方法来处理这个测试用例吗?
测试
我使用以下探测URL测试了一个成功的场景:
httpstat.us/200使ignoreRule有效且无法连接
httpstat.us/500使ignoreRUle无效并继续连接到VPN