NAT orqasidagi WireGuard peer'ga portni yo'naltirish: DNAT va SNAT
DNAT so'rovni yetkazadi, lekin javob noto'g'ri manzildan chiqadi. Mos SNAT qoidasini qo'shing va ikkalasini tunnel sozlangandan keyin joylashtiring.
Brauzer https://203.0.113.10:8443 manzilini so'raydi, proksi ulanishni qabul qiladi va WireGuard peer'idagi xizmat hech qachon javob bermaydi. DNAT qoidasi o'z ishini qilyapti; muvaffaqiyatsiz bo'lgan qism — javob. Paketni ikkala tarjima orqali kuzatib chiqing va yetishmayotgan qoida ayon bo'ladi. Tuzatish to'g'ri hook'dagi yana bitta NAT bayonoti, yangi tunnel emas.
Bitta so'rovni boshidan oxirigacha kuzatib chiqing
So'rov proksining ommaviy interfeysiga keladi, manba mijozning ommaviy manzili, maqsad esa proksi manzili. nat PREROUTING ichida DNAT qoidasi maqsadni peer'ning tunnel manziliga, 10.90.0.2 ga qayta yozadi. So'ngra marshrutlash qarori paketni wg0 orqali tashqariga yuboradi va yo'naltirish yo'li tugallanadi.
Peer'da paket endi asl ommaviy manba manzilini olib yuradi, chunki hech narsa uni qayta yozmagan. Xizmat ulanishni qabul qiladi va javobini o'zining standart shlyuziga yuboradi, u peer oldidagi uy routeri. Bu router hech qachon ko'rmagan oqim uchun holatga ega emas, shuning uchun paketni tashlab yuboradi yoki o'zining ommaviy manziliga aylantiradi, mijoz buni qabul qilmaydi.
Asimmetriya — butun muammo: so'rov proksidan o'tadi, javob esa to'g'ridan-to'g'ri ketishga urinadi. Proksining ulanishlarni kuzatishi faqat javob proksidan qaytganida yordam beradi va manba manzili hanuz asl mijozga ishora qilganda u yerga qayta olmaydi.
Qaytarish tarjimasini qo'shing
Yo'naltirilayotgan oqimning manbasini peer'ga ketishidan oldin proksining tunnel manziliga qayta yozing. So'ngra xizmat 10.90.0.1 ga javob beradi, proksi uni oladi va paket mijozga qaytishidan oldin ulanishlarni kuzatish ikkala tarjimani ham teskari aylantiradi.
iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1POSTROUTING qoidasi ataylab tor: u tarjima qilingan maqsad va tunnel interfeysiga mos keladi, shuning uchun wg0 orqali tasodifan chiqadigan aloqasiz trafikni qayta yozmaydi. Keng masquerade qoidasi ham mijoz manzilini yashirardi, lekin buni har bir oqim uchun qilardi va NAT jadvalini tekshirishni qiyinlashtirardi.
Qoidalarni tunnel mavjud joyga joylashtiring
Tunnel manzili yoki interfeysiga ishora qiluvchi qoidalar wg-quick uni sozlagandan keyin ishlashi kerak. Interfeys PreUp dan oldin yaratiladi, lekin manzillar, MTU, DNS va marshrutlar keyin qo'llaniladi, PostUp esa bularning barchasi joyida bo'lganda ishlaydi. Qo'shimchalarni PostUp ga, o'chirishlarni PreDown ga qo'ying.
PostUp = iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PostUp = iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1
PreDown = iptables -t nat -D PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PreDown = iptables -t nat -D POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1O'chirishlar qo'shimchalarga token bo'yicha mos kelishi kerak, multiport va interfeys mosliklari bilan birga. Bitta moslikda farq qiladigan o'chirish hech narsani o'chirmaydi va keyingi qayta ulanish qoidaning ikkinchi nusxasini qo'shadi. Bir necha qayta ulanishdan keyin jadvalda sozlash satriga bog'lash qiyin bo'lgan dublikatlar paydo bo'ladi.
Natijani iptables -t nat -S bilan qayta ulanishdan keyin tekshiring. Agar o'sha qoida ikki marta ko'rinsa, PreDown satri mos kelmaydi va tozalash jimgina muvaffaqiyatsiz bo'ladi.
Yo'naltirish, filtrlash va boshqa NAT
IPv4 yo'naltirishni doimiy ravishda yoqing, so'ngra filtr jadvalida yo'naltirilayotgan oqimga ruxsat bering. DNAT FORWARD zanjiridan oldin sodir bo'ladi, shuning uchun filtr qoidasi ommaviy manzilga emas, tarjima qilingan maqsadga mos keladi. Agar UFW firewallni boshqarsa, ruxsatni marshrut qoidasi sifatida ifodalang; oddiy host qoidasi yo'naltirilayotgan trafikni qamrab olmaydi.
Proksi qoidalari to'g'ri bo'lsa ham yana ikki NAT qatlami yo'lni buzishi mumkin. Uy ulanishida ommaviy manzil routerga tegishli va uning firewallida portni ochish o'sha portni proksiga yuboruvchi port yo'naltirish yozuvini yaratish bilan bir xil emas. Tashqaridan ochiq ko'rinadigan, ammo hech narsa javob bermaydigan port ko'pincha aynan o'sha xaritalashga ega emas.
NAT VPS da provayder ommaviy portni xususiy manzilga xaritalaydi. Xaritalash siz e'lon qilgan portga mos kelishi kerak va nomuvofiqlik buzilgan tunnel kabi ko'rinadi. WireGuard sozlamalarini o'zgartirishdan oldin provayderning xaritalashini tasdiqlang.
Qaytish yo'lini tekshiring va narxni qabul qiling
Proksining LAN'i bo'lmagan tarmoqdan ulaning, so'ngra ulanish ochiq turganda tarjima juftini tekshiring:
conntrack -L -p tcp --dport 8080
tcpdump -ni any tcp port 8080conntrack yozuvi asl tuple, tarjima qilingan tuple va javob yo'nalishini ko'rsatishi kerak. Agar javob yo'q bo'lsa, peer tunnel orqali yubormayapti, bu odatda SNAT qoidasi qo'llanilmaganini yoki peer'ning o'z firewalli oqimni tashlaganini bildiradi.
PostUp qoidalarni qayta qo'llashini isbotlash uchun bir marta qayta yuklang, so'ngra tunnelni to'xtatib, PreDown ularni olib tashlaganini tasdiqlang. Uzilishdan keyin qoladigan o'lik qoidalar keyingi o'zgarishning kutilmagan xatti-harakat qilishining sababidir.
Nihoyat, SNAT qancha turishini qabul qiling. Xizmat har bir so'rovni proksidan kelgan deb ko'radi, shuning uchun kirish jurnallari, har bir mijoz uchun tezlik cheklovlari va ruxsat etilgan manzillar ro'yxatlari endi foydalanuvchilarni ajratmaydi. Hairpin holati proksining LAN'idagi mijozlar uchun o'z manba tarjimasini talab qiladi. Agar peer'ga haqiqiy mijoz manzillari kerak bo'lsa, alternativa mijoz tarmog'iga qaytish marshruti, bu ko'proq ish, lekin ma'lumotni saqlaydi.