Nima uchun LANingiz VPN mijozi xizmatiga yetib bormaydi
VPN mijozi LAN ocha olmaydigan xizmatni joylashtirishi mumkin. Odatda yetishmayotgani qaytish yo‘li: bitta marshrut, DNAT jufti yoki hech kim qo‘shmaydigan SNAT qatori.
Tunnelingiz ishlayapti, xizmat tinglayapti, ofis LANi esa hanuz hech narsa qaytarib olmayapti. Hech kim VPNni buzgani yo‘q. LAN tomonidan qaraganda, noutbukning tunnel manzili, kimdir LANga u yerga qanday yetishni aytmaguncha mavjud emas, va javob so‘rov chiqqan yo‘l bilan qaytishi kerak. Men odamlarning qaytish yo‘liga hech kim qaramay turib, butunlay sog‘lom tunnelni uch marta qaytadan qurganini ko‘rganman.
Buzilgan narsa tunnel emas
Ikkala uchi ham xususiy diapazonlarda o‘tiribdi, bu oddiy holat, noto‘g‘ri sozlama emas. 10.8.0.6 kabi manzil tunnel ichida haqiqiy va boshqa joyda mavjud emas, shuning uchun LANning u yerga biror narsa yuborishga sababi yo‘q. Marshrutlashga tegishdan oldin xizmat tunnel ichida umuman yetib borishli ekanini tasdiqlang: mijozda ss -ltn tinglovchi 127.0.0.1, LAN interfeysi yoki tunnel manziliga bog‘langanini ko‘rsatadi. Faqat loopbackka bog‘langan demon o‘zidan boshqa hech kimga javob bermaydi, va buni hech qanday marshrut, DNAT yoki port yo‘naltirish o‘zgartirmaydi.
80 yoki 443 portidagi proksi boshqa ko‘rinishga ega boshqa vosita. U paketlarni emas, so‘rovlarni ko‘chiradi, shuning uchun xom ma’lumotlar bazasi ulanishi uchun noto‘g‘ri qatlam, va aynan unga qo‘l cho‘zish bu muammoni kimdir biror narsani o‘lchashidan oldin uch vosita chuqurlikka olib boradigan yo‘l.
Marshrut shakli: LANga hovuz qayerdaligini ayting
LAN darvozasidagi statik marshrut, LAN va tunnel hovuzi ustma-ust tushmaganda eng toza javob. Hovuzni tunnelni tugatadigan mashinaga yo‘naltiring:
ip route add 10.8.0.0/24 via 192.168.1.12
route add -p 10.8.0.0 mask 255.255.255.0 192.168.1.12 # Windows, persistent
Bu faqat bitta yo‘nalishni tuzatadi, shuning uchun bu o‘zgarishning yarim qolgan versiyalari taraqqiyot kabi ko‘rinadi. Tunnel tomoniga ham mos yarmi kerak, aks holda javob mijozni o‘zining standart marshruti bilan tark etadi va yo‘lda o‘ladi:
push "route 192.168.1.0 255.255.255.0"
Serverning orqasida emas, bitta mijozning orqasidagi quyi tarmoq uchun serverga tizim marshruti ham, o‘sha mijozning faylida iroute yozuvi (client-config-dir ostida) ham kerak. iroute bo‘lmasa, OpenVPN prefiks borligini biladi va unga qaysi mijoz egaligini bilmaydi: paketlar keladi, demonning ularni moslashtiradigan hech narsasi yo‘q.
Mana nom berishga arziydigan afsona. Marshrut manzilni yetib borishli qiladi; qarshisidagi tomonni javob berishga tayyor qilmaydi. Saytdan-saytga hamkorlar ustiga yana bir qatlam qo‘shadi, chunki uzoq darvoza faqat o‘z siyosatida sanab o‘tilgan prefikslar ichidagi manbalarni qabul qiladi, uy hovuzidan kelgan noutbuk esa ularning ichida emas.
NAT shakli: ichkariga DNAT, va hamma o‘tkazib yuboradigan SNAT qatori
LAN darvozasiga tegolmasangiz yoki aynan bitta portni e’lon qilmoqchi bo‘lsangiz, VPN xostidagi tarjima LANda hech qanday marshrutsiz ishlaydi. Portni e’lon qiling, uni yo‘naltiring va tunnelga kirish yo‘lida manbani tarjima qiling:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 10.8.0.6:3000
iptables -A FORWARD -i eth0 -o tun0 -p tcp -d 10.8.0.6 --dport 3000 -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -d 10.8.0.6 -p tcp --dport 3000 -j SNAT --to-source 10.8.0.1
Uchinchi qator yo‘qoladigan qator. Uni o‘tkazib yuborsangiz, mijoz asl LAN manzilini manba sifatida ko‘radi, o‘zining standart marshruti bilan javob beradi, va bu javob LANga qaytish o‘rniga tunnelga kiradi. Ulanish omon qoladimi, bu siz hech qachon rejalashtirmagan marshrutlashga bog‘liq bo‘ladi. SNAT bilan mijoz serverning tunnel manzilini ko‘radi, shuning uchun javob tunnel bo‘ylab orqaga, tarjimani bekor qila oladigan yagona xostgacha boradi.
Iste’molchi firmware o‘z zanjir nomlaridan foydalanadi va bu tarjimani siz uchun yaratmaydi. Tomatoda kiruvchi qoida WANPREROUTING ichiga, so‘ngra wanin kabi filtr zanjiriga tushadi, va to‘liq ko‘rinadigan qoidalar to‘plami hanuz qo‘lda yozilgan POSTROUTING qatorini talab qiladi. Bu firmware xatosi emas; bu faqat kiruvchi trafik uchun yozilgan qoidalar to‘plami.
Nima uchun to‘g‘ri ko‘rinadigan qoida baribir paketni tashlaydi
Bu muvaffaqiyatsizliklarning ko‘pchiligi siz tikilib turgan qoidada emas. Quyidagi tartibda to‘rt narsani tekshiring va bajarilmaydigan birinchisida to‘xtang:
- Zanjirlar tartibi.
iptables -Iyuqoriga kiritadi,-Aoxiriga qo‘shadi, shuning uchun avvalgi ruxsat beruvchi yoki bloklovchi qoida birinchi hal qiladi. - Noto‘g‘ri zanjir. Routerning o‘ziga manzillangan trafik INPUTdan o‘tadi, va yo‘naltirilgan trafik unga hech qachon tegmaydi. Bitta xizmatni e’lon qilish ikkalasida ham qoidalarni talab qilishi mumkin.
- Yo‘nalish bayroqlari.
-i tun0mijozlardan keladigan trafikka mos keladi,-o tun0esa ularga ketadigan trafikka. Noto‘g‘ri bayroqli REJECT siz o‘ylamagan narsani bloklaydi. - Manba cheklovi. Bitta mijoz manzilini qabul qiladigan yo‘naltirish o‘sha mijozdan ishlaydi va boshqa har qanday manbani bir og‘iz so‘zsiz tashlaydi.
Paket hisoblagichi nolga teng qoida yo‘lda umuman yo‘q, va hisoblagichlarni o‘qish noto‘g‘ri zanjir muammosini noto‘g‘ri qoida muammosidan ajratishning eng tez yo‘li.
Mahalliy yo‘naltirish, LANda hech narsani o‘zgartirib bo‘lmaganda
SSH mahalliy yo‘naltirishi butun savolni chetlab o‘tadi. Unga LANda marshrut, mijozning tarmoq devori hamkorligi va biror joyda e’lon qilingan port kerak emas:
ssh -N -f -L 3000:10.8.0.6:3000 user@vpn-host
Keyin xizmat tunnelni ushlab turgan mashinaning localhost:3000 manzilida ko‘rinadi, boshqa joyda emas. Bu — chegara: bitta ish stansiyasi, bitta port, va biror narsa uni qayta ishga tushirmasa, yo‘naltirish sessiya bilan birga o‘ladi. Sinov ma’lumotlar bazasini tekshirayotgan administrator uchun bu to‘g‘ri vosita. Boshqa odamlar yetib borishi kerak bo‘lgan kamera yoki skaner uchun esa unday emas, chunki har bir foydalanuvchiga o‘z yo‘naltirishi kerak bo‘lardi.
Yana bitta qoida qo‘shishdan oldin ikkala yo‘nalishni ham tekshiring
Tarjima iz qoldiradi, va ularni o‘qish taxmin qilishdan yaxshiroq. VPN xostda conntrack -L tarjima umuman bo‘lganini, iptables -t nat -L -n -v hisoblagichlar siljiganini, tcpdump -ni any port 3000 esa qaysi manba manzili haqiqatan kelganini ko‘rsatadi. Mijozda ss -ltn tinglovchining tunnel yetib boradigan manzilda ekanini tasdiqlaydi.
Keyin saqlab qoladigan shaklingizni tanlang. Bitta e’lon qilingan port, butun hovuz uchun marshrut va bitta administrator uchun yo‘naltirish uch xil majburiyat, va ularni aralashtirish ishlayotgan sozlamani olti oydan keyin hech kim tushuntira olmaydigan sozlamaga aylantiradigan yo‘l. Qaysi manzil qayerdan yetib borishli ekanini yozib qo‘ying, va buni nosozliklarini tuzatadigan keyingi odam tunneldan emas, javobdan boshlaydi.