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ди көрсөткөн экранды убада кылбаңыз.

Тектеш макалалар