Bitta mashina uchta ehtiyojni bir vaqtda qondira oladi: tunnellarni tugatish, HTTPS ga javob berish va ikkita xususiy LAN orasida yo'naltirish. Bu oqilona ekani qog'ozda hal qilish mumkin bo'lgan uchta narsaga bog'liq: ommaviy manzil kimniki, har bir port va protokol juftligi kimniki va qaysi jarayonga paketlarni yo'naltirishga ruxsat berilgan. Bular to'g'ri bo'lsa, umumiy xost ahamiyatsiz. Noto'g'ri bo'lsa, toza ishga tushadigan va hech qachon javob bermaydigan xizmat bilan dam olish kunini o'tkazasiz.

Keyingi narsa qaror qabul qilish tartibi, qurilish varaqasi emas. Har bir qadam hozir qo'shilgan rol chindan ham ajratilganini isbotlaydigan tekshiruv bilan tugaydi.

Manzil egasini portlardan oldin tanlang

Tunnel oxirgi nuqtasi va veb-server bitta yadroni baham ko'rishi mumkin; bir vaqtda bitta manzil, port va protokolni baham ko'rish muvaffaqiyatsiz bo'ladigan narsadir. WireGuard odatda UDP 51820 ni oladi, OpenVPN UDP 1194 yoki TCP 443 ni oladi, veb-server esa TCP 443 ni oladi. Og'riq beradigan juftlik HTTPS yonida TCP 443 ustidagi OpenVPN dir, chunki ikkalasi ham bir xil soketni xohlaydi va yadro uni birinchi bog'langan tomonga beradi. Faqat oldidagi demultipleksor, masalan sslh yoki TLS ni tushunadigan proksi ularga bu portni baham ko'rishga ruxsat beradi va u nosozligi xuddi firewall muammosiga o'xshaydigan komponent qo'shadi.

Biror narsani o'zgartirishdan oldin egalarga qarang: ss -lntup tinglayotgan har bir soketning mahalliy manzili, porti va jarayonini chop etadi. Ko'rsatadigan ikki qator 0.0.0.0:443 ikkinchi xizmat hech qachon bog'lanmaganini bildiradi, uning init skripti qanchalik xushchaqchaq bo'lmasin. Ko'prik ham egasini ko'chiradi. Qachon eth0 quyidagi ko'prikka qo'shilsa: br0, IP br0 ga o'tadi va eth0 ni nomlaydigan har bir firewall qoidasi mos kelishni to'xtatadi, shuning uchun xizmatlarni ko'prikka bog'lang va ip -br addr bilan tasdiqlang.

Xuddi shu egalik qoidasi virtual mashinalar bilan yuzaga keladigan ajablanchilikni tushuntiradi. Xuddi shu LAN dagi mehmon ichida ishlaydigan tunnel serveri mehmonning manzilini saqlaydi, shuning uchun xostning o'z manziliga qaratilgan ulanishlar xostda qoladi va mehmonning tunnel ularni hech qachon ko'rmaydi, mijoz profili nima desa ham.

Ikki LAN orasida marshrutlang yoki bir tomonni NAT qiling

Bir-birini ko'rmaydigan ikki LAN har biri ommaviy xostga qo'ng'iroq qilishi mumkin, u keyin tunnellar orasida yo'naltiradi. Bu marshrutlangan dizayn uchta narsani talab qiladi: yoqilgan yo'naltirish, har bir uzoq prefiksga marshrut va tranzitni o'tkazadigan yo'naltirish siyosati. sysctl -w net.ipv4.ip_forward=1 birinchisini qamrab oladi, ip route add 10.20.0.0/24 dev wg1 ikkinchisini, va nftables satri nft add rule inet filter forward iifname "wg0" oifname "wg1" accept uchinchisini.

Manba NAT ni qo'shish osonroq va tuzatish qiyinroq. Maskalash mijoz manzilini qayta yozadi, shuning uchun uzoq tomon haqiqiy xostni emas, markazni ko'radi va uning kirish qoidalari hamda jurnallari atribusiya uchun yaroqsiz bo'ladi. Ikkala tarmoq ham sizniki bo'lsa, marshrutlang. Bir tomon qaytarish marshrutini qo'shmaydigan uchinchi tomonga tegishli bo'lsa, NAT shu haftada chiqadigan variantdir. Qanday bo'lmasin, manzillar rejasini yozing, chunki ikki ustma-ust tushgan /24 ni hech qanday konfiguratsiya marshrutlay olmaydi.

