Android-App refuséiert iwwer VPN ze lafen: wéi eng Schicht entscheet
Eng App kann e VPN wéinst enger lokaler Transportprüfung, enger Adressregel op der Serversäit oder hirer eegener Politik ofleenen. Ënnerscheet déi dräi, ier Dir Ausgäng ännert.
Wann eng Android-App an deem Ament opgeet ze schaffen, wou den Tunnel eropkënnt, kënnen dräi verschidde Saachen verantwortlech sinn, an si produzéieren ähnlech ausgesinn Feeler. D’App kann den eegenen Netzwierkzoustand vum Telefon liesen an et lokal ofleenen. De Server kann d’Adress, vun där Dir kommt, klassifizéieren an se refuséieren. Oder d’Oflenung kann iwwerhaapt näischt mam VPN ze dinn hunn. D’Reiefolleg hei drënner sammelt Beweiser, ier se eppes ännert, well den Ausgang ze wiesselen den deiersten Schrëtt ass an dee mat der mannster Warscheinlechkeet hëlleft, wann d’Prüfung lokal ass.
Schrëtt 1: erausfannen, wéini d’App ofleent
Den Zäitpunkt ass den éischten Ënnerscheeder. Leet de Logpuffer, reproduzéiert de Feeler a kuckt, wat d’App gemaach huet, ier se sech beschwéiert huet:
adb logcat -c
# reproduce the failure in the app
adb logcat -d | grep -iE 'vpn|network|connect|http' | tail -60
Wann d’App ofleent, ier iergendeng erausgänglech Ufro versicht gouf, kuckt Dir eng lokal Entscheedung. Wann se sech verbënnt, eppes schéckt an duerno e Feeler weist, ass d’Oflenung vun der anerer Säit komm. Wann d’App och mam ausgeschaltem Tunnel gläich ugeet, war de VPN ni d’Variabel.
Behandelt dësen Zäitpunkt als Beweis an net als Confirmatioun. Eng App kann eng gecachte Äntwert erëm ofspillen, an Hannergrondufroe kënne gelunge sinn oder ugefaangen sinn, ier Dir gekuckt hutt. Schreift d’Zäitstemple vun der leschter gelungener Ufro an dee vum Feeler op, net just d’Ament, wou d’Message erschéngt ass.
Schrëtt 2: dem Telefon seng eege Vue op d’Netzwierk liesen
Android weist de VPN-Zoustand als Netzwierkfäegkeet, also brauch eng App keng Lëscht vu kommerziellen Ubidder, fir ze bemierken, datt en Tunnel aktiv ass. Se freet de Konnektivitéitsservice, wéi een dat aktuellt Netzwierk ass, an d’Äntwert enthält e VPN-Transportbit:
val cm = context.getSystemService(ConnectivityManager::class.java)
val caps = cm.getNetworkCapabilities(cm.activeNetwork)
val onVpn = caps?.hasTransport(NetworkCapabilities.TRANSPORT_VPN) == true
Déi Prüfung ass lokal an bëlleg, an se erkläert eng ganz Klass vu Rapporten wéi „dës App schafft net iwwer VPN“ ouni iergendeng Klassifikatioun aus der Ferne. Wat d’App gesäit, hänkt nach ëmmer vun hirem eegene Netzwierkkontext of, also hält net un, datt all App all Profil um Apparat iwwerpréift.
Vun enger Aarbechtsstatioun aus gesitt Dir dee selwechten Zoustand op engem Testapparat mam adb shell dumpsys connectivity an andeems Dir no dem VPN-Netzwierkantrag sicht. Vergläicht en Laf mam Tunnel uewen mat engem Laf mam Tunnel ënnen, a behält béid Ausgaben.
Schrëtt 3: liesen, wat de Server tatsächlech gesäit
Den aneren Observateur ass de Service. Hie gesäit d’Quelladress, déi ukommt, an hie kann op d’Adress, d’Hostingnetzwierk dobannen, d’Regioun, den Operateur oder Signaler reagéieren, déi um Kont an um Apparat hänken. Näischt dovun ass eng eenzegaarteg Identitéit, an duerch gedeelt Adresséierung gi kollateral Blocken normal: eng limitéiert Adress kann onbetraffe Benotzer hannert därselwechter Iwwersetzung mat eraushuelen.
Kritt d’Adress iwwer dee selwechte Wee, deen d’App benotzt, an net aus engem Browser op engem Laptop. Um Telefon weist eng einfach Ufro un en Adress-Echo-Service, wat déi aner Säit kritt, an de Verglach mat enger Ufro iwwer d’Mobilnetz seet Iech, ob d’Adress iwwerhaapt geännert huet.
Wann d’App iwwer d’Mobilnetz schafft an iwwer den Tunnel mam selwechte Kont feelt, läit d’Oflenung um wäiten Enn oder an der eegener Politik vun der App. Wann se op béide feelt, ass de VPN net den Ënnerscheeder, an Dir sollt ophalen, Endpunkten ze testen.
Schrëtt 4: d’Beweiser engem vun dräi Verdikter zouuerdnen
Dräi Kombinatiounen decken bal all Rapport of. Eng Oflenung ouni erausgänglechen Versuch, wärend en Tunnel aktiv ass, deit op eng lokal Transportprüfung. Eng Ufro, déi erausgeet an mat engem Feeler, engem Timeout op engem bestëmmten Host oder enger Regiounsmessage zréckkënnt, deit op déi wäit Säit. E Feeler, deen sech iwwer d’Mobilnetz ouni Tunnel widderhëlt, deit op de Kont, d’App-Versioun oder d’Politik vum Service selwer, an keng VPN-Ännerung wäert en beweegen.
Schreift d’Verdikt mat dem Beweis op, deen et produzéiert huet. De Wäert vun dësem Schrëtt ass, datt en d’Schleef stoppt, an där een véier Mol Ausgangskniet wiesselt, fir eng Prüfung ze flécken, déi um Handapparat selwer leeft.
Et hält och d’Behaaptungen éierlech. Selbst hosten ännert den Endpunkt an säin Internetausgang; et mécht net, datt Android vergësst, datt en VPN-Netzwierk aktiv ass, an et garantéiert keng Acceptatioun duerch e Service, deen Adressen klassifizéiert. En lokale Filter kann op Ärem eegenen VPN-Netzwierk esou einfach ausléisen wéi op engem kommerziellen.
Schrëtt 5: den ënnerstëtzten Wee goen an en iwwerpréiwen
Fänkt mat der dokumentéierter Politik vum Produkt an hirem Supportbesëtzer un. Schéckt d’Clientversioun, déi genee Message an en enke Feelerzäitfenster; schéckt keng komplett Verkéiersopnamen oder Umeldungsinformatiounen, just fir ze beweisen, datt e Feeler existéiert.
Wann de Service direkten Zougang erlaabt an d’Apparatspolitik et och erlaabt, dann ass d’Ausname pro App den ënnerstëtzten Mechanismus, an en hëlt déi App bewosst aus dem Tunnel eraus, amplaz den Tunnel ze verstoppen. Den Verkéier vun der App geet dann säin eegene Wee, wat eng Politikentscheedung ass, déi een iwwerhuele muss. An enger Konfiguratioun, déi ouni VPN blockéiert, kann eng ausgeschloss App einfach d’Konnektivitéit verléieren, also test dës Kombinatioun, ier Dir versprécht, datt se schafft.
Widderhëlt no all Ännerung den Zäittest vum éischte Schrëtt, bestätegt, datt d’App schafft, a bestätegt, datt all aner App nach ëmmer den Tunnel benotzt. Stellt duerno déi vireg Konfiguratioun erëm hier a préift, ob de Feeler zréckkënnt, well eng Korrektur, déi Dir net reproduzéiere kënnt, ass en Zoufall, deem Dir nach eng Kéier begéint.