D'Telefon startet nei, always-on ass aktiv, «Verbindungen ouni VPN blockéieren» ass un, an den Tunnel kënnt awer net erop. Et ass näischt falsch konfiguréiert: d'Blockéierung mécht hir Aarbecht, an de Versuch vum Client selwer, säin Endpunkt z'erreechen, ass och ënnerworf. Den Endpunkt muss opgeléist ginn, ier den Tunnel existéiert, vun engem Client, dee mat dem Netz däerf schwätzen, während all aner App dat net däerf. Ze verstoen, wéi eng Komponent dat mécht a a wéi enger Reiefolleg, mécht aus dësem Rätsel eng Konfiguratiounsfro.

Wat de VPN-Builder eigentlech verlaangt

Eng Android-VPN-App gëtt der Plattform keng Serveradress. Si baut eng lokal Interface: Adressen a Routen fir den Tunnel, d'Resolver, déi d'Appen dobannen nutze sollen, an duerno gëtt establish() e Dateideskriptor zréck, deen d'App als roh IP-Pakete liest an schreift. Den Endpunkt um Server kënnt an dësem Builder guer net vir.

Dat ass de strukturellen Haaptpunkt. D'Plattform erstellt eng tun-Interface a setzt d'Politik drop duerch; d'App implementéiert den Transport am Benotzerraum, dat heescht, d'App léist selwer den Endpunktnumm op an öffnet déi verschlësselt Verbindung. En Endpunkt als Hostnumm ass dowéinst méiglech — net well d'Plattform Nimm ënnerstëtzt, mä well d'Plattform den Endpunkt ni gesäit.

Eent Feld am Builder hëlt awer Adressen: d'DNS-Serveren. Déi mussen numeresch Resolveradresse sinn, meeschtens déi, déi den Operateur duerch den Tunnel wëll ofstragen. Dëst Feld beschreift, wou d'Appen hir Ufroe schécken, nodeems den Tunnel erop ass. Et seet näischt doriwwer, wéi de Client säin Endpunkt fannt, a genee dës zwee als déi selwecht Astellung ze behandelen, ass de Start vun der Konfusioun.

Zwee DNS-Froen, net eng

Déi éischt Fro ass: wou schécken d'Appen hir Ufroe beim Tunnel erop? D'Äntwert ass eng Resolveradress am Tunnel, erreechbar duerch d'tun-Interface, a vun der Konstruktioun hier numeresch.

Déi zweet Fro ass: wéi fannt de Client säin eegene Endpunkt, ier dësen Tunnel existéiert? Dës Sich geschitt ausserhalb vum Tunnel, um ënnerluechte Netz, am Prozess vum Client. Si däerf en Numm benotzen, a si muss e Resolver benotzen, deen d'Apparat ouni VPN erreech.

StageWho resolvesPathFailure looks like
Endpoint lookupThe VPN appUnderlying network, protected socketNever connects; no tunnel interface traffic
Peer authenticationClient and serverTunnel transportConnects then drops; certificate or key error
Private name lookupApps via the tunnelResolver inside the tunTunnel up, internal sites do not resolve

Dräi Etappen, dräi ënnerschiddlech Symptomer. Eng eenzeg Fehlermeldung, déi seet «kann net verbannen», schmëlzt se zesummen, an dowéinst fänken d'Leit un, d'DNS-Server-Feld ze änneren, fir e Problem ze léisen, dee geschitt, ier dëst Feld iwwerhaapt gelies gëtt.

Firwat de Bootstrap sech verklemmt

Always-on mat aktiv Blockéierung heescht, datt Trafik, deen net am VPN ass, verworf gëtt, och den Trafik vun der App, där de VPN gehéiert. De Lach ass explizit: d'App rufft protect() op engem Socket, wat en un d'ënnerluecht Netz bënnt, sou datt en den Tunnel ëmgeet a raus däerf. All VPN-Client muss dat fir säin eegenen Transport maachen, soss erreecht en ni e Server.

Elo stell dir eng Installatioun vir, wou deen eenzegen Resolver, deen den Endpunktnumm kennt, selwer am Tunnel ass. De Client brauch den Tunnel, fir den Numm opzeléisen, an den Numm, fir den Tunnel ze bauen. Dat ass eng richteg zirkulär Ofhängegkeet, an keng Client-Konfiguratioun léist se. Et ass e Designfehler, kee Bug.

