VPN mijozi xizmatiga yetib borish: teskari tunnel yoki DNAT
OpenVPN mijozidagi xizmatga port yo'naltirishsiz yetib borish: teskari SSH tunnelni server tomonidagi DNAT va tanlovni belgilovchi uchta shart bilan solishtiring.
Hatto operator NAT-ining orqasidagi noutbuk ham hamkasbga xizmat ko'rsata oladi, agar VPN server uchrashuv nuqtasi bo'lsa. U yerga ikki mexanizm yetib boradi: mijoz tashqariga ulanadi va serverdan tinglovchi portni ushlab turishni so'raydi, yoki server portni e'lon qiladi va uni tunnelga aylantiradi. Ikkisi ham bir xil yetib borish muammosini hal qiladi va nosozlik, nazorat va jurnal yuritishda turlicha yo'l tutadi. Qaysi biri sozlamangizga mos kelishini uchta shart belgilaydi.
Ikki shakl, bitta uchrashuv nuqtasi
Birinchi shaklda mijoz tashqariga SSH seans ochadi va serverdan tanlangan portda tinglashni so'raydi, har bir ulanishni o'sha seans orqali qaytaradi. Serverda hech narsa yo'naltirilmaydi va paket tarjimasi bo'lmaydi, shuning uchun yagona talablar SSH hisobi, ruxsat berilgan yo'naltirish va port uchun xavfsizlik devori qoidasi. Xizmat mijozdagi loopback-ga bog'langan holda qoladi, bu odatda siz xohlagan narsadir.
ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]
Ikkinchi shaklda ommaviy port serverga tegishli va har bir ulanishni mijoz tunnel manziliga qarab qayta yozadi. Bu IP yo'naltirish yoqilgan, kirishda manzil tarjimasi va chiqishda manba tarjimasi bo'lishini talab qiladi va SSH seansi bo'lmaganda ham ishlashda davom etadi. Port seansga emas, serverga tegishli va aynan shu xususiyat real holatlarning ko'pini hal qiladi.
Ikkala shakl ham tabiatan xavfsizroq emas. Ikkisi ham bitta xizmat portini serverning ommaviy manziliga yeta oladigan har kimga ochadi va ikkisi ham hanuz xizmatning o'z autentifikatsiyasiga bog'liq.
Birinchi shart: port seansdan uzoq yashashi kerakmi
Teskari yo'naltirish uni yaratgan SSH seansi qancha yashasa, shuncha yashaydi. Aloqa uzilganda tinglovchi yo'qoladi va hamkasb sekin yo'l o'rniga rad etilgan ulanishni ko'radi. Buyruqni systemd birligi va qayta ishga tushirish siyosati bilan nazorat qilish buni hal qiladi, ExitOnForwardFailure=yes esa muvaffaqiyatsiz bog'lanishni darhol ko'rinadigan qiladi, yo'naltirishsiz ishlab turgan seansni qoldirish o'rniga.
Tarjima qilingan port qoidalar saqlansa qayta yuklashlarga chidaydi, lekin mijozning bir xil tunnel manzilini saqlashiga bog'liq. Qayta ulangandan keyin noutbukka boshqa manzil beradigan dinamik hovuz qoidani jimgina hech qayerga yo'naltiradi. Avval tunnel manzilini ajratib qo'ying, keyin qoidani yozing va ikkalasini bitta o'zgarish deb biling.
Agar xizmat tungi soat uchda hech kim qaramay javob berishi kerak bo'lsa, server e'lon qilgan portli shaklda harakatlanuvchi qismlar kamroq, chunki ishlab turishi shart bo'lgan yagona jarayon tunneldir.
Ikkinchi shart: xavfsizlik devori va jurnallar kimga tegishli
Teskari shakl butun siyosatni ikki joyda saqlaydi. sshd AllowTcpForwarding orqali masofaviy yo'naltirishga umuman ruxsat bor-yo'qligini hal qiladi, GatewayPorts esa tinglovchining loopback-ga yoki har bir manzilga bog'lanishini hal qiladi. Standart no qiymati bilan server tashqarisidagi hamkasb yo'naltirish muvaffaqiyatli bo'lsa ham portga yeta olmaydi va bu buzilgan tunnelga o'xshaydi, aslida esa bu bog'lanish manzili.
sudo ss -ltn '( sport = :8081 )'
sudo grep -E '^(GatewayPorts|AllowTcpForwarding)' /etc/ssh/sshd_config
Tarjima qilingan shakl yoqilgan yo'naltirish va ikkita qoidani talab qiladi, ikkinchi qoida esa ko'pchilik retseptlar xato qiladigan joy. Manba tarjimasini conntrack holati DNAT bilan cheklash faqat manzil qoidasi yaratgan ulanishlar qayta yozilishini bildiradi, server tunnelga yuboradigan har bir paket emas.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8081 -j DNAT --to-destination 10.88.0.6:8080
sudo iptables -t nat -A POSTROUTING -o tun0 -m conntrack --ctstate DNAT -j SNAT --to-source 10.88.0.1
Bu qayta yozish atributsiyani ham yo'q qiladi. Shundan keyin mijoz har bir qo'ng'iroq qiluvchini serverning tunnel manzili deb ko'radi, bu har bir manzil bo'yicha tezlik chegarasini bitta chelakka jamlaydi va kim nima yuborganini yashiradi. Agar atributsiya muhim bo'lsa, ulanishni serverda tugating yoki ruxsat qarorini o'sha yerda qoldirib, xizmat ishonadigan sarlavhada shaxsni uzating. Bu ikki tuzatish orasidagi tanlov xizmat proksi sarlavhasini o'qiydimi-yo'qmi, shunga bog'liq.
Uchinchi shart: bitta portmi yoki ko'pmi, va nom kimga tegishli
Bitta portdagi bitta xizmat teskari yo'naltirish kuch jihatidan yutadigan holatdir. Bitta buyruq, bitta hisob va bitta xavfsizlik devori qoidasi kerak, tozalash esa seansni o'ldirishdir. Bitta ommaviy manzildagi bir nechta xizmat sizni server e'lon qilgan shaklga undaydi, chunki har bir teskari yo'naltirishga o'z server porti kerak va to'plam har bir xizmat bilan o'sadi.
Nomlar buni yanada murakkablashtiradi. Teskari yo'naltirish SNI bo'yicha yo'naltiruvchi TCP proksisi orqasida turishi mumkin, tarjima qilingan port esa odatda har bir xizmatga bitta port. Agar xizmat TLSni o'zi tugatsa va asl xost nomi kerak bo'lsa, proksi usuli uni saqlaydi, DNAT usuli esa faqat xizmat o'sha portda o'sha nomni qabul qilsa saqlaydi.
Uch shartdan qaysi biri shaklni belgilaganini yozib qo'ying. Aks holda ikkinchi xizmatni qo'shadigan keyingi odam o'sha solishtirishni kamroq kontekst bilan qayta ochadi.
Qaror qiling, keyin tashqaridan sinab ko'ring
Yo'lni noutbukka hech qanday marshruti yo'q tarmoqdan sinab ko'ring va so'rov bajarilayotganda serverdagi hisoblagichlarni kuzating. Serverdan uning o'z ommaviy manziliga qarab sinash bu yerda hech narsani isbotlamaydi, chunki paket mahalliy ravishda yaratiladi va kiruvchi tarjima ilgagiga hech qachon yetib bormaydi, shuning uchun haqiqiy yo'l buzilgan bo'lsa ham sinov o'tishi mumkin.
sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20
Qimirlamay qolgan hisoblagichlar paketning qoidaga hech qachon yetib bormaganini bildiradi, bu esa provayderga yoki xostning xavfsizlik devoriga ishora qiladi. Xizmat rad etayotganda harakatlanadigan hisoblagichlar mijozning o'z xavfsizlik devoriga yoki xizmat tinglaydigan manzilga ishora qiladi. Paketni olib borib, hech narsa qaytarmaydigan tunnel marshrut yoki qaytish yo'li muammosidir, va bu uch natijadan hech birini mijoz adapterini tahrirlash bilan tuzatmaslik kerak. Biror narsani o'zgartirishdan oldin qaysi hisoblagich qimirlaganini yozib qo'ying, chunki keyingi sinovga o'sha boshlang'ich chiziq kerak.
Shakl ishlagach, portni, egasini va nazorat usulini tunnel konfiguratsiyasi yoniga yozib qo'ying. Faqat kimningdir shell tarixida mavjud bo'lgan yetib borish tuzatishi bitta qayta yuklash uzoqligidagi takroriy hodisadir.