Korporativ VPN orqasidagi hech narsaga yetib bormaydigan konteyner odatda tunneldan boshqa tarmoq nom fazosida yashaydi. Xost mijozi marshrutlari, DNS serverlari va xavfsizlik devori belgilari xost stekiga tegishli; ko‘prik tarmog‘i konteynerining o‘z steki bor. Shu bir fakt platforma jamoasiga keladigan hisobotlarning ko‘pini tushuntiradi va «VPN buzilgan» bilan «Docker VPN ni chetlab o‘tadi» bir vaqtda noto‘g‘ri bo‘lishi mumkinligining sababi ham shu. Bitta alomat ortida ikki butunlay boshqa sozlama yashiringan, shuning uchun har qanday sozlamani o‘zgartirishdan oldin qaysi biri sizda ekanini aniqlang.

Tunnel kimning nom fazosiga tegishli ekanini aniqlang

macOS yoki Windows uchun Docker Desktop da konteynerlar Linux virtual mashinasi ichida ishlaydi. Ish stoliga o‘rnatilgan VPN mijozi ish stoli operatsion tizimida tunnel yaratadi va virtual mashina uni hech qachon ko‘rmaydi. Hech qanday konteyner konfiguratsiyasi buni tuzatmaydi, chunki konteynerga kerak bo‘ladigan interfeys uning tarmoq nom fazosida umuman mavjud emas.

Linux xostda tunnel xost nom fazosida yashaydi va ko‘prik konteynerlari unga odatda chiqishda manba NAT qo‘llanilgan xost marshrutlash jadvali orqali yetib boradi. Bu yo‘l ishlamay qolganda, sabab odatda yo‘qolgan marshrut emas, balki yo‘naltirish siyosati, teskari yo‘l filtrlash yoki bir-birining ustiga tushadigan quyi tarmoq bo‘ladi. Keyinroq o‘qishdan oldin ikki dunyoning qaysi birida ekaningizni tasdiqlang:

docker info --format '{{.OperatingSystem}}'
docker run --rm --net=host alpine ip route | head -5
docker run --rm alpine ip route | head -5

Bu ikki marshrutlash jadvali orasidagi farq bir ekranda butun muammo. Agar xost ko‘rinishida tunnel interfeysi bo‘lsa, ko‘prik ko‘rinishida esa bo‘lmasa, siz nom fazosi izolyatsiyasini ko‘ryapsiz va qolgan hamma narsa uni qanday kesib o‘tish tanlovi.

Xost tarmog‘i — sinov, dizayn emas

Konteynerni xost tarmog‘i bilan ishga tushirish, buni Docker xost tarmoq nom fazosini bo‘lishish deb hujjatlashtiradi, unga tunnel interfeysi va uning marshrutlarini bevosita meros qilib beradi. Agar o‘sha so‘rov keyin muvaffaqiyatli bo‘lsa, marshrut nazariyasi tasdiqlanadi va nosozlik nom fazosi izolyatsiyasi, hisob ma’lumotlari, DNS yoki kirish qoidasi emas.

docker run --rm --net=host curl -sS -o /dev/null -w '%{http_code}\n' https://api.internal/health

Buni diagnostika sifatida saqlang. Xost tarmog‘i port e’lon qilishdan va konteynerdan kutgan izolyatsiyaning katta qismidan voz kechadi, Docker Desktop da esa «host» virtual mashinani bildiradi, ish stolini emas, shuning uchun qaysi xostga murojaat qilganingizni unutsangiz, u yerdagi muvaffaqiyat yoki muvaffaqiyatsizlik sizni chalg‘itishi mumkin.

tun qurilmasi va u bilan keladigan imtiyozlar

Konteyner ichidagi VPN mijoziga tunnel qurilmasi va uni sozlashga ruxsat kerak. Keng tarqalgan yechim — --privileged, u har bir qurilmani beradi va butun konteynerda xavfsizlik siyosatini yumshatadi. Bu bu ish talab qilganidan ancha ko‘p va ko‘rikda oqlash qiyin.

sudo modprobe tun
docker run --rm -it --device /dev/net/tun --cap-add NET_ADMIN myvpn-client