D'Timing weist déiselwecht Ofhängegkeet a méi mëllen Formen. Beim Start virun der éischter Entspärung kann den Apparat nach kee brauchbaart Netz hunn; op engem Captive Portal existéiert d'Netz, blockéiert awer alles ausser dem Portal; beim Iwwergang vu Wi-Fi op Mobilnetz ännert sech d'ënnerluecht Netz vum geschützte Socket, an de Client muss et bemierken a sech nei opléisen. All eenzelt dovun ass en Bootstrap-Evenement, an all verdéngt et, bewosst getest ze ginn, amplaz um 3 Auer nuets entdeckt ze ginn.

Firwat d'Äntwert festzehalen keng Léisung ass

De verlockenden Ëmwee ass, den Numm eng Kéier opzeléisen an d'Resultatadress an e numerescht Feld ze paste, oder se an engem eegene Build haart ze kodéieren. Et schéngt ze funktionéieren, an et mécht aus engem Numm eng Momentopnam. Wann den Operateur den Endpunkt verréckelt — eng Migratioun, eng anycast-Ännerung, eng nei regional Adress — fiert de Client weider déi al un, an et erklärt näischt an der UI firwat.

DNS-Recorde hunn eng Time to live just dowéinst, datt Äntwerten sech kënnen änneren; Caching ass iwwer dës Liewensdauer definéiert an net fir ëmmer. Eng Äntwert festzehalen verwërft de Mechanismus, deen en Numm besser mécht wéi eng Adress, an hält awer d'Betribskäschten, well en Numm benotzt gouf.

D'Festhalen geet dacks mat enger zweeter schlechter Gewunnecht einher: d'Identitéitspréifung ze lockeren, well d'Verbindung elo anescht feelt. D'Verifikatioun vun der Serveridentitéit gehéiert net zum Bootstrap-Problem, an et ze schwächen tauscht eng DNS-Onbequemlechkeet géint en Interceptiounsrisiko.

Designen, déi en Neistart iwwerstoen

Déi dauerhaft Konfiguratioun ass onglamouréis. Benotz e Client, deen déi geschützt Sockets richteg implementéiert an säin Endpunkt um ënnerluechte Netz opléist, a gëff em en Endpunktnumm, deen ëffentlech opgeléist gëtt, oder iwwer e Resolver, deen virum Tunnel erreechbar ass. Looss d'Blockéierung aktiv; se ganz auszeschalten, fir datt DNS funktionéiert, hëlt déi Eegenschaft ewech, fir déi d'Installatioun existéiert.

Wou den Endpunkt privat muss bleiwen, stell e kloere Bootstrap-Wee zur Verfügung, deen d'Plattform ka benotzen — e Resolver ouni Tunnel, oder eng Managementverbindung, déi den Operateur ënnerhält — a hal dës Ausnam schmuel a bei der Politik, net bei engem Benotzerschalter. D'Android-VpnService-Dokumentatioun ass d'Referenz dofir, wat d'Plattform beim Schutz a beim Liewenszyklus garantéiert, an d'Referenz zum VpnService.Builder bestätegt, datt d'DNS-Feld numeresch Adressen unhëlt.

Duerno verifizéier déi dräi Etappen, an der Rei, op enger neier Verbindung nom Neistart: den Endpunktnumm gëtt opgeléist, den Tunnel gëtt opgebaut an de Peer authentifizéiert sech, an en private Numm gëtt iwwer de Resolver vum Tunnel opgeléist. Wann déi éischt Etapp feelt, kann näischt méi spéit funktionéieren, an d'Korrektur gehéiert an de Bootstrap-Wee — ni an d'Resolver-Feld.

  • D'Opléisung vum Endpunkt geschitt an der App, ausserhalb vum Tunnel, op engem geschützte Socket.
  • D'DNS-Feld am Builder ass fir Appen am Tunnel, net fir den eegenen Endpunkt vum Client.
  • E Resolver, deen nemmen duerch den Tunnel erreechbar ass, ass eng Verklemmung, keen schwaache Start.
  • Test Endpunkt, Authentifikatioun a privat Nummopléisung getrennt nom Neistart.

Ähnlech Artikelen