Windows konteynerlari va VPN: mahalliy tarmoq nima uchun buziladi
Windows konteyneri xostning marshrutlash jadvalidan foydalanadi, shu sababli mahalliy quyi tarmoqni to'sadigan VPN konteyner prefiksini ham birga olib ketadi. Linux rejimi boshqa yo'lni tanlaydi.
Bitta noutbukda, bitta ulangan VPN mijozi bilan, Linux konteynerlari bir-biri bilan gaplashishda davom etadi, Windows konteynerlari esa to'xtaydi. O'zgaruvchi tasvir emas, paketlarning xostga kirish yo'lidir. Standart tarmoqdagi Windows konteynerlari xostning marshrutlash jadvali va tarjimasini qarzga oladi, shuning uchun xost marshrutlashini o'zgartiruvchi siyosat ularni ham o'zgartiradi. Biror narsani qayta o'rnatishdan oldin buni marshrut qidiruvi bilan tasdiqlang.
Windows konteynerining paketlari xostga qayerdan kiradi
Standart nat tarmog'idagi konteyner Host Networking Service prefiksidan manzil oladi, odatda 172.16.0.0/12 ichida bir joyda, va xostga virtual adapter orqali yetadi. Xost o'sha prefiksning marshrutiga ega va trafikni ayni paytda faol bo'lgan adapterga qarab tarjima qiladi. Bu yo'lning o'rtasida alohida virtual mashina yo'q.
Aynan shu dizayn nosozlikni mexanik qiladi. Konteyner paket yuborganda, xost konteyner prefiksi uchun marshrut qidiruvini amalga oshiradi. Qaysi marshrut yutsa, paket o'sha yerga ketadi va konteynerning bunga fikri yo'q.
VPN mijozi bu yo'lda nimani o'zgartiradi
Korporativ mijoz ko'pincha keng marshrutlar to'plamini va tunnel ochiq bo'lganda mahalliy quyi tarmoqqa kirishni rad etuvchi filtrni o'rnatadi. Maqsad mudofaa: buzilgan mahalliy tarmoq himoyalangan mashinaga yetib bormasligi kerak. Yon ta'sir shundaki, xostning konteyner prefiksigacha bo'lgan marshruti endi mahalliy NAT tarmog'i emas.
Buning o'rniga qidiruv tunnelga mos keladi va paket o'sha konteyner manzilini hech qachon eshitmagan shlyuzga topshiriladi. Ping muvaffaqiyatsiz bo'ladi, dastur vaqti tugaydi va VPN belgisi yonib turganda konteyner buzuq ko'rinadi. Ulangan holda xost jadvaliga qarang, raqib marshrut ko'rinadi.
| Container mode | Outbound path | Typical result behind the VPN |
|---|---|---|
| Windows, default nat | Host routes and translates container traffic | Container prefix follows the tunnel and fails |
| Windows, transparent | Container sits on the physical link | Depends on the local subnet being allowed |
| Linux engine on Docker Desktop | VM egress proxied by a host process | Often keeps working |
Linux konteynerlari nima uchun boshqacha tutadi
Linux dvigateli konteynerlarni yengil virtual mashina ichida ishga tushiradi va o'sha mashinadan chiqadigan ulanishlarni konteyner nomidan xost tomonidagi proksi ochadi. Soketni xost boshlaydi, shuning uchun konteyner prefiksi haqidagi VPN qoidasi unga xuddi shunday qo'llanilmaydi va ish yuki tarmoqqa yetib borishda davom etadi.
Bu farq Linux retseptlari nima uchun ko'chmasligini ham tushuntiradi. O'z tunneliga muhtoj Linux konteyneriga TUN qurilmasi va NET_ADMIN qobiliyati beriladi. Windows konteynerlari hech qanday interfeysni qurilma sifatida ko'rsatmaydi, shuning uchun bu andoza o'sha tomonda o'xshashi yo'q.
Marshrutni isbotlang, keyin dizayn tanlang
Dalillarni konteynerdan emas, xostdan to'plang, chunki qidiruvni xost bajaradi:
docker network inspect nat --format "{{range .IPAM.Config}}{{.Subnet}}{{end}}"
route print -4
Get-NetRoute -AddressFamily IPv4 | Where-Object DestinationPrefix -like "172.16.*"
Marshrutlar chiqishini VPN ulanmasidan oldin bir marta va keyin bir marta ishga tushiring. Agar ikkinchi chiqishda konteyner prefiksi tunnel adapteriga ishora qilsa, diagnostika tugallangan va konteynerlarni qayta ishga tushirish yordam bermaydi.
Birinchi variant siyosat qaroridir: tarmoq egasidan bu qurilma uchun mahalliy LAN kirishiga ruxsat berish mumkinmi, deb so'rang. Bir nechta korporativ mijoz buni sozlama sifatida taqdim etadi, ammo bu ataylab qo'yilgan chegarani zaiflashtiradi. Buni egasi va ko'rib chiqish sanasi bilan hujjatlashtirilgan istisno sifatida so'rang. Hech kim qaytib ko'rmaydigan har bir qurilma uchun kalit mudofaa siyosatining jimgina yo'qolish usulidir.
Siyosat saqlanib qolishi kerak bo'lgan joyda, marshrut bilan kurashish o'rniga ish yukini ko'chiring. Aniq quyi tarmoq va shlyuzga ega shaffof tarmoq konteynerlarni mahalliy havolaga qo'yadi, Linux ish yuki virtual mashina proksisining orqasida ishlaydi va o'z mijoziga ega alohida virtual mashina o'z siyosatini saqlab qoladi. Birini ataylab tanlang va uni konteyner ichidan sinab ko'ring, chunki foydalanuvchi so'rovi aynan o'sha yerda paydo bo'ladi.