Nima uchun to‘liq tunnel marshruti uni ko‘tarib yuruvchi serverni uzib qo‘yadi
Tunnel orqali o‘tadigan standart marshrut uni ko‘tarib yuruvchi tashqi paketlarni ham tutib oladi. Oxirgi nuqtani host marshruti bilan mahkamlang va server javoblarini undan tashqarida saqlang.
To‘liq tunneleni yoqing va endi har bir manzil VPN interfeysiga tegishli, uni tugatuvchi mashina ham. Tunnelni ko‘tarib yuruvchi tashqi paketlar o‘sha mashinaga yo‘naltirilgan, shuning uchun marshrut oxir-oqibat o‘zi bog‘liq bo‘lgan transportni yeb qo‘yadi. Bitta qo‘shimcha aniq marshrut buni hal qiladi va sababini tushunishga arziydi. Bu sababsiz keyingi qayta qurish xuddi shu xatoni qaytaradi.
O‘z transportini yeb qo‘yadigan marshrut
Inkapsulyatsiya har bir paketni ikkinchi sarlavhaga o‘raydi. Tashqi sarlavha mahalliy jismoniy manzildan serverning ommaviy manziliga yo‘naltiriladi va har qanday tunnel paydo bo‘lishidan oldin jismoniy bog‘lanishdan o‘tishi kerak.
Endi o‘sha ommaviy manzil uchun qidiruv tunnelni tanlasin. Paketni yuborish uchun mashina uni inkapsulyatsiya qilishi kerak, bu esa xuddi shu manzilga marshrut talab qiladi va u tunnelni qaytaradi. Mijozlar buni ikki yo‘ldan biri bilan hal qiladi. Ehtiyotkori standart marshrutni o‘rnatishdan bosh tortadi va xato haqida xabar beradi, ehtiyotsizi esa muvaffaqiyat haqida xabar berib, keyin hech narsani siljitmaydi. Jim muvaffaqiyatsizlik yarim kunni yeb qo‘yadigan narsadir.
Eng uzun prefiks mosligi har qanday metrikaga qarashdan oldin qidiruvni hal qiladi, shuning uchun bitta manzilli marshrut mashinadagi har bir standart marshrutdan ustun turadi. Tuzatish orqasidagi butun mexanizm shu.
Standartdan oldin istisnoni o‘rnating
Server uchun bitta manzilli marshrut yarating, jismoniy shlyuzni keyingi sakrash sifatida olib, standart marshrut siljishidan oldin. Tartib muhim: keyin o‘rnatish yozayotganingizda buzilgan tunnel bilan yashash demakdir.
Aksariyat mijozlar buni so‘ramasdan qiladi. OpenVPN masofadagi manzilni qidiradi va standart shlyuzni qayta yozishdan oldin uni mahkamlaydi, route-delay opsiyasi esa bu ketma-ketlik poygaga tushadigan platformalar uchun mavjud. wg-quick butunlay boshqa yo‘l tutadi, paketlarni belgilab va siyosat qoidasiga murojaat qilib istisno qo‘shish o‘rniga. Turli mexanizmlar, bir talab: tashqi paket o‘zi yaratgan tunneldan qochishi kerak.
ip route add 203.0.113.10/32 via 192.168.1.1 dev eth0
ip route get 203.0.113.10
Qidiruv chiqishi qabul sinovidir. U jismoniy qurilma va jismoniy keyingi sakrashni nomlashi kerak. O‘sha javobda tunnel qurilmasi bo‘lishi istisno yo‘qligini yoki uni bosib ketadigan narsadan keyin qo‘yilganini bildiradi.
Serverdagi oyna aksi
Xuddi shu tuzoq narigi tomonda teskari holda kutadi. Serverga boshqa tunnel orqali standart marshrut bering yoki mijozlarning ommaviy manzillarini qoplaydigan marshrutni unga surib yuboring, uning javoblari noto‘g‘ri yo‘nalish odatini oladi.
Ulanib so‘rov yuboradigan mijozni tasavvur qiling. Javob o‘sha mijozning ommaviy manziliga yo‘naltirilgan, u endi tunnel marshrutiga mos keladi, shuning uchun u boshqa interfeysdan chiqib, mijoz hech qachon terilmagan manbani olib yuradi. Mijoz bu paketni qabul qilib, baribir tashlab yuborishi mumkin, chunki uni yuborgan so‘rov bilan hech narsa bog‘lamaydi. Mijozning kutish muddatidan emas, serverning marshrutlash qaroridan boshlang, chunki ikkisidan faqat bittasi haqiqiy tanlovni ko‘rsatadi.
ip route get 198.51.100.44 from 10.90.0.1
ip rule show
sudo tcpdump -ni any host 198.51.100.44
Uchta tuzatish bor va ular teng emas. Xizmatni jismoniy manzilga mahkamlash yoki manbani tarjima qilish ikkalasi ham marshrutlash qarorini tuzatish o‘rniga yashiradi. Tunnel hovuzi uchun javob trafigini alohida jadval orqali yuborish sababni tuzatadi, qolgan ikkitasi esa marshrutlash dizayni muzlatilgan holda bo‘lsagina maqbuldir.
Tunnel doim o‘g‘irlaydigan istisnolar
Bir necha ish tunnel standart marshrutga ega bo‘lganda ham ochiq internetga muhtoj, va har biriga o‘z istisnosi kerak. Dinamik DNS yangilagichi odatda birinchi bo‘lib buziladi.
U provayderni hal qiladi, ulanish ochadi va o‘z paketlari bir necha soniya oldin manzili o‘zgargan tunnel orqali ketayotganini ko‘radi, shuning uchun yangilanish muvaffaqiyatsiz bo‘ladi yoki noto‘g‘ri manzilni e’lon qiladi. Uchta chiqish yo‘li: provayderni jismoniy shlyuz orqali host marshruti bilan mahkamlang, yangilanishni tunnel ko‘tarilishidan oldin ishga tushiring yoki yangilagichga tunnel hech qachon tegmaydigan siyosat jadvalini bering. Vaqt sinxronizatsiyasi hal qiluvchisiz yuklanadigan qurilmada xuddi shunday ta’sirga ega, va sertifikat tekshirish oxirgi nuqtalari ham xuddi shu sabab bilan ro‘yxatda.
Hech kim yozmagan istisno — keyingi qayta qurish jim tashlab ketadigan istisno.
Buni qayta ulangandan keyin isbotlang, oldin emas
Bitta emas, uchta manzilni sinab ko‘ring: oxirgi nuqta, tunnel orqasidagi xususiy manzil va undan naridagi ommaviy manzil. Bitta muvaffaqiyatli qidiruv qolgan ikkitasi haqida deyarli hech narsa demaydi.
ip route get 203.0.113.10
traceroute -n 203.0.113.10
ip route get 10.90.0.5
ip route get 1.1.1.1
Keyin ulanishni qayta ishga tushiring, chunki qayta ulanishda jadvalini qayta quradigan mijoz qo‘lda terilgan marshrutni tashlab yuboradi. Kill switch ishlayotgan bo‘lsa, oxirgi nuqtaga ruxsat borligini tekshiring, aks holda tarmoq o‘zgarganidan keyin tunnel qaytib kela olmaydi va alomat uzilishga o‘xshaydi. Istisnoni shell tarixida emas, profilda yoki unit faylida saqlang, qayta ulanish uni o‘chirish o‘rniga qayta yaratadi.