OpenVPN to’liq tunnel SSH sessiyangizni uzadi: qaytish yo’lini tuzating
Standart marshrut SSH javoblarini tunnelga yuboradi. Peer ni mahkamlang, redirect-gateway ni filtrlang yoki mashinani yo’qotishdan oldin manba bo’yicha marshrutlang.
SSH orqali ulanadigan mashinada to’liq tunnelli OpenVPN mijozini yoqish sessiyani bir soniya ichida uzishi mumkin, va mashina hech qanday xato qilmayapti. Tunnel paketlarning serverga qanday yetib borishini o’zgartirmaydi; javoblarning qanday chiqishini o’zgartiradi. Standart marshrut tun0 ga ishora qilishi bilan, SSH mijozingizga javob provayder tarmog’iga kirib ketadi, u tarmoqning sizning manzilingizga qaytish marshruti yo’q. Ulanish osilib qoladi, keyingi urinish vaqt tugashi bilan yakunlanadi, va demon butun vaqt davomida 22-portda tinglaydi.
VPN jurnalini o’qishdan oldin marshrutlash jadvalini o’qing. Jurnal tunnel ko’tarilganini aytadi va u haq. Savol har bir javob qaysi interfeysga berilishida, va bu tunnel hozir qayta yozgan jadval bo’yicha har bir paket uchun qidiruv.
Javob nima uchun noto’g’ri eshikdan chiqadi
Kiruvchi paketlar hali ham jismoniy interfeysga keladi, chunki VPN mijozi internetning serveringizning ommaviy manziliga qanday yetib borishini o’zgartira olmaydi. Javoblar alohida qaror: har bir paket uchun yadro manzilni qidiradi, va --redirect-gateway dan keyin standart yozuv tunnel deydi. Provayderning chiqishi o’zi xizmat qilmaydigan manzilni ko’rib paketni tashlab yuboradi.
OpenVPN ning o’z himoyasi aynan bitta manzilni qoplaydi. 2.6 qo’llanmasi --redirect-gateway ni ketma-ketlik sifatida tushuntiradi: tunnelgacha ishlatilgan shlyuz orqali VPN peer uchun xost marshruti qo’shadi, shunda shifrlangan trafik o’ziga qaytib kira olmaydi, so’ng standart marshrutni almashtiradi. Bu xost marshruti faqat peer uchun. Sizning SSH mijozingiz shunchaki boshqa internet manzili va hech qanday istisno olmaydi.
Bitta prefiks xatosini erta istisno qilish arziydi. Uzunliksiz ip route add -net 0.0.0.0 gw 10.8.0.1 dev tun0 faqat bitta 0.0.0.0 manziliga mos keladi, internetga emas; u 0.0.0.0/0 bo’lishi kerak. Va agar standartni olish tunnelning o’z transportini buzsa, oxirgi nuqtani jismoniy interfeys orqali xost marshruti sifatida qo’shing, provayderning haqiqiy manzilidan foydalanib.
Darhol tuzatish uchun SSH mijoz manzilini mahkamlang
Eng tez tuzatish — tunnel paydo bo’lishidan oldin server ishlatgan shlyuz orqali mijoz manzilingiz uchun xost marshruti. O’z tomoningizdan server ko’radigan manzilni toping, so’ng eski shlyuzni bilish uchun server jadvalini o’qing:
curl -s https://ifconfig.co
ip route
Serverda mijoz boshlanishidan oldin istisno qo’shing. Bu yerdagi manzillar — joy egallovchilar; shakl muhim:
sudo ip route add 80.128.240.55 via 192.168.178.1
Bu xabar qilingan holatda ishlatilgan tuzatish va u darhol ishlaydi. U ikki oldindan aytish mumkin bo’lgan jihatdan ham nozik: marshrut qayta yuklashda yo’qoladi, va ISP sizga boshqa manzil bergan lahzada u xato bo’lib qoladi. Uni favqulodda chora deb qabul qiling va ataylab doimiy qilib qo’ying, tarmoq birligi yoki dispatcher ilgagi orqali, yoki vaqtinchalik ekanini tan olib, tiklanish yo’lini yozib qo’ying.
Mijoz standart marshrutni olishiga yo’l qo’ymang
Tozaroq variant — tunnel standart marshrutni umuman almashtira olmasin. route-nopull, --client yoki --pull bilan ishlatilganda, marshrutlar, block-outside-dns va DNS serverlari kabi DHCP uslubidagi variantlardan tashqari itarilgan variantlarni qabul qiladi, shuning uchun faqat kerakli prefikslarni qo’shasiz. Torroq vosita — tortish filtri, u bitta muammoli ko’rsatmani tashlab, qolganini saqlaydi:
route-nopull
pull-filter ignore "redirect-gateway"
Bittasini yoki ikkinchisini ishlating, ikkalasini emas, va nima o’zgarishini aniq biling. Tunnel orqali standart marshrut bo’lmasa, server endi provayder orqali internetni ko’zdan kechirmaydi; faqat siz aniq marshrutlagan narsaga yetadi. Agar to’liq tunnel butun sozlashning maqsadi bo’lsa, bu noto’g’ri tutqich va yuqoridagi xost marshruti to’g’ri.
Qaytish yo’lini manba yoki ulanish bo’yicha ajrating
Kiruvchi manzil barqaror bo’lsa, manba qoidasi tunnelning o’z marshrutlariga tegmasdan javoblarni mahalliy ushlab turadi. Jismoniy interfeys manziliga LAN prefiksi va jismoniy standartni o’z ichiga olgan alohida jadval bering, so’ng undan keladigan trafik uchun shu jadvalni tanlang:
ip rule add from 192.168.1.11 table 128
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1
Bu ishlaydi, chunki kiruvchi SSH ulanishiga javoblar mijoz ulangan manzildan chiqadi. Har bir kiruvchi xizmat ishlashda davom etishi kerak bo’lgan xabar qilingan holat aynan shu shaklni ishlatgan. Kiruvchi manzil suzib yursa yoki yo’l dinamik bo’lsa, o’rniga ulanishni belgilang: jismoniy interfeysdan keladigan birinchi paketga conntrack belgisi qo’ying, uni OUTPUT da javob paketlariga ko’chiring, va belgilangan paketlarni jismoniy shlyuzga ishora qiladigan jadval orqali marshrutlang.
iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
ip route add default via 192.168.1.1 dev eth0 table 3412
ip rule add fwmark 4321 table 3412
Sinov paytida ulanish belgisi, firewall belgisi va jadval raqamini alohida saqlang. Bitta raqamni ikki rol uchun qayta ishlatish to’g’ri ko’rinadigan va noto’g’ri paketlarga tushadigan qoida yaratadi. Jadvalning standart yozuviga oddiy Ethernet ulanishida LAN shlyuzi bilan via ham kerak; yalang’och dev eth0 faqat interfeys nuqta-nuqta bo’lganda yoki keyingi sakrash boshqa yo’l bilan hal bo’lganda ishlaydi. Xabar qilingan Jessie xosti tasodifan yalang’och shakl ishlagan ulanishda edi, va bu ko’chirish kerak bo’lgan tarqatish qoidasi emas.
O’zingizni tashqarida qulflamay tekshiring
Uzish orqali sinamang. Birinchi sessiyani ochiq qoldiring, tunnelni ko’taring, va yadrodan o’z manzilingiz qaysi yo’lni olishini so’rang:
ip route get 80.128.240.55
Javob tunnelni emas, jismoniy interfeys va eski shlyuzni aytishi kerak. So’ng ikkinchi SSH ulanishini oching; bu haqiqiy sinov, chunki eski sessiya yangi ulanish qayta hosil qila olmaydigan holatda yashab qolishi mumkin. Ikkinchisi osilib, birinchisi hali javob berayotgan bo’lsa, qoida hech qachon muhim trafikka tushmagan, va belgilar yoki manba manzilga qarash kerak.
Butun mashq davomida tarmoqli tashqari konsolni qo’l ostida saqlang. Yagona kirish yo’li siz hozir buzgan tunnel bo’lgan serverni o’sha tunnel orqali tuzatib bo’lmaydi, va qo’shgan jadval raqamlaringiz va prefikslaringizni yozib qo’ysangiz, orqaga qaytarish ham osonroq.