Android-VPN schafft mat IPv6, awer de Browser wielt nach IPv4
Verfollegt déi véier Etappen, op deenen eng privat IPv6-Adress verschwënnt: Resolver, VpnService-Deklaratioun, Browser-Kandidatprüfung an Iwwerreechung vun der Route.
D'VPN ass un, déi privat Webinterface äntwert iwwer IPv6 vun engem Laptop, an den Android-Telefon mécht déiselwecht Säit nach ëmmer iwwer IPv4 op oder refuséiert se ganz ze lueden. Den AAAA-Record existéiert. Den Tunnel mellt eng IPv6-Adress. Am Client gesäit näischt falsch aus. Véier getrennt Entscheedungen bestëmmen d'Resultat: wéi ee Resolver geäntwert huet, wat de VpnService dem Android deklaréiert huet, wéi eng Adressfamill de Browser bereet war ze probéieren an ob e Paket de Wee hin an zeréck packt. Schafft se an där Reihenfolg of, amplaz eng Standardroute derbäizesetzen an ze hoffen, datt d'Symptom weiderzitt.
Schrëtt 1: beweise wéi ee Resolver d'AAAA-Abfro beäntwert huet
Android huet keen eenzegen DNS-Wee. Eng VPN kann en DNS-Server fir säi Netz duerchdrécken, d'System ka Private DNS fir Hostnimm benotze, déi et als gëeegent ugesäit, an de Chrome ka säin eegene verschlësselte Resolver vun chrome://settings/security aus bedreiwen. Op engem Telefon, wou den Tunnel 10.61.0.1 duerchdréckt, awer Private DNS op en ëffentlechen Ubieder weist, gëtt den Numm an Ärer privater Zon net vun där Maschinn opgeléist, déi d'Zon besëtzt. De Browser kritt eng Äntwert vun engem Resolver ouni Kompetenz fir deen Numm a behandelt se als feelend, an den Feelertext ernimmt DNS ni.
Frot de Resolver vum Tunnel direkt, ier Dir soss eppes ännert. Déi éischt zwou Kommandoen weisen, wéi eng DNS-Server den Android mat dem aktiven Netz verbonnen huet an ob Private DNS am automateschen oder am strenge Modus ass; déi drëtt leeft vun engem Client am Tunnel, net vum Telefon.
adb shell dumpsys connectivity | grep -A3 "DnsAddresses"
adb shell settings get global private_dns_mode
nslookup -type=AAAA nas.lan 10.61.0.1
Schrëtt 2: liest wat de VpnService tatsächlech deklaréiert huet
D'Android-Säit ass explizit an net ofgeleet. En VpnService.Builder setzt Adressen mat addAddress, Routen mat addRoute, DNS-Server mat addDnsServer derbäi, an et kann den ganzen Tunnel mat allowFamily op eng eenzeg Adressfamill beschränken. E Builder, deen allowFamily(AF_INET) opgeruff an duerno eng IPv6-Route derbäigesat huet, huet dem System zwee kontradiktoresch Saachen gesot, an d'Famillbeschränkung ass dat, wat d'System behält. Eng Route, déi fd00:61::/64 deckt, zesumme mat enger Interface-Adress an engem anere Prefix, schléit aus engem änleche Grond fehl: d'Adress existéiert, awer se ass net on-link fir déi Route.
Liest d'Deklaratioun amplaz dem Schalter an der App ze vertrauen. dumpsys netd dréckt d'Adressen an d'Routen aus, déi un d'tun-Interface gebonnen sinn, an de pro-Netz LinkProperties an dumpsys connectivity weist d'DNS-Lëscht nieft de Famillen, déi d'Netz behaapt.
adb shell ip -6 addr show tun0
adb shell ip -6 route show table all | grep tun0
adb shell dumpsys connectivity | grep -E "LinkAddresses|Routes"
Wann d'tun-Interface eng IPv6-Adress huet, awer keng Route mam Prefix vum Service iwwereneen ass, ass d'IPv6-Iwwerreechung schonn futti, ier e Browser derbäikënnt. Dat ass en anere Feeler wéi e Browser, deen et net probéiert, an en brauch eng aner Korrektur.
Schrëtt 3: de Browser entscheet, ob hien IPv6 iwwerhaapt probéiert
De Chromium benotzt net all AAAA-Record, deen en kritt. Säi Hostresolver dréit IPv6-Erreechbarkeetsprüfungen a Kandidatfilterung, déi IPv6 kënnen ewechwerfen oder erofsetzen, wann d'Netz als onfäheg ugesi gëtt, et ze droen, an de Quellcode vum Resolver weist déi Prüfung zesumme mat de Konditiounen ronderëm. D'Logik hänkt vun der Versioun an de Fändelen of, an dat ass genee de Grond, firwat zwee Telefonen um selwechten Tunnel sech anescht kënne behuelen. Soubal et Kandidaten gëtt, léisst Happy Eyeballs d'Famillen pro Verbindung rennen, sou datt en IPv6-Wee, dee lues äntwert, nach ëmmer géint IPv4 verléiere kann, deen séier äntwert.
Beobacht d'Entscheedung, amplaz se ofzeleeden. Eng Sessioun, déi iwwer chrome://net-export opgeholl an am netlog-Viewer weidergeholl gëtt, weist all Opléisung an déi gewielt Famill; chrome://net-internals/#dns weist d'Resultater aus dem Cache. Eng Opléisung, déi nëmmen A-Recorde fir en Numm zréckgëtt, deen AAAA op Ärem eegene Resolver huet, weist direkt op dës Etapp.
Schrëtt 4: verifizéiert, datt e Paket de Wee hin an zeréck packt
D'Adressauswiel ass keng Iwwerreechung. Android hält pro-Netz Routingtabellen a Policyregelen, déi eng Tabell no fwmark auswielen, sou datt eng Route, déi an der Haapttabell ze gesinn ass, net automatesch déi Route ass, déi e Socket benotzt. D'Regele liesen an de Kernel froen, en Zil fir eng Quelladress opzeléisen, trennt déi zwee.
adb shell ip -6 rule show
adb shell ip -6 route get fd00:61::20 from fd00:61::10
Just d'Ausgab vun route get beäntwert d'Fro. Wann se tun0 nennt an d'Pakete stierwen nach ëmmer, gitt op d'MTU vum Tunnel an d'IPv6-Weiderleedung vum Gateway, an net zréck op den Telefon.
Firwat d'Derbäisetze vun ::/0 et meeschtens verschlechtert
::/0 derbäisetzen ännert d'Behaaptung vum Tunnel vun engem Prefix op all IPv6-Zil. Op engem Telefon ka dat eng Erreechbarkeetsprüfung erfëllen, well eng Testadress baussen Ärem Prefix elo routbar ausgesäit. Et schaaft awer keng IPv6-Upstreamkapazitéit um Gateway, a vill Heimgatewayen hunn iwwerhaapt keen funktionéierende IPv6-Uplink. D'Resultat ass e schwaarzt Lach fir ëffentlech IPv6: Nimm, déi fréier op IPv4 zréckgefall sinn, hänken elo, an d'privat Säit ka just besser ausgesinn, well d'Prüfung eppes anescht misst.
Et gëtt och eng politesch Käschten. Mat ::/0 am Tunnel verléisst den ganze IPv6-Trafic d'Netz iwwer d'VPN, inklusiv den Trafic, deen den Netzeigentümer ni bereet war ze droen. Behandelt dat als Deployment-Entscheedung mat engem benannten Verantwortlechen, net als Debugging-Schrëtt, deen Dir um 1 Auer nuets hëlt.
D'Aarbechtsuerdnung, déi dat beendet
Confirméiert, datt d'AAAA-Äntwert vun deem Resolver kënnt, deen d'Zon hält, liest de VpnService- an den netd-Zoustand fir d'tun-Interface, hëlt en net-export-Trace op, fir ze gesinn, ob de Chromium de Kandidat ewechgeworf huet, a testt dann de Wee hin an zeréck mam ip -6 route get. Reparéiert déi Schicht, déi wierklech versot huet, a loosst d'Splitpolitik a Rou. Wann privat Nimm aner Äntwerten brauchen wéi ëffentlech, dofir ass Split Tunneling do.
Notéiert de Build vum Telefon, d'Versioun vum Browser an de Resolver, deen Dir gefrot hutt. Déi dräi Fakten maachen aus "IPv6 is broken" eppes, wat déi nächst Persoun kann reproduzéieren.