Siz domenni ruxsat roʻyxatiga qoʻshdingiz, soʻrov ilovangizga yetib boradi, moslashtiruvchi ruxsat berildi deb qaytaradi, lekin sahifa baribir hech qachon yuklanmaydi. Shu paytda koʻpchilik moslashtiruvchini qayta yozishga va joker belgili taqqoslashlar qoʻshishga kirishadi. Mening tajribamda moslashtiruvchi odatda toʻgʻri boʻladi, nosozlik esa bir qatlam pastda yotadi: siz sintez qilgan DNS javobida, siz oʻrnatgan marshrutda yoki soʻrovni uzatish uchun ishlatgan soketda. Roʻyxat — oson qismi; paket yoʻli ruxsat roʻyxatlari buziladigan joy.

Moslashtiruvchi kamdan-kam aybdor boʻladi

Avval ajratish kerak boʻlgan narsa — bloklangan va buzuq. Bloklangan nom tez va koʻrinadigan tarzda muvaffaqiyatsiz boʻlishi kerak, chunki brauzer nom yoʻqligi haqida javob olib toʻxtaydi. Buzuq nom osilib qoladi, IPv6 orqali qayta urinadi, boshqa transportga oʻtadi va sizni aylanuvchi koʻrsatkich bilan qoldiradi. Agar aylanuvchi koʻrsatkichni koʻrsangiz, ruxsat roʻyxatingiz mijoz hech narsa qila olmaydigan narsaga javob bermoqda.

Boʻsh A yozuvi klassik xato. Nol javob bilan NOERROR qaytarish haqiqiy javobga oʻxshaydi, shuning uchun stub rezolver uni qabul qiladi, brauzer qayta urinadi, AAAA ni sinaydi, boshqa rezolverni sinaydi va ancha kech taslim boʻladi. Savol boʻlimini takrorlab, tranzaksiya ID sini koʻchirib berilgan 3 javob kodi, yaʼni NXDOMAIN, suhbatni darhol tugatadi. Uni ataylab rad etadigan har bir nom uchun ishlating.

IPv6 ham standart qiymat oʻrniga xuddi shu qarorga loyiq. Agar A uchun NXDOMAIN javob berib, AAAA ni oʻtkazib yuborsangiz, mijoz bloklangan nomga IPv6 orqali yetib borishi mumkin va filtr oqib ketadi. Ayrim ilovalar bloklangan AAAA soʻrovlariga loopback manzili bilan javob beradi, shunda ulanish zaxira yoʻlga oʻtish oʻrniga darhol muvaffaqiyatsiz boʻladi. Bitta siyosat tanlang, uni ikkala yozuv turiga qoʻllang va ikkalasini ham jurnalga yozing.

Hamma narsani tutadigan marshrut hamma narsaga egalik qiladi

Faqat DNS ga asoslangan loyiha hech qachon addRoute("0.0.0.0", 0) qoʻshmaydi, shuning uchun TUN interfeysiga faqat soʻrovlar kiradi, qolgan hamma narsa ostidagi tarmoqdan foydalanishda davom etadi. Bu xavfsiz shakl, va ayrim ruxsat roʻyxatlarining Wi-Fi da ishlab, uyali tarmoqda nega muvaffaqiyatsiz boʻlishini ham shu izohlaydi.

Standart marshrut paydo boʻlgan lahzadan har bir oqim sizniki. Interfeysga kelib, na uzatiladigan, na javob oladigan TCP paketi mijozning vaqti tugaguncha navbatda turadi va jurnalga yozadigan xato yoʻq, chunki hech narsa xato boʻlmagan. Kimningdir butun tushdan keyin buzilgan ruxsat roʻyxati ustida oʻtkazganini koʻrganman, u aslida 443 porti uchun yetishmayotgan uzatgich edi. Siz tashlashga qaror qilgan har bir paketning protokoli va manzilini jurnalga yozing.

Rezolver soketi tunneldan chiqishi kerak

Uzatish — keyingi tuzoq joyi. Operator rezolverlari koʻpincha tunnel yetib bormaydigan shaxsiy manzilda yashaydi, shuning uchun uzatgan soʻrovingiz hech qayerga ketmaydi va ilova oʻqish vaqti tugaganini bildiradi. Tasdiqlangan soʻrovlarni yetib borishini biladigan rezolverga yuboring va avval oʻsha soketni VpnService.protect() ga bering. Himoyalanmagan soket soʻrovni oʻz tunnelingizga qaytaradi, u yerda yana ilovaga yetib boradi va vaqt chegarasi ishga tushguncha aylanadi.

