VPN yoqilgan, xususiy veb-interfeys noutbukdan IPv6 orqali javob beryapti, Android telefon esa o'sha sahifani hali ham IPv4 orqali ochadi yoki uni umuman yuklashdan bosh tortadi. AAAA yozuvi mavjud. Tunnel IPv6 manzilini bildiradi. Mijozda hech narsa noto'g'ri ko'rinmaydi. Natijani to'rt alohida qaror belgilaydi: qaysi hal qiluvchi javob berdi, VpnService Android'ga nima e'lon qildi, brauzer qaysi manzillar oilasini sinashga tayyor edi va paket borib-kela oladimi. Standart marshrut qo'shib, alomat ko'chadi deb umid qilish o'rniga ularni shu tartibda ko'rib chiqing.

1-qadam: AAAA so'roviga qaysi hal qiluvchi javob berganini isbotlang

Android'da bitta DNS yo'li yo'q. VPN o'z tarmog'i uchun DNS serverini itarishi mumkin, tizim mos deb hisoblagan xost nomlari uchun Private DNS ishlatishi mumkin, Chrome esa chrome://settings/security manzilidan o'zining shifrlangan hal qiluvchisini ishga tushirishi mumkin. Tunnel 10.61.0.1 ni itaradigan, lekin Private DNS ommaviy provayderga ishora qiladigan telefonda xususiy zonangizdagi nomni o'sha zonaga ega mashina hal qilmaydi. Brauzer o'sha nom ustida vakolati bo'lmagan hal qiluvchidan javob oladi va uni yo'q deb hisoblaydi, xato matnida esa DNS hech qachon tilga olinmaydi.

Boshqa narsani o'zgartirishdan oldin tunnelning hal qiluvchisidan to'g'ridan-to'g'ri so'rang. Birinchi ikki buyruq Android faol tarmoqqa qaysi DNS serverlarini ulaganini va Private DNS avtomatik yoki qat'iy rejimda ekanini ko'rsatadi; uchinchisi telefondan emas, tunnel ichidagi istalgan mijozdan ishga tushiriladi.

adb shell dumpsys connectivity | grep -A3 "DnsAddresses"
adb shell settings get global private_dns_mode
nslookup -type=AAAA nas.lan 10.61.0.1

2-qadam: VpnService aslida nima e'lon qilganini o'qing

Android tomoni taxminiy emas, aniq. VpnService.Builder addAddress bilan manzillarni, addRoute bilan marshrutlarni, addDnsServer bilan DNS serverlarini qo'shadi va allowFamily bilan butun tunnelni bitta manzillar oilasi bilan cheklashi mumkin. allowFamily(AF_INET) ni chaqirib, keyin IPv6 marshrutini qo'shgan quruvchi tizimga ikkita qarama-qarshi narsani aytgan, tizim esa oila cheklovini saqlab qoladi. fd00:61::/64 ni qamrab oluvchi marshrut boshqa prefiksdagi interfeys manzili bilan birga bo'lsa, xuddi shu sababga ko'ra ishlamaydi: manzil bor, lekin u o'sha marshrut uchun on-link emas.

Ilovadagi almashtirgichga ishonish o'rniga deklaratsiyani o'qing. dumpsys netd tun interfeysiga ulangan manzillar va marshrutlarni chop etadi, dumpsys connectivity ichidagi har bir tarmoq bo'yicha LinkProperties esa DNS ro'yxatini tarmoq da'vo qilgan oilalar yonida ko'rsatadi.

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"

Agar tun interfeysida IPv6 manzili bo'lsa, lekin xizmat prefiksiga mos marshrut bo'lmasa, brauzer ishtirok etmasdan turib IPv6 yetkazilishi allaqachon buzilgan. Bu sinashdan bosh tortgan brauzerdan boshqa xato va boshqa tuzatishni talab qiladi.

3-qadam: IPv6 ni sinab ko'rish-ko'rmaslikni brauzer hal qiladi

