iOS VPN API-ləri: NEVPNManager, tunel provayderi yoxsa profil?
API-ni danışmalı olduğunuz nəqliyyat növünə görə seçin, sonra tunelin trafik daşıdığını sübut edin: yadda saxla, oxu, başlat sırası, provayder icazələri və tələb üzrə qaydalar.
iOS VPN adına üç fərqli məhsul cavab verir və onlar eyni API-ni paylaşmırlar. Şəxsi VPN sistemin daxili IPsec və IKEv2 nəqliyyatları ilə işləyir. Fərdi tunel öz protokolunuzu şəbəkə uzantısı daxilində işlədir. Konfiqurasiya profili isə hər ikisini konfiqurasiya edir və tələb üzrə davranış əlavə edə bilər. Danışmalı olduğunuz nəqliyyat növünə görə seçmək, ilk kompilyasiya olunan dərsliyə görə seçməkdən sürətlidir.
Aşağıdakı yoxlamaları ardıcıllıqla aparın, çünki hər addım əvvəlkinin etibarlı konfiqurasiya yaratdığını fərz edir.
Addım 1: nəqliyyat növünə görə seçin
Server IKEv2 və ya Cisco üslubunda IPsec-dirsə, NEVPNManager kifayətdir və sistem nəqliyyatları pulsuz gəlir. Əgər server OpenVPN, WireGuard və ya başqa bir şey danışırsa, NEVPNManager kömək edə bilməz: onun üçüncü tərəf protokolu üçün qarmağı yoxdur. Bu hal protokolu həyata keçirən paket tunel provayderi ilə NETunnelProviderManager tələb edir. Profil yalnız konfiqurasiyanı paylayır və əməliyyat sistemində olmayan nəqliyyatı əlavə edə bilməz.
PPTP hazırkı sistemlərdə hədəf deyil. Ortaq sirli IPsec hələ də remoteIdentifier daxilində qrup adını, sirri saxlayan açarsızın elementini və server istifadəçi adı istədikdə genişləndirilmiş autentifikasiyanı gözləyir. Hər çatışmayan hissə eyni ümumi konfiqurasiya xətası kimi üzə çıxır, ona görə başqa heç nəyi sazlamadan əvvəl hamısını əlavə edin.
Addım 2: yadda saxla, oxu, başlat sırasına riayət edin
NEVPNManager seçimlərə yazır, onları geri oxuyur və yalnız sonra başlayır. Protokol və menecer obyektlərini doldurun, saveToPreferences çağırın, loadFromPreferences çağırın və startVPNTunnel-i yükləmənin tamamlanma işləyicisindən çağırın. Yükləmə qayıtmazdan əvvəl başlamaq, əks halda düzgün olan konfiqurasiyada konfiqurasiya-etibarsız xətası, NEVPNErrorDomain kodu 1 verir.
Formu bir yerdə saxlamaq üçün kifayət qədər qısadır:
manager.protocolConfiguration = proto
manager.isEnabled = true
manager.saveToPreferences { }
manager.loadFromPreferences { manager.connection.startVPNTunnel() }
startVPNTunnel sorğu qəbul edildikdə qayıdır, tunel qalxdıqda yox. NEVPNStatusDidChange-i izləyin və real vəziyyət üçün connection.status oxuyun. Çağırış yerində uğuru fərz edən tətbiq uzantı hələ danışıqlar apararkən VPN-in qoşulduğunu bildirir. Qoşulur vəziyyəti bir anlıq normaldır; ondan heç vaxt çıxmayan vəziyyət isə qeyd etməyə dəyən nasazlıqdır.
Addım 3: provayder prosesinə lazım olanı verin
Fərdi nəqliyyat öz paket identifikatoru və öz icazəsi olan ayrı prosesdə işləyir. Həm konteyner tətbiqi, həm də provayder imzalama zamanı şəbəkə uzantısı icazəsinə ehtiyac duyur, App Store-dan kənar Developer ID buraxılışı da onu təminat profilində daşımalıdır. Çatışmayan icazə protokol xətası kimi görünür, çünki uzantı sadəcə başlaya bilmir.
Borc almaq üçün açıq soket deskriptoru yoxdur. NEPacketTunnelProvider sizə read, write və cancel ilə NEPacketTunnelFlow verir və şəxsi açar yollarına uzanan kod buraxılışlar arasında sınır. Tətbiq arxa planda olanda provayder işləməyə davam edir, ona görə konteyner tətbiqinə bunun üçün arxa plan rejimi lazım deyil.
Addım 4: tələb üzrə işləmə qaydalar toplusudur, açar deyil
isOnDemandEnabled yalnız qaydaları hazır vəziyyətə gətirir; tunelin nə vaxt qalxacağına NEOnDemandRuleConnect və qardaşları qərar verir. Yoxlama URL-i olan əlaqə qiymətləndirmə qaydası yalnız həmin URL qədər yaxşıdır. Əgər yoxlama tunel olmadan cavab verirsə, qayda şəxsi şəbəkənin artıq əlçatan olduğu qənaətinə gəlir və heç vaxt qoşulmur, ona görə onu yalnız içəridən cavab verən bir şeyə yönəldin.
Həmişə işlək olmaq ayrı bir vəddir. O, nəzarət altında olan cihaz və idarə olunan profil tələb edir və nəzarətsiz istifadəçi profili istədiyi vaxt silə bilər. Donanma nəzarət altında deyilsə, həmişə işlək olmaqdan asılı dizayn təqdim etməyin.
Addım 5: etiketi deyil, yolu sübut edin
tun, tap, ppp və ya ipsec interfeyslərini skan etmək VPN-in konfiqurasiya olunduğunu sübut edir, sorğunuzun ondan istifadə etdiyini yox. usesInterfaceType(.other) ilə NWPathMonitor virtual interfeysin mövcud olduğunu bildirir və yararlılıq işləyicisi bir hostu sınaqdan keçirə bilər. Heç biri çıxış yolunu sübut etmir, ona görə onları yalnız tunelin çata bildiyi resursa sorğu ilə birləşdirin. İnterfeys adları diaqnostik köməkçidir, tətbiq məntiqinin budaqlanmalı olduğu qapı heç vaxt deyil.
Sahə yoxlaması üçün ümumi ünvanı tunellə və tunelsiz müqayisə edin və yalnız daxili olan səhifəni gətirin. Vəziyyət çağırışı provayder danışıqlar apararkən qoşulduğunu bildirə bilər, ona görə qərarı resurs nəticəsinə verin və statusa köməkçi dəlil kimi baxın.