Docker portlarini e’lon qilish va VPN: javob qayerga ketadi
E’lon qilingan konteyner teskari NAT dan oldin o‘z manzilidan javob beradi. Ikki dizayn bu javobni ochiq yo‘lda ushlab turishi mumkin, har xil xarajatlar bilan.
To‘liq tunnel VPN ko‘tarilgandan keyin ham xost SSH ga javob berishda davom etadi, lekin o‘sha mashinada Docker orqali e’lon qilingan xizmat jim bo‘lib qoladi. Tinglovchida hech qanday nuqson yo‘q: konteyner ishlayapti, port xaritasi mavjud va paket yetib keladi. Konteyner sog‘lom va so‘rov haqiqatan ham unga yetadi. Farq shundaki, Linux o‘z marshrutini tanlaganda javob qayerdan boshlanadi, va bu farq quyidagi ikki dizayndan qaysi biri kerakligini belgilaydi.
Tuple ni manzil NAT orqali kuzatib boring
Xostni oling: 192.0.2.10 u TCP 2222 ni 172.30.240.5:22 manzilidagi konteynerga e’lon qiladi. 198.51.100.25 manzilidan kelgan so‘rov konteynerga yetishdan oldin o‘giriladi va konteyner o‘zi sifatida javob beradi.
WAN request: 198.51.100.25 -> 192.0.2.10:2222
after DNAT: 198.51.100.25 -> 172.30.240.5:22
container reply: 172.30.240.5:22 -> 198.51.100.25
Xostning marshrut qarorida javob hali ham konteynerning manba manzilini olib yuradi. Teskari o‘girish e’lon qilingan tuple ni keyinroq tiklaydi, shuning uchun paket aynan marshrut tanlangan paytda noto‘g‘ri ko‘rinadi.
Nega faqat xost uchun qoida buni o‘tkazib yuboradi
WAN jadvalini faqat 192.0.2.10 manzilidan kelgan paketlar uchun tanlaydigan qoida xostning o‘z demonlarini qamrab oladi va bu yo‘naltirilgan javobni butunlay o‘tkazib yuboradi. Javobdagi manba manzil — 172.30.240.5, xost emas.
Haddan tashqari tuzatish — konteynerdan hamma narsani WAN orqali yo‘naltirish, bu ham konteynerning aloqasiz chiquvchi ulanishlarini VPN dan ozod qiladi. Bu so‘ralgan siyosatdan boshqacha va odatda keyinroq kimnidir hayratga soladi.
DNAT dan keyingi moslashtirish boshqa hook
Docker ning firewall hujjatlari shuni qayd etadi: oddiy foydalanuvchi filtrlash DNAT dan keyingi manzilni ko‘radi, shuning uchun oddiy qoidada e’lon qilingan 2222 portni moslashtirish konteynerning 22 portini moslashtirish bilan bir xil emas. Agar asl tuple muhim bo‘lsa, qaysi port ko‘rinishini taxmin qilish o‘rniga qo‘llab-quvvatlanadigan asl manzil mexanizmidan foydalaning.
Bu hook chalkashligi to‘g‘ri ko‘rinadigan va hech qachon mos kelmaydigan qoidalar yaratadi. Siyosatni qayta yozishdan oldin qoidaning o‘zidagi hisoblagichlarni tekshiring. Hech qanday urish bo‘lmagan qoida sizga paket hech qachon yetmaydigan joyda baholanayotganini aytadi.
Dizayn A: qarorni ulanish holati sifatida olib yurish
Ulanish belgisi kirish qarorini o‘girish orqali olib yurishi mumkin, lekin u muhim marshrut qidiruvidan oldin paketga tiklanishi kerak. Bosqichlar:
- Docker, VPN yoki boshqa siyosat egasi bilan to‘qnashmaydigan belgi maydoni va qoida ustuvorligini ajratib qo‘ying.
- Faqat mo‘ljallangan yangi WAN ulanishini ulanish kuzatuvi mavjud DNAT oldidagi nuqtada aniqlang.
- Qarorni ulanish belgisiga yozib qo‘ying, asl so‘rovning o‘zini WAN jadvaliga majburlamasdan.
- Javob yo‘nalishida marshrutlashdan oldin paketga faqat o‘zingizning belgi bitlaringizni tiklang.
- VPN qoidasi birinchi bo‘lib yutolmaydigan qilib to‘liq WAN jadvalini yetarlicha erta tanlang.
Bu jadvalga haqiqiy ulangan marshrutlar va shlyuz kerak. Marshrut yo‘q bo‘lganda aniqlangan xatti-harakat ham kerak. Tunnelga jimgina tushib qolish eng yomon natija, chunki konfiguratsiya hali ham ishlayotgandek ko‘rinadi. Buning o‘rniga yopiq tarzda muvaffaqiyatsiz bo‘ling va buni jurnalga yozing.
Dizayn B: xostda tugatish
Konteyner oldida TCP proksisi yoki teskari proksi kabi ataylab sozlangan xost tomonidagi frontend javobni xost manzilidan kelib chiqqan holda saqlaydi. Shunda xost uchun yozilgan qoidalar kutilganidek ishlaydi va konteyner o‘zining xususiy tarmog‘ida qoladi.
Xarajat — o‘z konfiguratsiyasi, manba manzilni qayta ishlashi va kirish nazorati bo‘lgan yana bir harakatlanuvchi qism. Bu odatda soddaroq qo‘llab-quvvatlanadigan chegara va marshrutlash siyosatini ketishi mumkin bo‘lgan bir kishi yuritadigan bo‘lsa, ko‘pincha to‘g‘ri javob bo‘ladi.
O‘zgarishni tekshiring, niyatni emas
Ochiq tomondan yangi ruxsat berilgan ulanish oching va javob mo‘ljallangan interfeysdan chiqishini tasdiqlang. Keyin konteyner boshlagan aloqasiz so‘rov hali ham VPN ga ergashishini tekshiring.
Bitta qoidani sinash uchun mashinaning ulanish jadvalini tozalamang: mavjud yozuvlar avvalgi xaritasini saqlaydi va tozalash xostdagi qolgan hamma narsani buzadi. Portni e’lon qilish yetib borish imkoniyatini belgilaydi. U javob yo‘lini belgilamaydi. Tanlangan dizaynni uning jadval nomlari bilan yozib qo‘ying, keyingi odam voqea paytida uni qaytadan kashf qilmasligi uchun.