Noutbuk uchun internet chiqishi bo'lib xizmat qilish xuddi shu qutining kiruvchi tunnellarni tugatishiga to'sqinlik qilmaydi. Faqat ustma-ust tushgan manzillar to'sqinlik qiladi, shuning uchun manzillar rejasi muhim hujjatdir.

Ikki rol to'xtatilgan holda bo'linishni sinab ko'ring

Foydali sinov ayirishdir: ikki rolni to'xtating va uchinchisi hali ham javob berishini tasdiqlang. Tunnel xizmati o'chirilganda veb-so'rov tugashi kerak, veb-server to'xtatilganda tunnel qo'l berib ko'rishishi tugashi kerak. Ikkalasi ham faqat hamma narsa ishlaganda ishlasa, sizda tasodifiy bog'liqlik bor, masalan umumiy firewall jadvali, adashgan marshrut yoki noto'g'ri manzilga ishora qiluvchi nom.

Uch buyruq bu sinovni aniq qiladi. curl -sk --resolve example.test:443:203.0.113.10 https://example.test/ mahalliy tinglovchining tashqi DNS siz javob berishini isbotlaydi, wg show mijozda qo'l berib ko'rishish tugaganini isbotlaydi va tcpdump -ni any port 51820 markazda marshrutlash muammosini kalit muammosidan ajratadi. Tutishda hech qachon ko'rinmaydigan qo'l berib ko'rishish xostdan oldin o'lgan: provayderning firewali, noto'g'ri ommaviy manzil yoki yo'lda NAT qoidasi.

Yo'naltiriladigan LAN lar uchun ayirishni takrorlang. Bitta hamkor uzilganda markaz orqali ping muvaffaqiyatsiz bo'lishi kerak; qayta ulanganda ping qoidaga tegmasdan tiklanishi kerak. Tunnel qayta ishga tushirilgandan keyingina tiklanadigan ping siyosatga ishora qiladi, yetib borishga emas, va bu boshqa tuzatish.

Rollarni ayirishda qoidalar to'plamini o'qish mumkin holda saqlang. nft list ruleset haqiqatan kerak bo'lgan har bir yo'nalish uchun bitta qabul qilish qoidasini ko'rsatishi kerak, va hamma narsani qabul qiladigan yo'naltirish zanjiri ajratish emas, u ishlaydigan demo.

Faqat IPv6 kirish liniyalari va IPv4 xizmatlari

Ba'zi kirish liniyalari faqat IPv6 yetib borishni beradi, xizmatlar esa baribir IPv4 orqali e'lon qilinishi kerak. Tunnelning o'zi hali ham trafikni o'tkazadigan oila orqali yuradi, e'lon qilingan xizmat esa tunnel ichidagi manzilda o'tiradi. Bu odatiy taxminni teskari aylantiradi va monitoringni jimgina buzadi: IPv4 yo'li uchun yozilgan firewall qoidasi yoki ish vaqti tekshiruvi endi hech narsa tashimaydigan interfeysni kuzatadi.

Har bir oilani alohida sinab ko'ring curl -4 va curl -6 bilan, chunki bitta muvaffaqiyatli so'rov siz sinamagan yo'l haqida hech narsa demaydi. Port egaligi oilalar orasida o'zgarmaydi, lekin tinglovchi o'zgaradi: ss -lntup IPv4 va IPv6 soketlarini alohida qatorlarda sanaydi va 0.0.0.0:443 qamrab olmaydi [::]:443 jarayon dual-stack soket so'ramagan bo'lsa.

Bir oilada javob berib boshqasida rad etadigan xizmat odatda tinglovchi muammosi, marshrutlash emas. Dizaynni tugallangan deb e'lon qilishdan oldin har bir rol o'z manzili yoki portiga ega ekanini, yo'naltirish yoqilgan va ruxsat etilganini, qolgan ikkitasi to'xtatilganda ham har bir rol javob berishini tasdiqlang.

O'xshash maqolalar