VPN nom fazosidagi ilova LAN tarmog‘idan yetib bo‘lmaydi
Tarmoq nom fazosi bitta dasturga o‘z tunnelini va o‘z loopback manzilini beradi. Xost o‘rniga faqat uning portini socat sakrashi yoki veth juftligi orqali e’lon qiling.
Xizmatingiz mashinada ishlaydi, tunnel ko‘tarilgan, lekin stolingizdagi brauzer hali ham javob kutmoqda. Oddiy ma’noda hech narsa buzilmagan: ilova tarmoq nom fazosi ichida tinglaydi va bu stek LAN uchun ko‘rinmaydi. Uning loopback manzili nom fazosiga tegishli, shuning uchun boshqa mashinadagi mijoz portga yetib boradigan manzilga ega emas. Bitta qasddan sakrash yoki bitta veth juftligi xostning qolgan qismini qimirlatmasdan buni tuzatadi.
Nega LAN manzilida hech kim javob bermaydi
Nom fazosi to‘liq tarmoq stekidir: interfeyslar, marshrutlar, tarmoq ekrani qoidalari va shaxsiy loopback. ip netns exec orqali ishga tushirilgan jarayon faqat shu stekni ko‘radi va boshqa hech narsani ko‘rmaydi, shuning uchun u bog‘lanadigan manzil faqat nom fazosi ichida hal qilinadi. Xostning o‘z 127.0.0.1 manzili butunlay boshqa loopback.
Shu sababli xostda curl muvaffaqiyatsiz bo‘ladi, nom fazosi ichida esa o‘sha buyruq muvaffaqiyatli bajariladi. Ilova sog‘lom; manzil shunchaki xost stekida yo‘q.
Bitta portni socat sakrashi bilan e’lon qiling
socat ikki stekni foydalanuvchi fazosida bog‘laydi, bu bitta TCP port o‘tishi kerak bo‘lganda yetarli. Xost tomoni LANda tinglaydi va har bir qabul qilingan ulanish uchun nom fazosi ichida ilovaning loopback manziliga ulanadigan ikkinchi socat ishga tushiradi. Ichki jarayon ilovaga xuddi mahalliy mijoz yetib borgandek yetib boradi. Nom fazosining marshrutlashida hech narsa o‘zgarmaydi, shuning uchun ilova tunneldan yagona chiqish sifatida foydalanishda davom etadi.
socat TCP-LISTEN:9100,reuseaddr,fork EXEC:'ip netns exec vpn socat STDIO tcp-connect:127.0.0.1:9100',nofork
Tashqi jarayonga root yoki nom fazosiga kirish imkoniyati kerak. Agar VPN uzilsa, ilova o‘z yo‘lini yo‘qotadi va e’lon qilingan port yopiq holda muvaffaqiyatsiz bo‘ladi, qamoqxonadan kutgan xatti-harakatingiz shu.
Birdan ortiq port o‘tganda veth juftligidan foydalaning
Bir nechta port yoki protokol o‘tishi kerak bo‘lsa, yoki boshqa xostlar ulanishlarni boshlashi kerak bo‘lsa, veth juftligi to‘g‘ri javob. Bir uchi xostda qoladi, ikkinchisi nom fazosiga o‘tadi va kichik /30 ikkala tomonga barqaror manzil beradi. Keyin xost marshruti nom fazosi manzilini juftlik orqali yuboradi.
ip link add veth0 type veth peer name veth1
ip link set veth1 netns vpn
ip addr add 10.77.0.1/30 dev veth0
ip link set veth0 up
ip netns exec vpn ip addr add 10.77.0.2/30 dev veth1
ip netns exec vpn ip link set veth1 up
Qamoqxonani buzishni xohlamasangiz, xost orqali standart marshrut qo‘shmang. Tunnel chiqish bo‘lib qolishi kerak, shuning uchun juftlik orqali faqat e’lon qilingan xizmat manziliga yetish mumkin. Nom fazosiga o‘zining resolver faylini ham bering, chunki ip netns exec /etc/netns/vpn/resolv.conf faylini o‘qiydi va usiz qamoqxona ichida nom hal qilish bo‘sh.
Xostdan emas, boshqa mashinadan sinang
Sinovni ikkinchi mashinadan o‘tkazing, chunki xost mahalliy tinglovchiga LAN haqida hech narsa aytmaydigan yo‘llar orqali yetib borishi mumkin. Avval ilova nom fazosi ichida aslida nimaga bog‘langanini tekshiring, keyin tashqaridan e’lon qilingan manzilga ulaning. U yerda har bir manzilga bog‘lanish qamoqxonani kengaytirmaydi, chunki wildcard hali ham nom fazosiga tegishli va LAN uni ko‘ra olmaydi.
ip netns exec vpn ss -lntp
Xostdan ulanish ishlab, LANdan ishlamasa, yetishmayotgan qism sakrash yoki marshrut, bog‘lanish manzili emas. Ishlayotgan tun qurilmasini ichkariga ko‘chirish o‘rniga nom fazosi ichida OpenVPN ni ishga tushiring, chunki interfeysni ko‘chirish uni o‘chiradi va keyin tashqaridan tuzatib bo‘lmaydigan marshrutlarni tozalashi mumkin. Tiklash buyruqlarini qamoqxona ichida emas, konsolda saqlang.