VPN-i në Android punon me IPv6, por shfletuesi vazhdon të zgjedhë IPv4
Ndiqni katër fazat ku një adresë private IPv6 zhduket: zgjidhësi, deklarata e VpnService, kontrolli i kandidatëve nga shfletuesi dhe dorëzimi i rrugës.
VPN-i është aktiv, ndërfaqja private e web-it përgjigjet përmes IPv6 nga një laptop, dhe telefoni Android vazhdon të hapë të njëjtën faqe përmes IPv4 ose refuzon ta ngarkojë fare. Regjistrimi AAAA ekziston. Tuneli raporton një adresë IPv6. Asgjë në klient nuk duket e gabuar. Rezultatin e përcaktojnë katër vendime të ndara: cili zgjidhës u përgjigj, çfarë deklaroi VpnService te Android, cilën familje adresash shfletuesi ishte i gatshëm të provonte dhe a mundet një paketë të bëjë udhëtimin vajtje-ardhje. Punojini në atë rend, në vend që të shtoni një rrugë të paracaktuar dhe të shpresoni se simptoma do të zhvendoset.
Hapi 1: provoni cili zgjidhës u përgjigj pyetjes AAAA
Android nuk ka një rrugë të vetme DNS. Një VPN mund të shtyjë një server DNS për rrjetin e vet, sistemi mund të përdorë Private DNS për emrat e hosteve që i konsideron të përshtatshëm, dhe Chrome mund të ekzekutojë zgjidhësin e vet të kriptuar nga chrome://settings/security. Në një telefon ku tuneli shtyn 10.61.0.1, por Private DNS tregon një ofrues publik, emri brenda zonës suaj private nuk zgjidhet nga makina që zotëron zonën. Shfletuesi merr një përgjigje nga një zgjidhës pa autoritet mbi atë emër dhe e trajton si të munguar, dhe teksti i gabimit nuk e përmend kurrë DNS.
Pyetni drejtpërdrejt zgjidhësin e tunelit përpara se të ndryshoni çdo gjë tjetër. Dy komandat e para tregojnë cilat serverë DNS i lidhi Android rrjetit aktiv dhe nëse Private DNS është në modalitet automatik ose të rreptë; e treta ekzekutohet nga çdo klient brenda tunelit, jo nga telefoni.
adb shell dumpsys connectivity | grep -A3 "DnsAddresses"
adb shell settings get global private_dns_mode
nslookup -type=AAAA nas.lan 10.61.0.1
Hapi 2: lexoni çfarë deklaroi në të vërtetë VpnService
Ana e Android është e qartë, jo e nxjerrë. Një VpnService.Builder shton adresa me addAddress, rrugë me addRoute, serverë DNS me addDnsServer, dhe mund ta kufizojë të gjithë tunelin në një familje adresash me allowFamily. Një ndërtues që thirri allowFamily(AF_INET) dhe më vonë shtoi një rrugë IPv6 i ka thënë sistemit dy gjëra kontradiktore, dhe kufizimi i familjes është ai që sistemi mban. Një rrugë që mbulon fd00:61::/64 e kombinuar me një adresë ndërfaqeje në një prefiks tjetër dështon për një arsye të ngjashme: adresa ekziston, por nuk është on-link për atë rrugë.
Lexoni deklaratën në vend që t'i besoni çelësit në aplikacion. dumpsys netd printon adresat dhe rrugët e lidhura me ndërfaqen tun, dhe LinkProperties për çdo rrjet brenda dumpsys connectivity tregon listën DNS pranë familjeve që rrjeti pretendon.
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"
Nëse ndërfaqja tun ka një adresë IPv6 por asnjë rrugë nuk përputhet me prefiksin e shërbimit, dorëzimi i IPv6 është tashmë i prishur para se të hyjë një shfletues. Ky është një gabim tjetër nga ai i një shfletuesi që refuzon të provojë, dhe kërkon një rregullim tjetër.
Hapi 3: shfletuesi vendos nëse do të provojë fare IPv6
Chromium nuk përdor çdo regjistrim AAAA që merr. Zgjidhësi i hosteve mbart kontrolle të arritshmërisë IPv6 dhe filtrim kandidatësh që mund të hedhin poshtë ose të ulin përparësinë e IPv6 kur rrjeti gjykohet i pavarur për ta mbajtur, dhe kodi burimor i zgjidhësit e tregon atë provë bashkë me kushtet përreth. Logjika varet nga versioni dhe flamujt, dhe pikërisht për këtë dy telefona në të njëjtin tunel mund të sillen ndryshe. Pasi ekzistojnë kandidatë, Happy Eyeballs i vë familjet në garë për çdo lidhje, kështu që një rrugë IPv6 që përgjigjet ngadalë mund të humbasë ende ndaj IPv4 që përgjigjet shpejt.
Vëzhgoni vendimin në vend që ta nxirrni. Një sesion i regjistruar përmes chrome://net-export dhe i riprodhuar në shikuesin netlog tregon çdo zgjidhje dhe familjen e zgjedhur; chrome://net-internals/#dns tregon rezultatet e ruajtura në cache. Një zgjidhje që kthen vetëm regjistrime A për një emër që ka AAAA në zgjidhësin tuaj tregon drejtpërdrejt këtë fazë.
Hapi 4: verifikoni që një paketë mund të bëjë udhëtimin vajtje-ardhje
Zgjedhja e adresës nuk është dorëzim. Android mban tabela rrugëtimi dhe rregulla politike për çdo rrjet që zgjedhin një tabelë sipas fwmark, kështu që një rrugë e dukshme në tabelën kryesore nuk është automatikisht ajo që përdor një socket. Leximi i rregullave dhe kërkimi nga kerneli të zgjidhë një destinacion për një adresë burimore i ndan të dyja.
adb shell ip -6 rule show
adb shell ip -6 route get fd00:61::20 from fd00:61::10
Është dalja e route get ajo që i përgjigjet pyetjes. Nëse emërton tun0 dhe paketat vazhdojnë të vdesin, kaloni te MTU-ja e tunelit dhe te përcjellja IPv6 e portës, jo përsëri te telefoni.
Pse shtimi i ::/0 zakonisht e përkeqëson gjendjen
Shtimi i ::/0 e ndryshon pretendimin e tunelit nga një prefiks në çdo destinacion IPv6. Në telefon kjo mund të plotësojë një provë arritshmërie, sepse një adresë testuese jashtë prefiksit tuaj tani duket e rrugëtueshme. Nuk krijon kapacitet IPv6 në rrjedhën e sipërme te porta, dhe shumë porta shtëpiake nuk kanë fare lidhje IPv6 të sipërme që funksionon. Rezultati është një vrimë e zezë për IPv6 publik: emrat që dikur binin përsëri në IPv4 tani varen, dhe faqja private mund të duket më mirë vetëm sepse prova mat diçka tjetër.
Ka edhe një kosto politike. Me ::/0 në tunel, i gjithë trafiku IPv6 del përmes VPN-së, përfshirë trafikun që pronari i rrjetit nuk ka pranuar kurrë ta mbajë. Trajtojeni si vendim vendosjeje me një pronar të emërtuar, jo si një hap korrigjimi që merret në orën 1 të mëngjesit.
Rendi i punës që e përfundon këtë
Konfirmoni se përgjigja AAAA vjen nga zgjidhësi që mban zonën, lexoni gjendjen e VpnService dhe netd për ndërfaqen tun, merrni një gjurmë net-export për të parë nëse Chromium e hodhi poshtë kandidatin, dhe më pas provoni udhëtimin vajtje-ardhje me ip -6 route get. Rregulloni shtresën që dështoi vërtet dhe lëreni politikën e ndarjes në qetësi. Nëse emrat privatë kanë nevojë për përgjigje të ndryshme nga ata publikë, për këtë shërben split tunneling.
Shënoni build-in e telefonit, versionin e shfletuesit dhe zgjidhësin që pyetët. Këto tri fakte e kthejnë "IPv6 is broken" në diçka që personi tjetër mund ta riprodhojë.