iOS VPN nomiga uch xil mahsulot javob beradi va ular bitta API'ni bo'lishmaydi. Personal VPN tizimning ichki IPsec va IKEv2 transportlaridan foydalanadi. Custom tunnel o'z protokolingizni network extension ichida ishga tushiradi. Configuration profile ulardan birini sozlaydi va on-demand xatti-harakatini qo'shishi mumkin. Siz gaplashishingiz kerak bo'lgan transport bo'yicha tanlash, birinchi kompilyatsiya qilingan qo'llanma bo'yicha tanlashdan tezroq.

Quyidagi tekshiruvlarni tartib bilan bajaring, chunki har bir qadam oldingisi to'g'ri konfiguratsiya bergan deb hisoblaydi.

1-qadam: transport bo'yicha tanlang

Agar server IKEv2 yoki Cisco uslubidagi IPsec bo'lsa, NEVPNManager yetarli va tizim transportlari bepul keladi. Agar server OpenVPN, WireGuard yoki boshqa narsa bilan gaplashsa, NEVPNManager yordam bera olmaydi: uning uchinchi tomon protokoli uchun ilgagi yo'q. Bu holat protokolni amalga oshiruvchi packet tunnel provider bilan NETunnelProviderManager talab qiladi. Profil faqat konfiguratsiyani tarqatadi va operatsion tizimda yo'q transportni qo'sha olmaydi.

PPTP joriy tizimlarda maqsad emas. Shared-secret IPsec hali ham remoteIdentifier ichidagi guruh nomini, sirni saqlovchi keychain elementini va server foydalanuvchi nomini so'raganda kengaytirilgan autentifikatsiyani kutadi. Har bir yetishmayotgan qism o'sha umumiy konfiguratsiya xatosi sifatida ko'rinadi, shuning uchun boshqa narsani disk raskadrovka qilishdan oldin ularning barchasini qo'shing.

2-qadam: saqlash, yuklash, ishga tushirish tartibiga rioya qiling

NEVPNManager preferences'ga yozadi, ularni qayta o'qiydi va shundan keyingina ishga tushiradi. Protokol va manager obyektlarini to'ldiring, saveToPreferences'ni chaqiring, loadFromPreferences'ni chaqiring va load completion handler'dan startVPNTunnel'ni chaqiring. Yuklash qaytishidan oldin ishga tushirish boshqa jihatdan to'g'ri konfiguratsiyada configuration-invalid xatosi, NEVPNErrorDomain code 1, keltirib chiqaradi.

Shakl bitta joyda saqlash uchun yetarlicha qisqa:

manager.protocolConfiguration = proto
manager.isEnabled = true
manager.saveToPreferences { }
manager.loadFromPreferences { manager.connection.startVPNTunnel() }

startVPNTunnel so'rov qabul qilinganda qaytadi, tunnel ko'tarilganda emas. NEVPNStatusDidChange'ni kuzating va haqiqiy holat uchun connection.status'ni o'qing. Chaqiruv joyida muvaffaqiyatni taxmin qiluvchi ilova extension hali muzokara olib borayotganda VPN ulangan deb xabar beradi. Connecting holati bir lahza normal; undan hech qachon chiqmaydigan holat esa jurnalga yozishga arziydigan nosozlik.

3-qadam: provider jarayoniga kerakli narsani bering

Custom transport o'z bundle identifier'i va o'z entitlement'i bilan alohida jarayonda ishlaydi. container ilovasi ham, provider ham imzolash vaqtida network-extension entitlement'iga muhtoj, va App Store'dan tashqaridagi Developer ID build uni baribir provisioning profile'da olib yurishi kerak. Yetishmayotgan entitlement protokol xatosiga o'xshaydi, chunki extension shunchaki ishga tushmaydi.

Qarzga olish uchun ommaviy socket descriptor yo'q. NEPacketTunnelProvider sizga read, write va cancel bilan NEPacketTunnelFlow beradi, va shaxsiy kalit yo'llariga cho'zilgan kod nashrlar orasida buziladi. Ilova fonda bo'lganda ham provider ishlashda davom etadi, shuning uchun container ilovaga buning uchun fon rejimi kerak emas.

4-qadam: on-demand qoidalar to'plami, o'chirgich emas

isOnDemandEnabled faqat qoidalarni qurollantiradi; tunnel qachon ko'tarilishini NEOnDemandRuleConnect va uning birodarlari hal qiladi. probe URL'li evaluate-connection qoidasi o'sha URL qanchalik yaxshi bo'lsa, shunchalik yaxshi. Agar probe tunnelisiz javob bersa, qoida shaxsiy tarmoqqa allaqachon yetish mumkin deb xulosa qiladi va hech qachon ulanmaydi, shuning uchun uni faqat ichkaridan javob beradigan narsaga yo'naltiring.

Always-on alohida va'da. Unga nazorat qilinadigan qurilma va boshqariladigan profil kerak, va nazoratsiz foydalanuvchi profilni xohlagan vaqtda olib tashlashi mumkin. Filo nazorat ostida bo'lmasa, always-on'ga bog'liq dizaynni yetkazmang.

5-qadam: yorliqni emas, yo'lni isbotlang

tun, tap, ppp yoki ipsec interfeyslarini skanerlash VPN sozlanganini isbotlaydi, sizning so'rovingiz undan foydalanganini emas. usesInterfaceType(.other) bilan NWPathMonitor virtual interfeys mavjudligini aytadi, va viability handler bitta hostni sinab ko'rishi mumkin. Ikkalasi ham chiqish yo'lini isbotlamaydi, shuning uchun ularni faqat tunnel yeta oladigan resursga so'rov bilan birlashtiring. Interfeys nomlari diagnostika yordamchisi, ilova mantig'i shoxlanishi kerak bo'lgan darvoza hech qachon emas.

Dala tekshiruvi uchun ommaviy manzilni tunnel bilan va tunnelsiz solishtiring va faqat ichki sahifani oling. status chaqiruvi provider muzokara olib borayotganda ulangan deb xabar berishi mumkin, shuning uchun qarorni resurs natijasi qabul qilsin, statusni esa qo'shimcha dalil deb biling.

O'xshash maqolalar