アプリで 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
Update
My probeURL は、バックエンドを更新し、ユーザー ステータスに基づいて 200 または 500 を返す残りの API 呼び出しです。いくつかの SQL クエリが実行されているため、多少の待ち時間があります。probeURL は 200 OK を予期します。それ以外の場合は、無視ルールが無効になります。無視ルールが無効になり、VPN に接続しようとしますが、VPN がユーザーをブロックしたため、ユーザーは接続できなくなります。iOS デバイスは無限ループで試行を続け、他のアプリケーションからのインターネット アクセスをブロックして、デバイスをブリック状態にします。このケースを処理するためのより良い方法はありますか?
提案
フラグのようなユーザーステータスを指すファイルエンドポイントでDBを更新できます-(各ユーザーにはファイルエンドポイントがあります)。ファイルが利用可能な場合は 200 OK を返し、ファイルが削除された場合は 404 を返します。このようにして、プローブ URL は必要なときに待機時間なしで 200 OK を受け取ることができます。ただし、これは実装とファイル管理の追加レイヤーになる可能性があります。これについてどう思いますか?このテストケースを処理するためのより良い方法を誰かが推奨できますか?
テスト
次のプローブ URL を使用して、成功するシナリオをテストしていました。
httpstat.us/500 は ignoreRUle を無効にし、VPN への接続を続行します。