Правила iOS VPN по требованию

Я хочу создать 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 ответ

Решение

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

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

Другие вопросы по тегам