Dir hutt eng Domain op d'Erlaabneslëscht gesat, d'Ufro erreecht Är App, de Matcher gëtt erlaabt zréck, an d'Säit lued nach ëmmer ni. Zu deem Zäitpunkt fänken déi meescht Leit un, de Matcher nei ze schreiwen an Wildcard-Vergläicher bäizesetzen. A menger Erfarung ass de Matcher meeschtens richteg, an de Feeler läit eng Schicht méi déif: an der DNS-Äntwert, déi Dir synthetiséiert hutt, an der Route, déi Dir installéiert hutt, oder am Socket, deen Dir benotzt hutt fir d'Ufro virun ze schécken. D'Lëscht ass den einfachen Deel; de Paketswee ass dee Punkt, wou Erlaabneslëschten briechen.

De Matcher ass selten de Schold

Déi éischt Saach, déi een trenne muss, ass blockéiert vun futti. En blockéierten Numm soll séier an erkennbar versoen, well de Browser eng Äntwert kritt, datt den Numm net existéiert, an dann ophält. En futti Numm hänkt, probéiert nach eng Kéier iwwer IPv6, fält op en aneren Transport zeréck a léisst Iech mat engem dréienden Indikator. Wann Dir en dréienden Indikator gesitt, äntwert Är Erlaabneslëscht wahrscheinlech mat eppes, mat deem de Client näischt ufänke kann.

En eidelen A-Record ass de klassesche Feeler. NOERROR mat null Äntwerten zréckzeginn gesäit wéi eng valabel Äntwert aus, also akzeptéiert de Stub-Resolver déi, de Browser probéiert nach eng Kéier, probéiert AAAA, probéiert en aneren Resolver an gëtt vill méi spéit op. En Äntwertcode 3, also NXDOMAIN, mat der Fro-Sektioun widderholl an der Transaktiouns-ID kopéiert, beendet d'Gespréich direkt. Benotzt en fir all Numm, deen Dir bewosst ofleet.

IPv6 verdéngt déiselwecht Entscheidung an net e Standardwäert. Wann Dir NXDOMAIN fir A äntwert an AAAA duerchloosst, kann de Client de blockéierten Numm iwwer IPv6 erreechen an de Filter leet. E puer Implementatioune beäntwerten blockéiert AAAA-Ufroe mat enger Loopback-Adress, sou datt d'Verbindung direkt versoe sech, amplaz op eng Alternativ ze falen. Wielt eng Politik, wend se op béid Record-Typen un, a loggt béid.

Eng Route, déi alles fänkt, besëtzt alles

En Design nëmme mat DNS setzt ni addRoute("0.0.0.0", 0) bäi, also kommen nëmmen Ufroe an d'TUN-Interface an alles anescht benotzt weider dat ënnerleeënde Netz. Dat ass déi sécher Form, an et erkläert och firwat e puer Erlaabneslëschten op Wi-Fi schéngen ze fonctionéieren an um Mobilnetz versoen.

De Moment, wou eng Standardroute existéiert, ass all Floss Ären. En TCP-Paket, deen un der Interface ukommt an entweder net weidergeschéckt oder net beäntwert gëtt, sëtzt an der Schlange bis de Client en Timeout kritt, an et gëtt kee Feeler ze loggen, well näischt feelgefall ass. Ech hunn een gesinn, deen en Nomëtteg op enger futti Erlaabneslëscht verbruecht huet, déi eigentlech en feelende Weidergéier fir Port 443 war. Loggt de Protokoll an d'Zil vun all Paket, deen Dir decidéiert ze verwerfen.

De Resolver-Socket muss den Tunnel verloossen

D'Weiderginn ass de Punkt vun der nächster Fall. Resolver vum Provider wunnen dacks op enger privater Adress, déi den Tunnel net erreecht, also geet d'Ufro, déi Dir weidergitt, néierenshin an d'App mellt en Liese-Timeout. Schéckt genehmegt Ufroe an en Resolver, deen Dir wësst datt en erreechbar ass, an iwwerhëlt deen Socket als éischt un VpnService.protect(). En ongeschützte Socket schéckt d'Ufro zréck an Ären eegenen Tunnel, wou se erëm bei d'App ukommt an zirkuléiert bis den Timeout ausgeléist gëtt.

De Feeler gesäit identesch aus wéi en Netzwierkausfall, an dofir iwwerlieft en sou laang a Feelerberichter. Halter Zähler fir geschéckt Ufroe a kritt Äntwerten: wann déi éischt Zuel klëmmt an déi zweet op Null bleift, kuckt Dir op de Socket, net op d'Lëscht.