Nosozlik tarmoq uzilishiga oʻxshab koʻrinadi, shuning uchun xato hisobotlarida shuncha uzoq yashaydi. Yuborilgan soʻrovlar va olingan javoblar uchun hisoblagichlar tuting: birinchi raqam oshib, ikkinchisi nolda qolsa, siz roʻyxatga emas, soketga qarayapsiz.

Hajm va nazorat summalari xabarsiz muvaffaqiyatsiz boʻladi

Jim tashlashlar hajmdan ham keladi. Katta javoblar toʻplamiga ega DNS javobi yoki keng opsiyali TCP qoʻl siqish siz hech qachon aniq belgilamagan yoʻl MTU sidan oshib ketishi mumkin; fragment yuqorida yoʻqoladi va mijoz kichikroq bilan qayta urinadi yoki urinishni tashlaydi. Interfeys MTU sini 1280 ga qoʻyish uyali yoʻllarning koʻpiga bardosh beradigan ehtiyotkor tanlov, va hech kim oʻlchamagan standart qiymatni meros olishdan aniq boʻlgan afzal.

Agar paketlarni oʻzingiz qursangiz, nazorat summasi boshqa jim qotil. UDP uzunligini yoki protokol maydonini tashlab ketadigan psevdo-sarlavha ustida hisoblangan UDP nazorat summasi siz tomonda toʻgʻri koʻrinadigan va qabul qiluvchi hech qanday iz qoldirmasdan tashlaydigan paket hosil qiladi. Psevdo-sarlavhangizni spetsifikatsiya bilan maydonma-maydon solishtiring va disk rastasida bitta maʼlum oqim uchun hisoblangan nazorat summasini chop eting.

VpnService siz uchun nima qilmaydi

Atrofida loyihalashdan oldin ikkita chegarani bilish foydali. Hech bir oddiy ilova Wi-Fi dan tashqarida tizimli proksi yoki PAC faylini oʻrnata olmaydi va bu qism oʻzgarmagan. Har bir ilova uchun yoʻl oʻzgardi: API 29 gacha VpnService.Builder proksini umuman koʻtara olmasdi, API 29 dan boshlab setHttpProxy(ProxyInfo.buildPacProxy(uri)) platformaga VPN tarmogʻi uchun baholash uchun PAC skriptini beradi. Eski API larni nishonga olganda yoki PAC modeli qoidani ifodalay olmasa, qoidalarni oʻz kodingizda baholang. UDP ham bepul emas: brauzerlar SOCKS proksisi orqali faqat TCP yuboradi, va aksariyat SOCKS5 mijozlari UDP ASSOCIATE ni hech qachon amalga oshirmaydi, shuning uchun proksiga asoslangan loyiha TCP sogʻlom koʻrinayotganda UDP ni tashlaydi yoki oqizadi.

Aynan shu ikkinchi chegara UDP ga asoslangan protokolning oddiy tarmoqda ishlab, VPN ingiz ulanadigan lahzada muvaffaqiyatsiz boʻlishining sababi. Agar tunnel UDP koʻtarishi kutilsa, uzatgich buning uchun uzatish yoʻlini amalga oshirishi kerak, faqat boshqa soket turidagi TCP yoʻlini emas.

Shu tartibda tekshiring

Roʻyxatni tartib bilan bajaring va muvaffaqiyatsiz boʻlgan birinchi bosqichda toʻxtang, chunki avvalgisi turmasa, har bir keyingi tekshiruv shovqin.

  1. Oʻrnatilgan marshrutlarni sanang va DNS boʻlmagan paketlar TUN interfeysiga umuman kirishini tasdiqlang.
  2. Bitta bloklangan va bitta tasdiqlangan nom uchun soʻrov nomi, qaror va javob kodini jurnalga yozing.
  3. Rezolver soketi himoyalanganini va tanlangan rezolver tunnel ichidan javob berishini tasdiqlang.
  4. Interfeys MTU si va qoʻlda qurilgan bitta javobning nazorat summasini tasdiqlang.
  5. Oʻsha sahifani Wi-Fi va uyali tarmoqda takrorlang, chunki operator rezolverlari va yoʻl MTU si farq qiladi.

Agar beshtasi ham turib, sahifa hanuz osilib qolsa, keyingi gumondor — uzatgichning oʻzi: ushlangan soʻrovni ushlangan javob bilan solishtiring va yetishmayotgan baytlar sonini yoki yarim yopiq soketni qidiring. VpnService.Builder maʼlumotnomasi marshrut, DNS va MTU shartnomalarini qamrab oladi va protect() builder opsiyasi emas, alohida VpnService chaqiruvi; ulangan interfeys faqat birinchi shartnoma bajarilganini bildiradi.

O'xshash maqolalar