Правила iOS VPN по требованию - PullRequest
0 голосов
/ 28 января 2019

Я хочу создать onDemandRule для подключения VPN в ios

Требование следующее:

Если доступны и сотовая связь, и Wi-Fi, и wifi ssid = "ABC", тогда будет работать только VPNв противном случае это должно прекратиться.

Я пытался следовать OnDemandRule

             let onDemandRule = NEOnDemandRuleConnect()
            onDemandRule.interfaceTypeMatch = .wiFi
            onDemandRule.ssidMatch = ["ABC"]

            let onDemandRule1 = NEOnDemandRuleConnect()
            onDemandRule1.interfaceTypeMatch = .cellular                
            self.vpnManager.isOnDemandEnabled = true

            let onDemandRule2 = NEOnDemandRuleDisconnect()
            onDemandRule2.interfaceTypeMatch = .any

            self.vpnManager.onDemandRules = [onDemandRule, onDemandRule1, onDemandRule2]

Он работает, как только я подключаюсь к Wi-Fi с именем ABC

Но он не отключается, еслия выключаю сотовые данные.Может кто-нибудь, пожалуйста, дайте мне знать, что я делаю здесь не так.

1 Ответ

0 голосов
/ 28 января 2019

Вы должны прочитать правила как набор правил брандмауэра, NEVPNManager просматривает список правил, и следует первое применяемое правило.В вашем примере, когда вы отключите сотовые данные, он оценит правило 1: wifi + SSID "ABC".Если эти правила удовлетворяют, т.е. вы подключены к WiFi SSID "ABC", vpn будет подключен.Если нет, то NEVPNManager будет проходить через следующее правило.

Если вы отключите сотовую связь, первое правило все равно будет действовать.(Вы все еще можете иметь соединение WiFi).NEVPNManager не может различить сотовую связь вкл / выкл.Он может только различать, какой интерфейс используется: сотовый, WiFi или любой.

...