Ikki A yozuvi, bitta manzil, bitta demon: foydalanuvchi qaysi nomni yozsa ham, keladigan paket bir xil, 1194 portiga bog‘langan jarayonda esa ikkalasini ajratish uchun hech narsa yo‘q. Bu tuzatishni kutayotgan noto‘g‘ri konfiguratsiya emas; bu nom qidiruvi ifodalashi mumkin bo‘lgan chegara. Ikki OpenVPN nusxasi orasidan tanlaydigan har qanday narsa mijoz ulanishga qo‘yadigan va old tomon qayta o‘qiy oladigan qiymat bo‘lishi kerak, oddiy OpenVPN mijozi esa bunday qiymatni ochiq qo‘ymaydi. Keyingi qism bu sizni qayerda qoldirishini va qaysi tuzilmalar trafikni haqiqatan ajratishini ko‘rsatadi.

Hal qiluvchi qaytaradigan narsadan boshlang

Mijoz vpn-a.example so‘raydi va manzil oladi; o‘sha manzil va port uning butun ulanish manzilidir. Nom qidiruv paytida mahalliy ravishda sarflanadi va hech qachon simdagi maydonga aylanmaydi, shuning uchun narigi tomondagi tinglovchi qaysi yorliq ishlatilganini ko‘ra olmaydi. vpn-a.example va vpn-b.example ni bitta xostga yo‘naltiring, ikkala qidiruv ham bir xil manzilni beradi, shuning uchun demon hech qanday farq qayd etmasdan ikkala ulanishni bitta nusxaga singdiradi. Manzilga asoslangan profillar ham xuddi shu sababga ko‘ra nomga asoslanganlar kabi ishlaydi.

Bu shuningdek vasvasaga soluvchi aylanma yo‘llar oilasini yopadi: qo‘shimcha taxalluslar, bitta soketda har bir nom uchun sertifikat tanlash yoki so‘ralgan nomga bog‘langan xavfsizlik devori qoidasi. Ularning hech biri birinchi paket mijozdan chiqishidan oldin tashlab yuborilgan ma’lumot ustida ishlay olmaydi. Agar ikki server alohida qolishi kerak bo‘lsa, bo‘linish ulanishning o‘zi bilan birga yurishi kerak, ya’ni manzil, port yoki protokol belgilagan yuk maydoni.

Hisobga olinadigan yagona tanlagich paketning ichida yuradi

HTTP buni Host sarlavhasi bilan, TLS esa ClientHello ichidagi server nomi kengaytmasi bilan hal qiladi va shu tarzda bitta manzil bitta tinglovchi orqasida ko‘plab saytlarga xizmat qiladi. Ikkalasi ham ishlaydi, chunki simdagi protokol muayyan xizmatga so‘rov olib yuradi. OpenVPN haqidagi muhim fakt shuki, oraliq quti tekshiradigan qatlamda bu maydonlarning hech biri yo‘q.

Oddiy tuzilmada boshqaruv kanalini himoya qiluvchi TLS qo‘l berib ko‘rishishi tashqi sessiya o‘rnatilgandan keyin sodir bo‘ladi va uning ichida tashiladi, shuning uchun o‘sha sessiyani tugatmagan tinglovchi noaniq oqimni ko‘radi. U hali ham bu OpenVPN ekanini ayta oladi, chunki boshlang‘ich baytlardagi opkod va ramkalash taniladi, lekin server nomi, agar bo‘lsa, shifrlangan qismda o‘tiradi. Tashqi paketdan virtual xostni o‘qishni kutayotgan dizayn protokol hech qachon u yerga yozmaydigan maydonni o‘qimoqda. Bu tunnel qanday qurilganidan kelib chiqadi, aqlliroq naqsh moslashtirishi yopa oladigan bo‘shliqdan emas.

Protokol ajratgichi qayerda to‘xtaydi

sslh loyihasi hujjatlashtiradigan turdagi multipleksor bitta portda tinglaydi, boshlang‘ich baytlarni tekshiradi va ulanishni tanilgan protokolda gapiradigan backendga topshiradi. Bitta port SSH, HTTPS va OpenVPNga birga xizmat qilishi kerak bo‘lganda bu haqiqiy qiymat.

