NEVPNManager - 按需连接阻止互联网访问

时间:2016-11-25 19:53:58

标签: ios swift nevpnmanager

我正在通过我的应用创建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

0 个答案:

没有答案