iOS қосымшасының ішінде VPN экранын құрғанда, бірінші таңырқау — Параметрлер қосымшасының протокол тізімі API тізімі емес. Network Extension фреймворкі қосымшаңа сол қосымшаға тиесілі бір жеке VPN конфигурациясын жасауға мүмкіндік береді және тек бірнеше протокол нысанын қабылдайды. Адамдар күтетін қалғанның бәрі, L2TP-ден жүктелген профильге дейін, бұл беттен тыс немесе Apple үшін жеке. Келесі сәтсіздіктер әдетте баг емес, API өзіне ешқашан берілмеген жұмыстан бас тартып отыр.

Миф: API — Параметрлер редакторы

iOS IKEv1, IKEv2, L2TP және IPsec профильдерін конфигурациялай алатындықтан, қосымша олардың кез келгенін бағдарламалық жолмен жасай алады деп саналады. Жасай алмайды. Фреймворк шақырушы қосымшаға дәл бір конфигурация ұясын ұсынады және ол ұя тек шағын көпшілік протокол кластарын қабылдайды. Адамдар күтетін қалғанның бәрі, L2TP-ден жүктелген профильге дейін, бұл беттен тыс немесе Apple үшін жеке.

Келесі сәтсіздіктер әдетте баг емес. API өзіне ешқашан берілмеген жұмыстан бас тартып отыр, ал түзету — экранды API иеленетін нәрсеге қарай жобалау.

Үш протокол нысаны және жоқ нысандар

Сіздің нұсқаларыңыз: NEVPNProtocolIPSec арқылы IKEv1, NEVPNProtocolIKEv2 арқылы IKEv2 және өз пакеттік туннель кеңейтімін жеткізсеңіз NETunnelProviderProtocol. NEVPNManager анықтамасы қабылданатын протокол нысандарын тізіп береді. L2TP мен PPTP бұл тізімде ешқашан көрінбейді, өйткені Apple олар үшін класс жарияламаған. Екеуін де қолданып көру сақтау кезінде қатемен аяқталады немесе одан да нашар — жүйе үнсіз қолданудан бас тартатын конфигурациямен.

Десктоп коды басқа ережелерді ұстанады. macOS-те SCNetworkInterfaceCreateWithInterface IPv4 үстіндегі L2TP тәрізді интерфейс түрін қабаттап, оны желілік қызметке тіркейді, ал networksetup -connectpppoeservice нәтижені іске қосады. Әкімші құқықтары мен көмекші құрал қажет, өйткені ортақ құпия мен құпиясөз жүйелік кілтсақтағышқа кетеді. Бұл дизайнды iOS-ке көшіріңіз — ештеңе компиляцияланбайды.

Құпиясөзді емес, кілтсақтағыш сілтемесін беріңіз

IKE кластарының ешқайсысы құпиясөзді мәтін ретінде қабылдамайды. passwordReference және sharedSecretReference қасиеттері тұрақты кілтсақтағыш сілтемесін талап етеді, оны kSecReturnPersistentRef сұрау арқылы SecItemCopyMatching ішінен аласыз. Элемент деректерін беру немесе өріске жол салу сақтау сәтсіздігін немесе бос тіркелгі деректері бар қосылымды тудырады. Сілтеме артындағы кілтсақтағыш элементі қаншалықты тұрақты болса, соншалықты ғана тұрақты, сондықтан элемент конфигурация жиналмас бұрын болуы керек. Оны сақтаумен бір транзакцияда жасаңыз, сонда реттілік багтарының тұтас класын жоясыз.

Сертификаттық аутентификация басқа жолмен жүреді: PKCS#12 блогы үшін identityData плюс identityDataPassword. Бұл блокты қосымша бумасының ішінде жеткізу — шығарылым шешімі емес, үлгі кодынан көшкен әдет, өйткені құпиясөз онымен бірге жүреді және қосымшаның әр көшірмесі бірдей сәйкестікті алып жүреді.

Құқық пен қолжетімділік бәрін қақпалайды

Менеджер мүлдем болмауы мүмкін, ал себебі — провижининг. Қосымша идентификаторына Network Extension мүмкіндігі жеке VPN құқығымен бірге қажет, ал билдке қол қоятын профиль екеуін де алып жүруі керек.

Осыны өткізіп жіберсеңіз, ортақ дана nil қайтарады немесе сақтау құқықты ешқашан атамайтын қатемен сәтсіз аяқталады. Қолжетімділік — екінші қақпа. iOS 8-ден ескі нәрсені мақсат етсеңіз, таңба орындалу кезінде жоқ болады, сондықтан сәтсіздік — құлау немесе nil менеджер, конфигурациясыз менеджер емес. Нысандар графыңызды жөндеуге кіріспес бұрын орындалу ортасы мен құқықты тексеріңіз.

Жүктеңіз, өзгертіңіз, сақтаңыз, содан кейін сұраныс бойынша ретті қадағалаңыз

Өмірлік циклді жүктеу, өзгерту, сақтау деп қараңыз және жүктеуді ешқашан өткізіп жібермеңіз. loadFromPreferences аяқталғанша менеджер ештеңе ұстамайды және протокол нысанын оқуға немесе ауыстыруға болмайды.

Екінші сақтау тағы біреуін қосу емес, конфигурацияны алмастырады, сондықтан жартылай сақтау жұмыс істеп тұрған профильді зақымдауы мүмкін. Сұраныс бойынша ережелер реттелген массив құрайды және сол рет — саясат. Кез келген жерден қосылу ережесін ажырату ережесінің алдына қойыңыз, сонда қолмен ажыратудан кейін бірден қайта қосылу болады; бұл ақауға ұқсайды, бірақ құжатталған бағалауға сәйкес келеді.

Пайдаланушы әрекеті жеңуі керек болғанда ажырату ережесін алға жылжытыңыз. Қосымша бақылауынан тыс қалған нәрсе де соншалықты маңызды. Маршруттар сіз қоятын қалаудан емес, туннельден немесе сервер саясатынан келеді, ал пакеттік туннель провайдері іске қосылғанда олар туралы хабарлайды. Қосымша басқа қосымшалар немесе конфигурациялық профильдер орнатқан профильдерді тізіп те, өңдей де алмайды, сондықтан құрылғыдағы әрбір VPN-ді көрсететін экранды уәде етпеңіз.

Қатысты мақалалар