Nega OpenVPN mijozi orqasidagi quyi tarmoqqa kirib bo'lmaydi?
OpenVPN qaysi mijozga uzoqdagi LAN tegishli ekanini taxmin qila olmaydi. Mijoz faylidagi iroute yozuvi, qaytish marshruti va yo'naltirish o'sha quyi tarmoqni ochiq qiladi.
Serverning tunnel manziliga pinglar o'tadi, mijozning o'z marshrut jadvali to'g'ri ko'rinadi, ammo o'sha mijoz orqasidagi LAN hali ham ochiq emas. Mijozning marshrutlash jadvali to'g'ri ko'rinadi, serverda tunnelga qarab marshrut bor, paketlar esa baribir yo'qoladi. Bu layer-3 tunnelning klassik alomati bo'lib, u mijozlaridan biri ham shlyuz ekanini bilmaydi.
tun interfeysida har bir mijoz uchun keyingi sakrash yo'q. Yadro ko'p sherikli bitta interfeysni ko'radi, shuning uchun uzoqdagi LAN uchun paketni qaysi mijoz olishi haqidagi qaror OpenVPN jarayoni ichida qabul qilinishi kerak. Bu qaror iroute bilan sozlanadi va usiz paketning boradigan joyi yo'q.
Server interfeys bo'yicha emas, mijoz bo'yicha marshrutlaydi
Server mijozning tunnel manziliga paket yuborishi kerak bo'lganda javob bir ma'noli: manzil o'sha mijozning sessiyasiga tegishli. Ammo manzil o'sha mijoz orqasidagi butun quyi tarmoq bo'lsa, manzil server biladigan hech kimga tegishli emas va yadroning tunnelga qarab marshruti faqat "shu interfeys orqali" deydi, qaysi sherik ekanini aytmaydi.
OpenVPN buni manzil prefiksini ma'lum mijozga bog'laydigan ichki marshrutlash jadvali bilan hal qiladi. Bu jadval iroute yozuvlaridan quriladi, shuning uchun server xostidagi oddiy marshrut yetarli emas. Yadro marshruti paketni tunnel interfeysiga yetkazadi; ichki bog'lash qaysi sessiya uni olishini hal qiladi. Shuning uchun ham tuzatish yadroning marshrut chiqishida hech qachon ko'rinmaydi.
Agar bog'lash bo'lmasa, paket serverga yetib boradi, tunnel marshrutiga mos keladi va hech bir mijoz manzilni talab qilmagani uchun tashlab yuboriladi. Hech narsa aniq xatoni qayd etmaydi, shuning uchun nosozlik marshrutlash halqasi emas, jim qora tuynuk kabi ko'rinadi.
Mijozni nomlaydigan iroute yozuvini yozish
iroute serverning asosiy konfiguratsiyasida emas, mijozga xos konfiguratsiya faylida yashaydi. Serverni client-config-dir opsiyasi bilan papkaga yo'naltiring, so'ng nomi mijoz sertifikatining umumiy nomi bo'lgan fayl yarating va prefiksni ichiga qo'ying.
LAN 10.20.0.0/24 bo'lgan va sertifikatning umumiy nomi branch-router bo'lgan filial uchun o'sha yo'ldagi faylda iroute 10.20.0.0 255.255.255.0 kabi satr bo'ladi. Asosiy konfiguratsiyaga faqat papka opsiyasi kerak; prefiks mijozda yashaydi.
Umumiy nom — mo'rt qism. Boshqa subject bilan berilgan sertifikat yoki foydalanuvchilarni foydalanuvchi nomi bilan autentifikatsiya qiladigan, ammo fayl sertifikat bo'yicha nomlangan o'rnatish hech qachon o'qilmaydigan fayl hosil qiladi. Server sessiya uchun haqiqatda qanday nom bildirishini tekshiring va mos kelmaydigan mijozni marshrutlarisiz jim ulanmasi o'rniga muvaffaqiyatsizlikka uchrashiga imkon beradigan opsiyani ko'rib chiqing. Faylni sertifikatga moslab qayta nomlash — juda uzoq oqshomning oldini oladigan besh daqiqalik tuzatish.
Bitta mijoz bir nechta prefiksga ega bo'lishi mumkin. Har bir tarmoq uchun bitta iroute satri qo'shing va bog'lash tekshiriladigan bo'lib qolishi uchun ro'yxatni o'sha mijozning qolgan sozlamalari yonida saqlang.
Qaytish yo'lini ikkala yo'nalishda qurish
Paketlarni uzoqdagi LANga yetkazish — ishning yarmi. Mijoz o'sha LAN trafigini ham tunnelga yuborishi kerak, bu odatda mijozga marshrutni itarib yuborish orqali amalga oshiriladi: push "route 10.8.0.0 255.255.255.0" kabi satr har bir mijozga server tomonidagi tarmoqqa qanday yetishni aytadi. Filial uchun mos marshrut server tomonida yetish kerak bo'lgan hamma narsa uchun tunnelga ishora qiladi.
Qaytish yo'nalishi uzoq tomonda egaga muhtoj. U yerda kimdir qaytish yo'lini bilishi kerak: VPN hovuzini serverga yo'naltiruvchi LAN routeridagi statik marshrut yoki trafik LANga kirishidan oldin serverda manzil tarjimasi. Statik marshrut asl manzillarni jurnallar va kirish qoidalarida ko'rinib turishini ta'minlaydi, lekin LAN egasining hamkorligini talab qiladi; tarjima o'z-o'zini ta'minlaydi, ammo kim haqiqatda ulanganini yashiradi.
Server xostida yo'naltirish yoqilgan bo'lishi kerak. Usiz yadro tunneldan paketni qabul qiladi va uni LAN interfeysiga o'tkazishdan bosh tortadi, bu mijoz nazarida yo'q iroute kabi ko'rinadi.
To'g'ri zondlar bilan yetib borishni tekshirish
Uzoq chekkaga ping yuborib taxmin qilish o'rniga qatlamlar bo'yicha sinang. Serverdan prefiks uchun ichki bog'lash borligini va yadro marshruti tunnelga ishora qilishini tekshiring. Mijozdan itarilgan marshrut o'rnatilganini va LAN manzili uchun uning standart yo'li tunnel ekanini tasdiqlang.
So'ng paketlarni kuzating. Tunnel interfeysidagi ushlash server mijoz tomon yuborayotganini ko'rsatadi, LAN interfeysidagi ushlash esa u yo'naltirayotganini ko'rsatadi. Agar birinchisi paketlarni ko'rsatib, ikkinchisi hech narsa ko'rsatmasa, muammo yo'naltirish yoki filtrda; agar ikkalasi ham hech narsa ko'rsatmasa, qidiruv avvalroq muvaffaqiyatsiz bo'lgan.
Tunnel bilan bog'langan ikki server ikki tomonda ham bir xil qoidani takrorlaydi: har biriga boshqasining hovuzi uchun iroute kerak va har biriga yo'lni simmetrik qiladigan marshrut hamda yo'naltirish kerak. Bu yerda marshrutlash va siyosat alohida masalalar. Marshrutlash paket qayerga borishini, FORWARD qoidasi esa ruxsat berilganini hal qiladi, shuning uchun ikki iroute satriga ega mijoz filtr boshqacha aytmasa ikkala prefiksga ham yeta oladi.