3

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

4

0 回答 0