sslh har bir protokol uchun alohida zond saqlaydi va uning TLS zondi haqiqiy ClientHello ichidan server nomi yoki ALPN qiymatini chiqara oladi. Oddiy OpenVPNni tanish TLS kengaytmasini o‘qishdan boshqa tasnifdir va ikkalasi birikmaydi, chunki tinglayotgan soketga hech qachon ClientHello yubormaydigan mijoz zondni o‘qiydigan hech narsasiz qoldiradi. Shuning uchun OpenVPNga mos keladigan qoida “bu OpenVPN mijozi” deb javob beradi va nariga o‘tmaydi. O‘sha qoida orqasidagi ikki OpenVPN backendni ajratib bo‘lmaydi, old tomonda tanlov uchun asos yo‘q va har bir sessiya bir joyga qo‘nadi. Multiplekslash bitta portni turli xizmatlar o‘rtasida bo‘ladi; u bitta xizmat ichida virtual xosting qilmaydi.

Ikki serverni haqiqatan ajratadigan tuzilmalar

Eng arzon halol bo‘linish ikkinchi ommaviy manzildir, har bir nusxa uchun bittadan, mavjud profillar esa kerakli narsani allaqachon olib yuradi, chunki ular turli manzillarga ishora qiladi. Keyingisi xuddi shu manzildagi boshqa port bo‘lib, u har bir profilda bitta raqamdan boshqa hech narsa sarflamaydi. TCP va UDP alohida port jadvallarini saqlaydi, shuning uchun 1194/tcp va 1194/udp bog‘lanmagan soketlardir va har biridan bittasi bitta xostda birga bo‘lishi mumkin; bu nom bo‘yicha marshrutlash emas, transport ajratilishi va ko‘pincha u bilan chalkashtiriladi. Ikkala variant ham xavfsizlik devori ko‘rigidan o‘tadi, chunki qoida paketda haqiqatan bor narsaga mos keladi.

Agar sizga kerakli chegara ikki tatbiqot o‘rtasida emas, foydalanuvchilar guruhlari o‘rtasida o‘tsa, uni turli mijoz konfiguratsiyalari, o‘z sertifikat ishlovi va aniq kirish siyosati bo‘lgan bitta nusxa qoplashi mumkin. Bu server ichidagi siyosatni sotib oladi, serverlar o‘rtasidagi izolyatsiyani emas va bular turli talablar. Buzilish sharoitida turishi kerak bo‘lgan izolyatsiya hali ham manzilga yoki xavfsizlik devori chetiga muhtoj.

OpenVPN oldiga qo‘yilgan TLS yakunlagichi qobiliyatli old tomonga haqiqiy server nomini ochib berishi mumkin, lekin mijoz tomoni ham o‘sha qo‘shimcha qatlam uchun sozlangan bo‘lsagina. Mavjud profillar faqat bir xil manzilga ishora qilish bilan bu xatti-harakatni olmaydi.

Qurishdan oldin tanlagichni isbotlang

Backendni aniqlaydigan maydonni nomlang, so‘ngra mijoz uni haqiqatan yuborishini tasdiqlang; javob manzil bo‘lsa reja turadi, agar u tinglovchiga hech qachon yetib bormaydigan qo‘l berib ko‘rishish ichidagi server nomi bo‘lsa, hech qanday DNS ishi uni qutqarmaydi. Uch buyruq tinglovchi tomonni tez hal qiladi.

ss -lntup | grep -E ':443|:1194'
openssl s_client -connect vpn-a.example:443 -servername vpn-a.example </dev/null | head -n 20
journalctl -u openvpn-server@server-a -n 20 --no-pager

openssl satri sertifikatni faqat o‘sha manzilda biror narsa TLSni tugatadigan joyda beradi; oddiy OpenVPN tinglovchisiga qarshi u tiqilib qoladi yoki muvaffaqiyatsiz bo‘ladi va bu o‘zi tashqi qatlam nimalarni ochishiga javobdir. journal satri har bir backendda o‘qilganda qaysi nusxa sessiyani qabul qilganini ko‘rsatadi. Old tomon jurnallari nima tasniflanganini yozadi va hech qachon nima nazarda tutilganini yozmaydi, shuning uchun foydalanuvchi qayerda qo‘ngani bo‘yicha backend yagona hokim bo‘lib qoladi.

Turli serverlarga yetish uchun mo‘ljallangan ikki profil bilan yakunlang, ularni birma-bir ulang va har biri uchun backend jurnalini yozib qo‘ying. Agar ikkala sessiya ham bir journalda ko‘rinsa, tanlagich noto‘g‘ri sozlangan emas, yo‘q va tuzatish mijoz nishonga ola oladigan manzil yoki portdir. Marshrutlash qoidasini tahrirlash yordam bermaydi, chunki qoidaga hech qachon marshrutlash uchun biror narsa berilmagan. Bo‘linish haqiqiy bo‘lgach, uni profillar yoniga yozib qo‘ying, keyingi odam ikkinchi taxallus qo‘shib, undan ish kutmasin.

O'xshash maqolalar