Bir xil server IP manzili, ikki yo'l: OpenVPN tashqi oqimini belgilash
VPN serverini ozod qiluvchi xost marshruti unga boradigan HTTPSni ham ozod qiladi. Buning o'rniga shifrlangan konvertni belgilang, so'ngra belgilanmagan trafikka tunnelni bering.
Odatiy tsikl himoyasi xost marshrutidir: VPN serverining ommaviy manziliga trafikni uplink orqali tashqariga yuboring, shunda shifrlangan sessiya hech qachon o'z tunneliga kirmaydi. Bu aynan o'sha serverdagi veb-xizmatga ham tunnel orqali yetib bormoqchi bo'lgan paytgacha ishlaydi, chunki istisno manzilga bog'langan va manzil bir xil. Chiqish yo'li — manzil bo'yicha tasniflashni to'xtatib, paketni qaysi soket yuborganiga qarab tasniflashni boshlash.
Ajratmoqchi bo'lgan ikki oqimdan boshlang
Bir oqim — uplink orqali chiqishi kerak bo'lgan shifrlangan OpenVPN transportining o'zi, aks holda tunnel o'zining tashqi ulanishini olib yurardi. Ikkinchisi — tunnel ichida bo'lishini xohlagan, bir xil ommaviy manzilga qaratilgan oddiy HTTPS so'rovi, shunda u xizmatga tunnel manbasidan yetib boradi. Bir xil manzil, ko'p hollarda bir xil port raqami, boshqa talab qilinadigan yo'l.
Bu ko'rib chiqishda 10.90.0.10 manzilidagi mijozni tun1 orqali, serverning 198.51.100.25 ommaviy manzilini va standart marshruti odatiy uplinkka qaratilgan tegilmagan asosiy jadvalni farz qiling. Server tomoni veb-xizmatni ichki yo'lda ham qabul qilishi va trafikni tunnel manbasiga qaytarishi kerak; paketni ommaviy manzilga yuborish serverning tinglovchisi yoki firewall siyosatini bekor qilmaydi.
Biror narsani o'zgartirishdan oldin xostning joriy qoidalarini yozib oling va hech kim ishlatmaydigan qiymatlarni tanlang: belgi, jadval raqami va uchta qoida ustuvorligi. Mashinaga bu ulanish orqali o'tmaydigan qaytish yo'lini saqlang, chunki bu yerdagi xato faqat brauzer varaqini buzmaydi, o'z masofaviy kirishingizni ham olib qo'yadi.
Konvertni olib yuruvchi soketni belgilang
Mijoz konfiguratsiyasi o'zining shifrlangan chiquvchi paketlari uchun belgi oladi va marshrutlarni o'zi o'rnatishni to'xtatadi, shunda yo'llarni belgilovchi yagona narsa almashtirish siyosati bo'ladi:
mark 42
route-noexec
disable-dco
O'nlik 42 — o'n oltilik 0x2a va marshrutlash qoidalari aynan o'n oltilik shaklga mos keladi. link-options havolasi markni Linuxda shifrlangan chiquvchi paketlarga tatbiq etiladigan narsa deb ta'riflaydi, ya'ni aynan yo'lini boshqarishingiz kerak bo'lgan soket. Ma'lumot kanali yukini o'chirish bu misolni foydalanuvchi maydoni yo'lida ushlab turadi, u yerda belgi xatti-harakati ta'riflanganidek bo'ladi.
route-noexec OpenVPNning avtomatik marshrut qo'shishi va olib tashlashini bostiradi. Ularning o'rniga hech narsa o'rnatmaydi, shuning uchun shu paytdan boshlab marshrut egasi tunnelga kerak bo'lgan har bir marshrutni saqlashi kerak. Agar o'zgarishdan keyin xususiy manzil yo'qolsa, bu yetishmayotgan almashtirish siyosati, belgidagi nuqson emas.
Buni qilayotganda 198.51.100.25 uchun asosiy jadvalda xost marshrutini saqlamang. Bunday marshrut loyiha toraytirmoqchi bo'lgan istisnoni qaytadan kiritadi va quyidagi siyosatlardan biri so'ralishidan oldin HTTPS oqimi uchun g'alaba qozonadi.
Qolgan hammasini tunnel jadvaliga yuboring
Tunnel interfeysi mavjud bo'lib, o'z manzilini saqlagach, siyosat shunday ko'rinadi:
ip -4 route add default dev tun1 src 10.90.0.10 table 47100
ip -4 rule add priority 20000 lookup main suppress_prefixlength 0
ip -4 rule add priority 20001 not fwmark 0x2a lookup 47100
ip -4 rule add priority 20002 not fwmark 0x2a unreachable
Birinchi qoida xostning aniq marshrutlarini ko'rinadigan holda saqlaydi, jumladan tasdiqlangan har qanday mahalliy tarmoq, shu bilan birga asosiy jadvalning standart marshrutini bu qidiruv uchun ko'rinmas qiladi. Bu farq muhim: standartni bosish jadvalni e'tiborsiz qoldirish bilan bir xil emas va sizga hali kerak bo'lgan mahalliy istisnolar aynan shu tufayli saqlanib qoladi. O'sha istisnolarni birma-bir o'qing, natija universal avariya o'chirgichi deb o'ylamang.
Belgilanmagan trafik so'ngra tunnel jadvaliga tushadi, tunnel manbasini oladi va VPN orqali chiqadi. Belgilangan trafik keyingi ikki qoidadagi fwmark sinovidan o'tmaydi va ro'yxatning pastrog'idagi odatiy asosiy qidiruvga davom etadi, u yerda uplink standarti hali ham turibdi. Yakuniy unreachable qoidasi tunnel marshruti yo'q bo'lganda belgilanmagan oqimning jimgina uplinkka qaytib tushishiga yo'l qo'ymaydigan narsadir. Selektor boshidan oxirigacha belgi va manzil hech qachon qarorga kirmaydi.
Bu himoyani ulanish uzilishlari orasida joyida saqlang va uni siyosatning qolgani bilan birga o'rnating, qo'lda emas. Interfeys bilan birga yo'qoladigan qoida siyosat emas, tasodifdir. Tunnel yiqilganda siyosatni o'chirish nosozlik rejimini “bloklangan”dan “sizib chiqqan”ga o'zgartiradi va keyinroq muddati tugaydigan eskirgan tunnel marshrutini tushuntirish noto'g'ri interfeysdan chiqqan trafikdan ancha oson.
Qaytish yo'li ham xuddi shu belgini ko'rsin
Chiquvchi belgilar mexanizmning yarmi xolos va bu ko'pchilik takror yaratmalar tashlab ketadigan qism. Shifrlangan sessiyaga javoblar uplink orqali keladi va manba kelgan yo'l bo'ylab qaytariladimi-yo'qmi deb so'raydigan qaytish yo'li tekshiruviga bo'ysunadi. Yordamsiz bu qidiruv sizning belgilanmagan tunnel siyosatingizni qo'llaydi va paket noto'g'ri interfeysda deb xulosa qiladi.
Tuzatish firewall egasiga tegishli: belgini chiquvchi ulanishda saqlang, uni mos keluvchi kiruvchi paketlarda tiklang va tegishli yo'l uchun manba bilan tasdiqlangan belgi ishlovini yoqing. OpenVPNning soket belgisini o'rnatishi bu uch narsaning hech birini qilmaydi va faqat mijoz variantlarini sanab o'tgan retsept to'liq emas. Bu integratsiyani yozma ravishda so'rang, chunki u loyihaning eng kam ko'rinadigan qismi va qayta qurishda eng oson yo'qoladigan qismidir.
Bo'sh qaytish yo'li tekshiruvi ham o'rinbosar emas. Bo'sh rejim manba uchun qandaydir marshrut mavjud bo'lishini talab qiladi va siz qo'shgan unreachable himoyasi belgilanmagan qidiruvlar uchun uni ataylab olib tashlaydi. Bu loyihaga tayanishdan oldin ulanish belgisi integratsiyasini tugating va ko'rib chiqing, xost filtrlarini esa alohida masala sifatida ko'ring: belgi marshrutlash signali, ruxsat emas. Integratsiya bo'lmasa, alomat — ulanib, javoblar kela boshlashi bilan jim bo'lib qoladigan sessiya.
Buni ikki marshrut qidiruvi bilan isbotlang
Yadro ikki kontekst uchun nima qaror qilishini solishtiring va chiqish holati o'rniga dev va src maydonlarini o'qing:
ip -4 route get 198.51.100.25
ip -4 route get 198.51.100.25 mark 0x2a
Birinchi qidiruv tunnel manbasi bilan tun1ga, ikkinchisi uplinkka hal bo'lishi kerak. Bular sintetik qidiruvlar, shuning uchun ular siyosatni isbotlaydi, ishlab turgan jarayonni emas: ishlab turgan mijozning haqiqiy tashish yo'lini alohida tasdiqlang, so'ngra sertifikat tekshiruvi yoqilgan holda haqiqiy HTTPS so'rovi qiling.
Tayyor deb e'lon qilishdan oldin loyiha nimani qamrab olmasligini yozib qo'ying. DNS, IPv6 va qoidalarning hayot tsikli har biri o'z qarorini talab qiladi va bu IPv4 marshrutlash misoli, to'liq maxfiylik konfiguratsiyasi emas. Uning qadri — selektor: konvert uplink istisnosini oladi va bir xil manzildagi oddiy xizmat uni meros olishi shart emas.