Android OpenVPN tunnel manzilisiz marshrut qo'shmaydi
Android OpenVPN mijozlari telefonda tunnel manzili bo'lmaguncha marshrut qo'sha olmaydi. Kim uni tayinlashini, qaysi pull filtrlari uni tashlashini va qachon o'zingiz yozishingiz kerakligini tekshiring.
Sizning Android OpenVPN profilingiz marshrut qo'sha olmaydi, chunki telefonda virtual interfeysda manzil yo'q, shuning uchun marshrut ko'rsatadigan hech narsa yo'q. Marshrutlar faqat paketlar qayerga borishini bildiradi. Tunnel manzili tunnel ichida telefon kim ekanini bildiradi va interfeys paydo bo'lishidan oldin mijoz uni taqdim etishi kerak. Quyidagi to'rtta tekshiruvni tartib bilan bajaring va birinchi xatoda to'xtang, chunki manzil paydo bo'lmasdan turib marshrutlarni tahrirlash haqiqiy muammoni yashiradi.
Xatoni mijoz bajaradigan tartibda o'qing
Android ning VpnService.Builder ikki tushunchani alohida tutadi: addAddress() ilova qurayotgan interfeysga manzil qo'yadi, addRoute() manzil prefiksini qo'shadi va establish() kamida bitta manzil qo'shilmaguncha interfeys yaratishdan bosh tortadi. OpenVPN mijozi profil va server yuborgan parametrlarni aynan shu chaqiruvlarga moslaydi, shuning uchun manzilni hech qachon tahlil qilmaydigan ulanish interfeysni umuman qura olmaydi.
Shuning uchun siz o'qiyotgan jurnal satri marshrutni tilga olishi mumkin, asl sabab esa bir qadam oldin turadi. Mijoz marshrut bosqichiga faqat interfeys mavjud bo'lgandan keyin yetadi; manzil bo'lmasa marshrut chaqiruvi darhol muvaffaqiyatsiz bo'ladi yoki umuman ishlamaydi. Jurnal marshrut qo'shib bo'lmasligini aytsa, marshrut sintaksisidan emas, manzildan boshlang.
Tekshiruv 1: server javobga manzil qo'yadimi?
Marshrutlangan OpenVPN xizmatida manzil server hovuzidan yoki har bir mijozga tayinlashdan keladi va uning shaklini topologiya belgilaydi. OpenVPN 2.4 yoki undan yangi serverda subnet topologiyali xizmat shunday ko'rinadi:
topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccd
Bu shakl bilan server ifconfig 10.8.0.6 255.255.255.0 kabi narsani yuboradi. Eski topology net30 o'rnatmasi buning o'rniga hamkor manzilini yuboradi, masalan ifconfig 10.8.0.6 10.8.0.5, shuning uchun ikki model orasida ko'chirilgan profil to'g'ri ko'rinishi mumkin, lekin noto g'ri tarmoq niqobini olib yuradi.
Mijoz ulanish jurnalida yuborilgan parametrlar to'plamini qidiring. Agar unda ifconfig satri umuman bo'lmasa, server hech qachon manzil yubormagan yoki mijoz parametrni rad etgan. client-config-dir ishlatadigan serverda sertifikatning common name nomidagi fayl mavjud bo'lishi va tayinlashni saqlashi kerak:
# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0
Tekshiruv 2: mijoz olgan manzilni saqlaydimi?
Juda keng filtr ikkinchi keng tarqalgan sabab. pull-filter OpenVPN 2.4 va yangiroqlarida mavjud va bir nechta filtr bir parametrga mos kelsa, oxirgi mos kelgani g'olib chiqadi, shuning uchun oxiriga qo'yilgan catch-all manzilni xatosiz olib tashlaydi:
# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"
Filtrni haqiqatan qutulmoqchi bo'lgan parametrgacha toraytiring va manzilni tinch qo'ying:
# keeps the pushed address, drops one unwanted LAN route
pull-filter ignore "route 10.60.0.0"
Barcha pull ni o'chirish haqidagi maslahat odatda faqat bitta marshrutdan qutulmoqchi bo'lgan odamdan keladi. route-nopull torroq kalit: ifconfig va boshqa yuborilgan parametrlarni saqlab, yuborilgan marshrutlar va DHCP uslubidagi parametrlarni rad etadi. Haqiqatan shu kerak bo'lsa ishlating, manzil masalasini esa alohida hal qiling.
Tekshiruv 3: manzilni o'zingiz yozishingiz kerakmi?
Manzilni qo'lda kiritish operator sizga qiymat berganida gina o'rinli. Agar o'zingiz yozsangiz, u VPN mijozining subnetidan bo'lishi, faol sessiyalar orasida yagona bo'lishi va server ishlatadigan topologiyaga mos kelishi kerak. Ishlab chiqarish stolining ko'prigi yoki uzoq LAN dagi xost manzilini ko'chirish ikki jihatdan ham noto g'ri: telefon boshqa joyda allaqachon mavjud manzilni talab qiladi va shlyuzga unga qaytish yo'li bo'lmaydi.
Marshrutdagi uzoq LAN prefiksi manzil, hech qachon telefonning shaxsi emas. 10.60.0.0/24 uchun marshrut o'tarmoqqa tunnel orqali yetishni aytadi; telefon qaysi 10.60.0.x manzilini olishi kerakligini aytmaydi va telefon ulardan hech birini olmasligi kerak. Statik tayinlashlar dinamik hovuz bilan to'qnasholmaydigan server tomoniga tegishli.
Bitta shaxsda ikkita sessiya xuddi shu to'qnashuvni ochib beradi. Agar bir sertifikat ikki marta ulanib, server ikkalasiga bitta qat iy manzil yuborsa, ikkinchi sessiya birinchisini takrorlaydi va yechim mijoz tomonidagi tahrir emas, alohida shaxslar yoki alohida tayinlashlardir.
Tekshiruv 4: tunnel o'rnini boshqa narsa egallab turibdimi?
Android bir vaqtda faqat bitta faol VPN xizmatiga ruxsat beradi. Boshqa VPN ilovasi yoki endi ishlamaydigan profil uchun yoqilgan holda qoldirilgan doimiy VPN yozuvi sizning OpenVPN mijozi establish() ni chaqirishidan oldin o'shu o'rinni egallashi mumkin. Shunda profil to'g'ri bo'lsa ham interfeys hech qachon ko'rinmaydi, shuning uchun boshqa VPN ni uzing, doimiy yoqilgan sozlamani o'chiring va profilga tegishdan oldin qayta ulanib oling.
Ethernet ko'prigini talab qiladigan xizmat boshqa boshi berk yo'l. root siz Android ilova IP tunnel yaratishi mumkin, ko'prilan gan Ethernet segmentini emas, shuning uchun yozgan hech qanday manzilingiz dev tap serverini ishga tushirmaydi; operator marshrutlangan xizmatni taklif qilishi kerak. Muammo haqida xabar berishda mijoz nomi va versiyasini, yuborilgan parametrlar to'plamini, topologiyani va manzil paydo bo'lishi kerak bo'lgan aniq qadamni kiriting.
Agar to'rtta tekshiruv ham o'tsa va manzil mavjud, yagona va to'g'ri niqoblangan bo'lsa, marshrut savoli odatdagi savolga aylanadi: server qaysi prefikslarga ruxsat beradi va mijoz ularni qanday cheklashi kerak. Boshqa narsani o'zgartirishdan oldin tunnel manzilini, uning tarmoq niqobini va topologiyani yozib oling, chunki operator server ko'rinishi bilan solishtirishi kerak bo'lgan uchta qiymat aynan shular.