Dräi verschidde Produkter droen den Numm iOS VPN, an si deelen net eng API. Personal VPN fiert op den agebaute IPsec- an IKEv2-Transporter vum System. Custom tunnel leeft Ären eegenen Protokoll bannen an enger network extension. Configuration profile konfiguréiert ee vun deenen zwee a kann on-demand-Verhalen dobäisetzen. No dem Transporter ze wielen, mat deem Dir musst schwätzen, ass méi séier wéi no deem Tutorial ze wielen, deen als éischte kompiléiert gouf.

Féiert d'Kontrollen hei drënner der Rei no aus, well all Schrëtt unhëlt, datt de virege valabel Konfiguratioun produzéiert huet.

Schrëtt 1: no Transporter wielen

Wann de Server IKEv2 oder IPsec am Cisco-Stil ass, duergeet NEVPNManager an d'Systemtransporter kommen gratis. Wann de Server OpenVPN, WireGuard oder eppes anescht schwätzt, kann NEVPNManager net hëllefen: et huet keen Haken fir en Drëttparteiprotokoll. Dee Fall brauch NETunnelProviderManager mat engem packet tunnel provider, deen de Protokoll ëmsetzt. E Profil verdeelt nëmmen Konfiguratioun an et kann keen Transporter derbäisetzen, deen d'Betribssystem net huet.

PPTP ass keen Zil op aktuelle Systemer. Shared-secret IPsec erwaart nach ëmmer den Gruppennumm am remoteIdentifier, en keychain-Element mat dem Geheimnis an eng erweidert Authentifikatioun, wann de Server e Benotzernumm freet. All fehlend Deel erschéngt als déiselwecht allgemeng Konfiguratiounsfeeler, also füügt se all derbäi, ier Dir eppes anescht debugt.

Schrëtt 2: respektéiert d'Reiefolleg späicheren, lueden, starten

NEVPNManager schreift an d'preferences, liest se zréck a start dann just. Fëllt d'Protokoll- a manager-Objete aus, rufft saveToPreferences op, rufft loadFromPreferences op a rufft startVPNTunnel aus dem load completion handler op. Virum Zeréckkomme vum Lueden ze starten produzéiert e configuration-invalid Feeler, NEVPNErrorDomain code 1, op enger Konfiguratioun, déi soss richteg ass.

D'Form ass kuerz genuch, fir op enger Plaz ze bleiwen:

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

startVPNTunnel kënnt zréck, wann d'Ufro ugeholl ass, net wann den Tunnel erop ass. Observéiert NEVPNStatusDidChange a liest connection.status fir de reellen Zoustand. Eng App, déi um Opruffpunkt Succès unhëlt, mellt e verbonne VPN, während d'extension nach verhandelt. E connecting-Status ass ee Moment normal; e Status, deen ni dovu fortgeet, ass de Feeler, deen et wäert ass ze loggen.

Schrëtt 3: gitt dem provider-Prozess wat en brauch

Custom transport leeft an engem separate Prozess mat sengem eegene bundle identifier a sengem eegene entitlement. Souwuel d'container-App wéi och de provider brauche den network-extension entitlement beim Signéieren, an en Developer ID Build ausserhalb vum App Store muss en nach ëmmer am provisioning profile droen. En fehlenden entitlement gesäit aus wéi e Protokollfeeler, well d'extension einfach net start.

Et gëtt keen ëffentleche socket descriptor ze léinen. NEPacketTunnelProvider gëtt Iech NEPacketTunnelFlow mat read, write an cancel, a Code, deen no private key paths gräift, geet tëschent Releases futti. De provider leeft weider, wärend d'App am Background ass, also brauch d'container-App keng Background-Modus dofir.

Schrëtt 4: on-demand ass eng Rei Reegelen, keen Schalter

isOnDemandEnabled bewaffnet nëmmen d'Regelen; NEOnDemandRuleConnect a seng Bridder entscheeden, wéini den Tunnel eropkënnt. Eng evaluate-connection-Reeg mat enger probe URL ass just esou gutt wéi déi URL. Wann d'probe ouni den Tunnel äntwert, schléisst d'Reegel, datt de private Netzwierk schonn erreechbar ass, an et verbënnt ni, also riicht se op eppes, dat nëmmen vun bannen äntwert.

Always-on ass e separat Verspriechen. Et brauch en iwwerwaacht Gerät an en verwalt Profil, an en net-iwwerwaachte Benotzer kann e Profil all Moment läschen. Verschëfft keen Design, deen op always-on berout, ausser d'Flott ass iwwerwaacht.

Schrëtt 5: beweist de Wee, net d'Etikett

Fir tun-, tap-, ppp- oder ipsec-Interfacen ze scannen beweist, datt e VPN konfiguréiert ass, net datt Är Ufro en benotzt huet. NWPathMonitor mat usesInterfaceType(.other) seet, datt en virtuelle Interface verfügbar ass, an en viability handler kann ee Host testen. Keent vun deenen zwee beweist de Ausgangswee, also kombinéiert se mat enger Ufro op eng Ressource, déi nëmmen den Tunnel erreeche kann. Interface-Nimm sinn eng diagnostesch Hëllef, ni en Paart, op deem Applikatiounslogik sech sollt verzweigen.

Fir eng Feldkontroll vergläicht d'ëffentlech Adress mat an ouni den Tunnel a rufft eng nëmme intern Säit of. En Statusopruff kann verbonne mellen, während de provider verhandelt, also loosst d'Resultat vun der Ressource entscheeden an behandelt de Status als Ënnerstëtzungsbeweis.

Ähnlech Artikelen