Torroq shakl bitta qurilma tugunini xaritalaydi va faqat tarmoq boshqaruvi qobiliyatini qo‘shadi. Avval modulni xostga yuklang, tugun mavjud bo‘lsin. Agar konteyner ishga tushsa va mijoz tunnel qurilmasini ocha olmasligini bildirsa, profilga shubha qilishdan oldin xaritalashni tekshiring, chunki bu xato odatda so‘zma-so‘z.

Bu dizayn mijozning har bir konteyner uchun ishlashini ham anglatadi. Har bir ish yuki o‘z tunneliga muhtoj bo‘lganda bu to‘g‘ri javob, siz esa faqat xost tunnelining ko‘rinishini xohlaganingizda noto‘g‘ri javob — platforma jamoasi siz shunday qilyapsiz deb o‘ylagan bo‘lishi mumkin.

Ko‘prik NAT i VPN ko‘radigan manbani o‘zgartiradi

Standart ko‘prikda konteynerning chiquvchi trafigi xost manziliga tarjima qilinadi. Shuning uchun VPN orqasida korporativ tomon konteynerning emas, xostning tunnel manzilini ko‘radi, manbaga asoslangan kirish qoidalari so‘rovni xost yuborgandek harakat qiladi va ikki konteyner VPN serveri uchun ajralmas bo‘lib qoladi.

macvlan yoki ipvlan buning o‘rniga konteynerga LAN manzilini beradi, bu LANda topishga yordam beradi va konteynerni segmentda tengdosh sifatida ko‘rsatadi. U xost tunnelini ham butunlay chetlab o‘tadi, shuning uchun bunday konteyner faqat-VPN prefikslariga yetib bormaydi, agar VPN o‘sha LANdan ham ochiq bo‘lmasa.

Ikkala shakl ham qonuniy; ular turli talablarga javob beradi. Agar talab «bu konteyner faqat-VPN xizmatiga yetishi kerak» bo‘lsa, siz xost orqali marshrutlash va tunnelni konteyner ichida tugatish orasida tanlaysiz. Bu tanlovni joylashtirishdan oldin yozing, birinchi muvaffaqiyatsiz so‘rovdan keyin emas. Nima tanlasangiz ham, uzoq tomon ko‘radigan manba manzilini yozib qo‘ying, chunki uning kirish qoidalari va jurnallari aynan shuni ko‘rsatadi. Bu manzilni ayta olmaydigan dizayn tugallanmagan.

DNS demonni kuzatadi, tunnelni emas

Konteyner ishga tushganda o‘z hal qiluvchi konfiguratsiyasini oladi, u demondan yoki imijdan nusxalanadi. VPN ulangandan keyin itarib yuboradigan manzillar bu nusxa uchun juda kech keladi va ular konteynerga emas, xost hal qiluvchisiga itariladi.

Xizmat uchun hal qiluvchini aniq belgilang yoki uni tunnel orqali ochiq bo‘lgan ichki hal qiluvchiga yo‘naltiring. Xususiy nomni ommaviy manzilga hal qiladigan konteyner odatda ommaviy hal qiluvchidan foydalanadi, buzilgan marshrutdan aziyat chekmaydi va tuzatish compose fayli yoki demon konfiguratsiyasiga tegishli.

Xuddi shu mantiq chiqish manzili masalasiga ham tegishli. Agar har bir konteyner boshqa VPN manzilidan ko‘rinishi kerak bo‘lsa, bitta xost tunneli buni bera olmaydi, chunki NAT ularni bitta manbaga jamlaydi. Ishlaydigan shakllar — har bir konteyner nom fazosida mijoz yoki tunnelga ega bo‘lib, o‘z stekini bo‘lishadigan sidecar, va ikkalasi ham ilovaning manzillanish usulini o‘zgartiradi.

Chiptani yopishdan oldingi tekshiruv ro‘yxati: tunnelga ega nom fazosini aniqlang, yo‘lni xost tarmog‘i bilan isbotlang, faqat kerakli tun qurilmasini xaritalang, NATdan keyingi manba manzilini eslab qoling, hal qiluvchini aniq belgilang va har bir konteyner chiqish manzillarini bayroq emas, arxitektura qarori deb biling.

O'xshash maqolalar