Gréisst a Checksummen versoen ouni Noriicht

Stille Verwerfenung kommt och vun der Gréisst. Eng DNS-Äntwert mat engem groussen Äntwertset, oder en TCP-Handshake mat grousszügegen Optiounen, kann eng Wee-MTU iwwerschreiden, déi Dir ni explizit gesat hutt; de Fragment verschwënnt uewen an de Client entweder probéiert méi kleng oder hält op ze probéieren. D'Interface-MTU op 1280 ze setzen ass eng konservativ Wiel, déi déi meescht Mobilweeër iwwersteet, an explizit ze sinn ass besser wéi en Standard ze ierwen, deen keen gemooss huet.

Wann Dir d'Pakete selwer baut, ass d'Checksumm den aneren stille Mäerder. Eng UDP-Checksumm, déi iwwer en Pseudo-Header gerechent gëtt, deen d'UDP-Längt oder de Protokollfeld ausléisst, produzéiert e Paket, deen op Ärer Säit gutt geformt ausgesäit an vum Empfänger ouni Spuer verweidert gëtt. Vergläicht Äre Pseudo-Header mat der Spezifikatioun Feld fir Feld, an dréckt d'berechent Checksumm fir een bekannten Floss aus, während Dir debuggt.

Wat e VpnService net fir Iech mécht

Zwou Grenze sinn derwäert ze wëssen, ier Dir ronderëm si designt. Keng gewéinlech App kann e systemwäite Proxy oder eng PAC-Datei ausserhalb vu Wi-Fi installéieren, an deen Deel huet sech net geännert. De Wee pro App huet sech geännert: virun API 29 konnt VpnService.Builder iwwerhaapt kee Proxy droen, a vun API 29 un gëtt setHttpProxy(ProxyInfo.buildPacProxy(uri)) der Plattform en PAC-Skript fir ze evaluéieren fir d'VPN-Netz. Evaluéiert Regele an Ärem eigenen Code, wann Dir eeler API'en zielt oder wann de PAC-Modell d'Regel net kann ausdrécken. UDP ass och net gratis: Browser schécken nëmme TCP iwwer e SOCKS-Proxy, an déi meescht SOCKS5-Cliente setzen UDP ASSOCIATE ni ëm, also verwërft oder leet en proxybaséierten Design UDP, während TCP gesond ausgesäit.

Déi zweet Grenz ass de Grond, firwat en UDP-baséierte Protokoll op engem normale Netz ka fonctionéieren an de Moment versoe kann, wou Äre VPN sech verbënnt. Wa vum Tunnel erwaart gëtt, datt en UDP dréit, muss de Weidergéier de Weiderginnswee dofir ëmsetzen, net nëmmen den TCP-Wee mat engem aneren Socket-Typ.

Préift an dëser Reiefolleg

Schafft d'Lëscht der Reiefolleg no of a stoppt um éischten Etapp, dee feelgeet, well all spéider Kontroll Kaméidi ass, bis déi vireg hält.

  1. Lëscht d'installéiert Routen op a bestätegt, ob Net-DNS-Pakete iwwerhaapt an d'TUN-Interface kommen.
  2. Loggt den Ufro-Numm, d'Entscheedung an den Äntwertcode fir een blockéierten an een genehmegten Numm.
  3. Bestätegt, datt de Resolver-Socket geschützt ass an de gewielte Resolver vun innerhalb vum Tunnel äntwert.
  4. Bestätegt d'Interface-MTU an d'Checksumm vun enger Äntwert, déi Dir vun Hand gebaut hutt.
  5. Widderholl déiselwecht Säit op Wi-Fi an um Mobilnetz, well Resolver vum Provider a Wee-MTU ënnerschiddlech sinn.

Wann all fënnef halen an d'Säit nach ëmmer hänkt, ass den nächsten Verdächtegen de Weidergéier selwer: vergläicht eng gefaangen Ufro mat enger gefaangener Äntwert a sicht no enger feelender Byte-Zuel oder engem hallef zouenen Socket. D'VpnService.Builder-Referenz deckt d'Kontrakter fir Route, DNS an MTU of, an protect() ass en eegene VpnService-Opruff an net eng Builder-Optioun; eng verbonnen Interface bedeit just, datt den éischten Kontrakt erfëllt ass.

Ähnlech Artikelen