LAN xizmatini VPN shlyuzining o‘z manzilida eʼlon qilish
Yo‘naltirilgan portni mijozdan qurilmagacha va orqaga kuzatib boring: manzil tarjimasi doirasini belgilang, so‘ngra javoblar marshrutlanadimi yoki tarjima qilinadimi, hal qiling.
LAN qurilmasini shlyuzning o‘z tunnel manzillaridan birida taqdim etish uchun bir satr NAT kifoya. Aloqa baribir uziladi, chunki javob berayotgan qurilma mijoz manziliga o‘sha shlyuz orqali yetish mumkinligini bilmaydi. Paketni mijozdan ichkariga kuzatib boring, so‘ngra javobni orqaga tashqariga kuzatib boring, va yetishmayotgan yarmi oydinlashadi.
Mijoz nuqtai nazaridan boshlang
Bu misoldagi mijoz VPN hovuzida, 10.62.0.0/24 tarmog‘ida o‘tiradi va 8080 portida 10.62.0.1 ga ulanadi. Bu manzil shlyuzning o‘ziga tegishli, shuning uchun paket boshqa hamkorning emas, shlyuz yadrosining oldiga keladi. Shlyuz orqasida LAN 172.21.4.0/24. Shlyuzda 172.21.4.10 bor, HTTP xizmatini haqiqatda ko‘rsatadigan qurilma esa 172.21.4.40.
Boshqa VPN hamkoriga tegishli manzilni shlyuzning xizmat manzili bilan almashtirib bo‘lmaydi. Agar mijoz hamkor manziliga ulanayotgan bo‘lsa, hech qanday shlyuz qoidasi umuman ishtirok etmaydi, va bu butun yurish noto‘g‘ri holat.
Manzil tarjimasi doirasini ataylab cheklang
Tor variant bitta portni taqdim etadi va faqat manzilni qayta yozadi. Paket o‘z protokolini va manbasini saqlab qoladi, va aynan shu yurishning qolgan qismini qiziqarli qiladi.
iptables -t nat -A PREROUTING -i tun0 -s 10.62.0.0/24 -d 10.62.0.1 -p tcp --dport 8080 -j DNAT --to-destination 172.21.4.40:80
Protokol va port mezonlarisiz qoida keng variantdir: u mijoz tanlagan har qanday portni saqlaydi va faqat manzilni o‘zgartiradi. Butun xostni taqdim etish nazarda tutilsa bu qonuniy, bitta xizmat nazarda tutilsa noto‘g‘ri. Qoidani qayta o‘qing va interfeys nomini tasdiqlang. Noto‘g‘ri interfeysdagi DNAT qoidasi hech narsaga mos kelmaydi, bu esa yo‘q qoida bilan bir xil vaqt tugashini keltirib chiqaradi va qurilmaga qarab bir soatni behuda o‘tkazadi.
Yo‘naltirish chegarasi rozi bo‘lsin
Tarjima sarlavhani o‘zgartiradi, ruxsat bermaydi. Standart tashlab yuborish siyosatida yo‘naltirilgan oqim o‘z ruxsatiga muhtoj, qaytish yo‘nalishiga esa siyosatingizda allaqachon bo‘lishi mumkin bo‘lgan o‘rnatilgan ulanish qoidasi kerak.
iptables -A FORWARD -i tun0 -o lan0 -d 172.21.4.40 -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Har bir DNAT oqimi uchun shartsiz ruxsat bu loyihadan kengroq va keyinchalik boshqa birov qo‘shgan xaritalashlarga ham ruxsat beradi. Manzil va portni nomlang, qolganini yopiq qoldiring. Agar yo‘naltirish qoidasidagi hisoblagichlar nolda tursa, NAT hisoblagichlari esa oshsa, paket sizning qoidangizdan oldin tashlab yuboriladi. Ikkinchi nusxa qo‘shish o‘rniga zanjir tartibini o‘qing.
Qurilma qandaydir yo‘l bilan javob berishi kerak
Tarjimadan keyin qurilma 10.62.0.0/24 ichida manba ko‘radi. Uning javobi standart shlyuziga ketadi, bu LAN routeri, VPN shlyuzi emas, agar biror narsa unga boshqacha aytmasa. Ikki tartib buni tuzatadi va ular teng emas. Qurilmadagi yoki LAN routeridagi marshrut 10.62.0.0/24 ni 172.21.4.10 ga yuboradi va mijoz manbasini saqlaydi. Cheklangan manba tarjimasi esa mijozni shlyuzning LAN manzili orqasiga yashiradi.
ip route add 10.62.0.0/24 via 172.21.4.10 dev eth1
iptables -t nat -A POSTROUTING -s 10.62.0.0/24 -d 172.21.4.40 -o lan0 -p tcp --dport 80 -j SNAT --to-source 172.21.4.10
Xizmatga nima kerakligiga qarab tanlang. Har bir mijoz uchun siyosat va mazmunli jurnallar marshrutlangan shaklni xohlaydi; marshrut berib bo‘lmaydigan qurilma yoki albatta LAN manzilini ko‘rishi kerak bo‘lgan xizmat tarjima qilingan shaklga ishora qiladi. Bitta javob ishlashi uchun global masquerade qoidasiga qo‘l cho‘zmang. U har bir mijozni har bir manzildan yashiradi va manba manzillariga bog‘liq siyosatlarni jimgina buzadi.
Shlyuzning o‘zidan sinamang
Shlyuzda 10.62.0.1 tomon yaratilgan so‘rov kiruvchi PREROUTING orqali emas, OUTPUT zanjiri orqali chiqadi. Uning muvaffaqiyatsizligi yoki muvaffaqiyati mijozga qaragan qoida haqida hech narsa demaydi, va odamlar aynan shu tarzda ishlayotgan qoidani buzilgan deb xulosa qiladilar.
conntrack -L | grep 172.21.4.40
tcpdump -ni any 'port 8080 or port 80'
Haqiqiy mijoz so‘rovini ishga tushiring va ikkalasini o‘qing. conntrack yozuvi qo‘llanilgan tarjimani ko‘rsatadi, ushlashlar esa so‘rov LAN ga o‘tganini va tunnel tomon javob qaytganini ko‘rsatadi. Qoidalarni o‘zgartirgandan keyin yangi ulanishdan foydalaning, chunki mavjud holat o‘zining avvalgi xaritalashini saqlaydi va eski usulda muvaffaqiyatsiz bo‘lib qolaveradi. So‘ngra butun suhbatni tasdiqlang: qurilma manzili, yo‘naltirish ruxsati va javob marshruti barchasi bir xil oqimni tasvirlaydi.