Android VPN marshrutlash: main jadvalidan oldingi siyosat qoidalari
Android marshrutlash jadvalini har qanday manzil qidiruvidan oldin uid va belgi qoidalari bilan tanlaydi, shuning uchun main'ga qo'shilgan marshrut umuman tekshirilmasligi mumkin.
Androidda main jadvaliga qo'shilgan marshrut har bir ro'yxatda to'g'ri ko'rinadi va shunga qaramay trafikni tashimaydi. Sabab shundaki, main jadvali bir nechta variantdan biri va birinchi navbatda u so'ralmaydi. Android tarmoq xizmati marshrutlash jadvalini manzilning o'zida bo'lmagan ma'lumot bilan tanlaydigan siyosat qoidalarini quradi — ilovaning uid qiymati, paketdagi belgi, paket kelgan interfeys — va manzilni qidirish bundan keyin, o'sha qoidalar tanlagan jadvalning ichida sodir bo'ladi.
Qat'iy tartibda uchta qaror
Chiqayotgan paket uchta alohida qaror qabul qiladi. Birinchidan, siyosat qoidasi qaysi marshrutlash jadvali amal qilishini belgilaydi. Ikkinchidan, o'sha jadval ichidagi marshrut keyingi sakrash va chiqish interfeysini belgilaydi. Uchinchidan, netfilter ilgaklari paket omon qolishini, o'zgarishini yoki qayta yo'naltirilishini hal qiladi.
Tartib muhim, chunki har bir bosqich faqat o'z savoliga javob bera oladi. Paketni qabul qiladigan tarmoq devori qoidasi jadval tanlamaydi, hech bir qoida tanlamaydigan jadvalga qo'shilgan marshrut esa harakatsiz qoladi. Android VPN'lari atrofidagi chalkashlikning ko'pi uchtadan birini tuzatib, hech qanday o'zgarish ko'rmaslikdan kelib chiqadi, chunki nosozlik boshqasida edi.
| Stage | Selector | What it cannot decide |
|---|---|---|
| Policy rule | uid range, mark, incoming interface | Which route exists inside the table |
| Route lookup | Destination prefix, longest match | Whether the packet is allowed out |
| Netfilter hook | Chain position, match conditions | Which table was selected |
Belgilar qadoqlangan maydon, o'zingizga tegishli yorliq emas
Android bir nechta faktni bitta belgi qiymatiga qadoqlaydi: qaysi tarmoq tanlandi, ilova tarmoqni aniq tanladimi, soket VPN'dan himoyalanganmi va ruxsatlarga oid bitlar. AOSP'ning fwmark sarlavhasi joriy daraxt uchun o'sha joylashuvni belgilaydi, joylashuv esa versiyalar orasida o'zgaradigan platforma ichki tafsiloti.
Shuning uchun Androidda butun belgi qiymatini iptables -j MARK --set-mark bilan yozish xavfli. U teg qo'shmaydi; tizim allaqachon qilgan tarmoq tanlovini almashtiradi. Keyin paket boshqa qoidalarga mos keladi, bu qaysi bitlar qayta yozilganiga qarab VPN ishlay boshlagandek yoki aloqasiz ilova ulanishni yo'qotgandek ko'rinishi mumkin.
Agar belgilarga tegish kerak bo'lsa, avval joriy qiymatni o'qing va faqat siz tushunadigan bitlar o'zgarishi uchun maskadan foydalaning:
ip rule show
ip route show table all | head -40
ip route get 10.20.4.11Ulanish belgisi paket belgisidan alohida obyekt va ikkalasi ham marshrut emas. Javob paketlarida belgini tiklash chiqishda jadval tanlashdan alohida qadam, shuning uchun bir tomonlama tuzatishlar ochilib, keyin osilib qoladigan ulanishlarni keltirib chiqaradi.
Qoidalar va jadvallar kimga tegishli
Android tarmoq xizmati netd qoidalar va har bir tarmoq uchun jadvallarni yaratadi. AOSP RouteController VPN'lar, jismoniy tarmoqlar va uid diapazonlari uchun o'sha qoidalar yig'iladigan joy, va uning hayot tsikli konfiguratsiya fayliga emas, tarmoq hodisalariga bog'langan.
Ikkita natija kelib chiqadi. Birinchidan, bitta qurilmada topilgan ustuvorliklar va jadval raqamlari build ichki tafsilotlari, interfeys emas: boshqa Android versiyasida bir xil ko'rinadigan raqamlar butunlay boshqa ma'no berishi mumkin. Ikkinchidan, tarmoqlar o'zgarganda holat qayta quriladi, shuning uchun bugun root qobig'idan kiritilgan qoida keyingi Wi-Fi o'tishidan keyin yo'q bo'lishi mumkin.
Bu yo'qolish ko'pincha tizim marshrutni e'tiborsiz qoldirmoqda deb xabar qilinadi. Aslida jadvalni tanlagan qoida endi mavjud emas, jadval ichidagi marshrut esa paket nuqtai nazaridan yetib bo'lmaydigan bo'lib qoldi. Qayta ulangandan keyin ishlagan konfiguratsiya ishlashdan to'xtasa, marshrutlar ro'yxatini emas, qoidalar ro'yxatini tekshiring.
Ilgaklar tartibi haqidagi savollarning umumiy javobi yo'q
iptables VPN marshrutlashdan oldin ishlaydimi degan savolga paket yo'lini aytmasdan javob berib bo'lmaydi. Lokal yaratilgan paket output ilgagidan o'tadi, u yerda belgi o'zgarishi qayta marshrutlash tekshiruvini keltirib chiqaradi — bu ikkinchi qidiruv, birinchisini orqaga qarab tahrirlash emas. tether orqali ulangan mijozdan kelgan paket prerouting yo'lidan o'tadi va uning o'rniga uzatiladi, uni ko'radigan zanjirlar boshqacha.
Shunday qilib bir xil qoida ilova trafigi uchun samarali, tether trafigi uchun ko'rinmas bo'lishi mumkin, va nolda qoladigan hisoblagich paket qaysi yo'lni tanlaganini aytadi, qoida xatomi yo'qmi emas. Har qanday moslik shartini o'zgartirishdan oldin hisoblagichlar bilan yo'lni aniqlang.
Bu siyosat marshrutlash xatosi ko'rish qiyin bo'ladigan bosqich ham. Mavjud, lekin manzilni o'z ichiga olmaydigan jadvalga marshrutlash tarmoq yetib bo'lmaydi holatini beradi, bu tarmoq devori tashlab yuborishiga o'xshaydi, tarmoq devori tashlab yuborishi esa marshrutlash qora tuynugiga o'xshaydigan vaqt tugashini beradi.
Tizim ichida diagnostika qiling, yoki unga tegmang
Ruxsat etilgan tekshiruv uchun biror narsaga tegishdan oldin to'rt faktni aniqlang: ilovaning uid qiymati va profili, Android u uchun tanlagan tarmoq, VPN o'sha ilovani umuman qamrab oladimi, va muammo ikkala manzil oilasida ham bormi. Ilova bo'yicha istisno hech qanday marshrutlash nosozligisiz VPN ishlamayapti degan ko'plab xabarlarni tushuntiradi.
Keyin amalda kuchda bo'lgan qoidalar, maskalar va jadvallarni o'qing, va tarmoq almashinuvini kuzatuv oynasi ichida saqlang. Agar xatti-harakat qayta ulanish davomida o'zgarsa, siz boshqariladigan hayot tsiklini ko'ryapsiz, yo'qolgan marshrutni emas.
Oddiy talablar uchun qo'llab-quvvatlanadigan boshqaruvlardan foydalaning: ilova bo'yicha qo'shish va istisno qilish VPN ilovasida, va ma'lum yo'l talab qiladigan hamma narsa uchun platformaning o'z tarmoq tanlovi. Agar imtiyozli integratsiya haqiqatan ham marshrutlash mexanizmi bilan hamkorlik qilishi kerak bo'lsa, siz qo'llab-quvvatlaydigan aniq Android versiyasining tatbiqini nishonga oling va uning hayot tsiklini unga egalik qiluvchi komponent orqali saqlang. Platforma zanjirlarini tozalash yoki yuqori ustuvorlikdagi qoida kiritish diagnostikani ikkinchi tarmoq menejeriga aylantiradi va telefon shunga mos yo'l tutadi.