Ass den iPhone op engem VPN? Wat eng iOS-App wierklech gesäit
Et gëtt kee eenzelen VPN-Flag am iOS-SDK. Eng App kann nëmmen hir eege Konfiguratioun, eng Statusmeldung an eng limitéiert Proxy-Snapshot observéieren, net méi.
Frot eng iOS-App ob den Telefon op engem VPN ass, an déi éierlech Äntwert ass datt se dat net weess op déi Manéier wéi Dir et mengt. Den SDK bitt kee Flag fir «d'Apparat ass an engem Tunnel», an déi privat Schnëttstellen déi dozou kéinte kommen, sinn zou fir Apps déi publizéiert ginn. Dir kënnt d'Konfiguratioun vun Ärer eegener App observéieren, den Zoustand deen domat verbonnen ass, an ee oder zwee indirekt Hiwäiser aus dem Netzwierkstack. Jiddweree beäntwert eng aner Fro, an déi meescht futtis Kontrollen entstinn doraus datt een vun hinnen als déi ganz Äntwert geholl gëtt.
De Mythos vum eenzelen VPN-Flag
Den Awerglawe ass datt et iergendwou am SDK eng Eegeschaft gëtt déi mellt ob d'Apparat an engem Tunnel ass, esou wéi e Erreechbarkeetsflag mellt ob en Host äntwert. Esou eng ëffentlech Eegeschaft gëtt et net. An och wann et se géif ginn, sinn «et gëtt en Tunnel» an «mäi Verkéier benotzt en» verschidden Aussagen, an nëmmen déi zweet ass fir déi meescht Apps wichteg.
Genau dës Lück ass de Grond firwat Bibliothéiken déi mat engem Een-Zeil-VPN-Detektor wierben, meeschtens eppes Brécheges liesen, wéi en Interface-Numm oder e Proxy-Schlëssel, an et als Uerteel presentéieren.
Lued d'Präferenzen ier s du engem nil trauerech
Déi gedeelt Manager-Instanz existéiert esoubal s du se frees, awer hir Protokoll-Eegeschaft bleift nil bis den Load-Callback fäerdeg ass. En nil-Protokoll heescht also «nach net gelueden» op d'mannst esou dacks wéi «net installéiert». Maach d'Liesen am Completion-Block, an entscheed éischt duerno: en existéierende Protokoll-Objet, mam Aktivéierungsflag un, esou gesäit «installéiert» aus.
En zweete Signal sëtzt um Verbindungs-Objet: den ongültege Zoustand, deen de System mellt wann dës App keng Konfiguratioun installéiert huet. Ongültegen Zoustand zesumme mat engem nil-Protokoll no enger fäerdeger Ladung ass eng richteg Absenz, keen Timing-Race.
Verbindungsännerunge kommen als Meldungen
D'Handleren déi un load a save ginn, mellen wat mat der Konfiguratioun geschitt ass, net wat den Tunnel mécht. Op een vun hinnen ze waarden deen um Verbindungszäitpunkt ausléist ass e Race deen ni opgeléist gëtt. Kuckt amplaz d'Meldung vum Statuswiessel, a liest den aktuellen Wäert vum Verbindungs-Objet wann se ukënnt.
Soubal eng Konfiguratioun installéiert ass, geet den Zoustand vun der Verbindung duerch eng kuerz Sequenz: getrennt, verbënnt, verbonnen, bestätegt nach eng Kéier, trennt. «Verbonnen» beschreift den Tunnel an net de Server hannendrun, also ass et kee Beweis datt Verkéier fléisst. On-demand kann och en Tunnel opriichten während d'App suspendéiert ass, an dann kënnt d'Meldung ier s du iergendeppes ze aktualiséieren hues.
De limitéierte Proxy-Snapshot ass en Hiwäis, keen Uerteel
CFNetwork kann der App déi aktuell System-Proxy-Astellungen ginn, an an deem Resultat ass en limitéierte Wierderbuch mat dem Interface-Numm als Schlëssel. En Numm ze gesinn deen mat tun, utun, ppp, ipsec oder tap ufänkt ass en Hiwäis datt en Tunnel do ass. Et bleift e Snapshot vun deem wat dës App ka gesinn, keng Ausso doriwwer wou d'Pakete reesen.
D'Provider sinn net eens iwwer d'Nimm, also beweist en feelenden Prefix näischt, an en Interface deen do ass kann existéieren ouni Verkéier ze droen. D'Erreechbarkeet ass nach méi schwaach: eng erfollegräich Ufro op eng privat Adress weist datt de Wee fir déi Ufro an deem Abléck funktionéiert huet, net datt e VPN installéiert ass.
De Simulator léint sech de Mac, an aner Apps bleiwen onsichtbar
De Simulator huet keen eegene Netzwierkstack; all Verbindung déi en opbaut ass vum Mac. En VPN deen um Host-Mac leeft ass also schonn a Kraaft fir déi simuléiert App, an d'Astellungen vum Simulator selwer weisen näischt. Wann den Tunnel no dem Start vum Simulator eropkomm ass, ass en Neistart meeschtens méi séier wéi d'App ze debuggen. En Host op engem net-standardiséierte Port brauch dee Port an der URL, oder eng lokal Weiderleedung wéi socat TCP-LISTEN:12345,fork TCP:host:12345.
Ëffentlech APIen zielen keng VPN-Profiller op déi aneren Apps oder Konfiguratiounsprofiller gehéieren. Fir eng bekannt App ass d'URL-Schema-Prüfung iwwer canOpenURL de portable Trick, a säit iOS 9 muss dat gefrot Schema an Ärer Info.plist deklaréiert sinn; loosst et ewech a vum Opruff gëtt false zréck. OpenVPN Connect äntwert op openvpn://, wat et zu engem gudde Beispill an engem schlechten allgemengen Detektor mécht.
Kombinéier dräi Observatiounen a so wat se bedeiten
Stapel dräi Resultater an der Praxis: eng Konfiguratioun déi gelueden an aktivéiert ass, en Zoustand vun der Verbindung deen net ongülteg ass, an eng Ufro op eng Adress déi nëmmen duerch den Tunnel erreechbar ass. Jiddwereen täuscht eleng; zesummen soen se wat d'App ka wëssen an net wat de Benotzer unhëlt.
Schreif d'Resultat als dräi Zeilen an Ärer Diagnostik, net als ee Boolean. Wann e Benotzer seet de VPN ass aus während Är App net d'accord ass, weisen déi dräi Zeilen wéi eng Observatioun ofgewichen ass, an dat ass den Ënnerscheed tëscht engem Support-Ticket op deen s du ka reagéieren an engem deen mat «bei mir geet et» ophält.