NEVPNManager iOS’da nimalarni yaratishi mumkin (va nimalarni emas)
iOS VPN API’si uchta protokol sinfidan dasturga tegishli bitta konfiguratsiyani quradi. L2TP, PPTP va imzolangan profillar bu sirtning qismi emas.
iOS dasturi ichida VPN ekranini qursangiz, birinchi ajablantiradigan narsa Sozlamalar dasturidagi protokollar ro‘yxati API ro‘yxati emasligi. Network Extension freymvorki dasturingizga shu dasturga tegishli bitta shaxsiy VPN konfiguratsiyasini yaratishga ruxsat beradi va faqat bir nechta protokol obyektini qabul qiladi. Odamlar kutadigan qolgan hamma narsa, L2TP’dan yuklab olingan profilgacha, bu sirtdan tashqarida yoki Apple uchun xususiy. Keyingi xatolar odatda bug emas, bu API hech qachon berilmagan ishdan bosh tortishi.
Afsona: API — Sozlamalar muharriri
iOS IKEv1, IKEv2, L2TP va IPsec profillarini sozlasha olgani uchun dastur ularning har birini programmatik tarzda yaratishi mumkin deb hisoblanadi. Yaratolmaydi. Freymvork chaqiruvchi dasturga aynan bitta konfiguratsiya uyasini taqdim etadi va bu uya faqat kichik bir ommaviy protokol sinflari to‘plamini qabul qiladi. Odamlar kutadigan qolgan hamma narsa, L2TP’dan yuklab olingan profilgacha, bu sirtdan tashqarida yoki Apple uchun xususiy.
Keyingi xatolar odatda bug emas. Bu API hech qachon berilmagan ishdan bosh tortishi, yechim esa ekranni API egalik qiladigan narsa atrofida loyihalashdir.
Uchta protokol obyekti va mavjud bo‘lmaganlari
Sizning variantlaringiz — NEVPNProtocolIPSec orqali IKEv1, NEVPNProtocolIKEv2 orqali IKEv2 va o‘z paket tunnel kengaytmangizni yetkazsangiz NETunnelProviderProtocol. NEVPNManager ma’lumotnomasi qabul qilinadigan protokol obyektlarini sanab chiqadi. L2TP va PPTP bu ro‘yxatda hech qachon ko‘rinmaydi, chunki Apple ular uchun sinf chop etmagan. Ulardan birini sinab ko‘rish saqlash paytida xato bilan tugaydi yoki undan ham yomoni, tizim jimgina foydalanishdan bosh tortadigan konfiguratsiya bilan.
Ish stoli kodi boshqa qoidalarga amal qiladi. macOS’da SCNetworkInterfaceCreateWithInterface IPv4 ustidagi L2TP kabi interfeys turini qatlab, uni tarmoq xizmatiga biriktiradi, networksetup -connectpppoeservice esa natijani ishga tushiradi. Administrator huquqlari va yordamchi vosita kerak, chunki umumiy sir va parol tizim kalit bog‘lamiga kiradi. Bu dizaynni iOS’ga ko‘chiring va hech narsa kompilyatsiya bo‘lmaydi.
Parolni emas, kalit bog‘lami havolasini bering
Ikkala IKE sinfidan hech biri parolni matn sifatida qabul qilmaydi. passwordReference va sharedSecretReference xossalari doimiy kalit bog‘lami havolasini xohlaydi, uni kSecReturnPersistentRef so‘rab SecItemCopyMatching dan olasiz. Element ma’lumotlarini berish yoki maydonga satr joylash saqlash xatosi yoki bo‘sh hisob ma’lumotlari bilan ulanishni keltirib chiqaradi. Havola uning orqasidagi kalit bog‘lami elementi qanchalik bardoshli bo‘lsa, shunchalik bardoshli, shuning uchun element konfiguratsiya yig‘ilishidan oldin mavjud bo‘lishi kerak. Uni saqlash bilan bir tranzaksiyada yarating va tartib buglarining butun sinfini yo‘qotasiz.
Sertifikat autentifikatsiyasi boshqa yo‘lni tanlaydi: PKCS#12 blob uchun identityData va identityDataPassword. O‘sha blobni dastur to‘plami ichida yetkazish namunaviy koddan olingan odat, chiqarish qarori emas, chunki parol u bilan birga sayohat qiladi va dasturning har bir nusxasi bir xil shaxsiyatni olib yuradi.
Huquq va mavjudlik hamma narsani darvozalaydi
Menejer umuman bo‘lmasligi mumkin, sababi provizioning. Dastur identifikatoringizga Network Extension qobiliyati va shaxsiy VPN huquqi birga kerak, buildni imzolovchi profilda ikkalasi ham bo‘lishi shart.
Buni o‘tkazib yuborsangiz, umumiy nusxa nil qaytaradi yoki saqlash huquqni hech qachon tilga olmaydigan xato bilan muvaffaqiyatsiz bo‘ladi. Mavjudlik — boshqa darvoza. iOS 8’dan eskiroq narsani maqsad qilsangiz, ish vaqtida belgi yo‘q bo‘ladi, shuning uchun muvaffaqiyatsizlik qulash yoki nil menejer, konfiguratsiyasiz menejer emas. Obyektlar grafigini disk raskadrovka qilishdan oldin ish muhiti va huquqni tekshiring.
Yuklang, o‘zgartiring, saqlang, so‘ng talab bo‘yicha tartibni kuzating
Hayot siklini yuklash, o‘zgartirish va saqlash deb qarang va yuklashni hech qachon o‘tkazib yubormang. loadFromPreferences tugamaguncha menejer hech narsani ushlamaydi va protokol obyektini o‘qib yoki almashtirib bo‘lmaydi.
Ikkinchi saqlash yana bittasini qo‘shish o‘rniga konfiguratsiyani almashtiradi, shuning uchun yarim qolgan saqlash ishlab turgan profilga zarar yetkazishi mumkin. Talab bo‘yicha qoidalar tartiblangan massiv hosil qiladi va bu tartib — siyosat. Har joydan ulanish qoidasini uzilish qoidasidan oldin qo‘ying, qo‘lda uzilishdan keyin darhol qayta ulanish sodir bo‘ladi, bu nuqsonga o‘xshaydi, lekin hujjatlashtirilgan baholashga mos keladi.
Foydalanuvchi harakati g‘olib bo‘lishi kerak bo‘lganda uzilish qoidasini oldinga suring. Dastur nazoratidan tashqarida qolgan narsa ham birdek muhim. Marshrutlar siz belgilagan afzallikdan emas, tunnel yoki server siyosatidan keladi, paket tunnel provayderi esa ishga tushganda ular haqida xabar beradi. Dastur boshqa dasturlar yoki konfiguratsiya profillari o‘rnatgan profillarni sanab yoki tahrirlab olmaydi, shuning uchun qurilmadagi har bir VPNni ko‘rsatadigan ekran va’da qilmang.