Chromium olgan har bir AAAA yozuvini ishlatmaydi. Uning xost hal qiluvchisi IPv6 yetib borish tekshiruvlari va nomzodlarni filtrlashni olib yuradi, ular tarmoq uni ko'tarishga qodir emas deb baholanganda IPv6 ni tashlab yuborishi yoki ustuvorligini pasaytirishi mumkin, va hal qiluvchining manba kodi o'sha tekshiruvni atrofidagi shartlar bilan ko'rsatadi. Mantiq versiya va bayroqlarga bog'liq, shuning uchun bir tunnelda ikki telefon boshqacha yo'l tutishi mumkin. Nomzodlar paydo bo'lgach, Happy Eyeballs har bir ulanish uchun oilalarni poygaga soladi, shuning uchun sekin javob beruvchi IPv6 yo'li tez javob beruvchi IPv4 ga baribir yutqazishi mumkin.

Qarorni taxmin qilish o'rniga kuzating. chrome://net-export orqali yozib olingan va netlog ko'ruvchisida qayta ijro etilgan sessiya har bir hal qilish va tanlangan oilani ko'rsatadi; chrome://net-internals/#dns keshlangan natijalarni ko'rsatadi. O'z hal qiluvchingizda AAAA bo'lgan nom uchun faqat A yozuvlarini qaytaradigan hal qilish bevosita shu bosqichga ishora qiladi.

4-qadam: paket borib-kela olishini tekshiring

Manzil tanlash — yetkazish emas. Android har bir tarmoq bo'yicha marshrutlash jadvallari va jadvalni fwmark bo'yicha tanlaydigan siyosat qoidalarini saqlaydi, shuning uchun asosiy jadvalda ko'rinadigan marshrut soket ishlatadigan marshrut bo'lishi shart emas. Qoidalarni o'qish va yadrodan manba manzili uchun manzilni hal qilishni so'rash bu ikkisini ajratadi.

adb shell ip -6 rule show
adb shell ip -6 route get fd00:61::20 from fd00:61::10

Savolga route get chiqishi javob beradi. Agar u tun0 deb ko'rsatsa va paketlar hali ham o'layotgan bo'lsa, telefonga qaytish o'rniga tunnel MTU siga va shlyuzning IPv6 yo'naltirilishiga o'ting.

::/0 qo'shish nega odatda ahvolni yomonlashtiradi

::/0 qo'shish tunnel da'vosini bitta prefiksdan har bir IPv6 manzilga o'zgartiradi. Telefonda bu yetib borish tekshiruvini qondirishi mumkin, chunki prefiksingizdan tashqaridagi sinov manzili endi marshrutlanadigan ko'rinadi. Ammo bu shlyuzda IPv6 ning yuqori oqim sig'imini yaratmaydi, va ko'plab uy shlyuzlarida ishlaydigan IPv6 yuqori kanali umuman yo'q. Natija ommaviy IPv6 uchun qora tuynuk: ilgari IPv4 ga tushadigan nomlar endi osilib qoladi, xususiy sahifa esa faqat tekshiruv boshqa narsani o'lchagani uchun yaxshiroq ko'rinishi mumkin.

Siyosat narxi ham bor. Tunnelda ::/0 bo'lsa, butun IPv6 trafigi VPN orqali chiqadi, jumladan tarmoq egasi ko'tarishga hech qachon rozi bo'lmagan trafik ham. Buni nomlangan egasi bor joylashtirish qarori deb qabul qiling, tunda soat 1 da qabul qilinadigan sozlash qadami deb emas.

Buni tugatadigan ish tartibi

AAAA javobi zona egasi bo'lgan hal qiluvchidan kelishini tasdiqlang, tun interfeysi uchun VpnService va netd holatini o'qing, Chromium nomzodni tashlab yubordimi-yo'qmi ko'rish uchun net-export izini oling, so'ngra ip -6 route get bilan borib-kelishni sinang. Haqiqatan muvaffaqiyatsiz bo'lgan qatlamni tuzating va bo'lish siyosatiga tegmang. Xususiy nomlarga ommaviy nomlardan boshqacha javob kerak bo'lsa, split tunneling aynan shu uchun.

Telefonning build'i, brauzer versiyasi va siz so'ragan hal qiluvchini yozib qo'ying. Bu uch fakt "IPv6 is broken" iborasini keyingi odam takrorlay oladigan narsaga aylantiradi.

O'xshash maqolalar