Kontejnerët Windows dhe VPN: përse thyhet rrjeti lokal
Një kontejner Windows përdor tabelën e rrugëzimit të hostit, prandaj një VPN që bllokon nënrrjetin lokal merr me vete edhe prefiksin e kontejnerit. Modaliteti Linux ndjek një rrugë tjetër.
Në një laptop të vetëm, me një klient VPN të lidhur, kontejnerët Linux vazhdojnë të bisedojnë me njëri-tjetrin dhe kontejnerët Windows ndalen. Variabli nuk është imazhi, por rruga që marrin paketat drejt hostit. Kontejnerët Windows në rrjetin e parazgjedhur huazojnë tabelën e rrugëzimit dhe përkthimin e hostit, prandaj një politikë që ndryshon rrugëzimin e hostit ndryshon edhe ata. Konfirmojeni këtë me një kërkim rrugë përpara se të riinstaloni çdo gjë.
Ku hyjnë paketat e një kontejneri Windows në host
Një kontejner në rrjetin e parazgjedhur nat merr një adresë nga një prefiks i shërbimit Host Networking Service, zakonisht diku brenda 172.16.0.0/12, dhe arrin hostin përmes një përshtatësi virtual. Hostit i përket rruga për atë prefiks dhe përkthen trafikun drejt përshtatësit që është aktiv. Nuk ka asnjë makinë virtuale të veçantë në mes të asaj rruge.
Ky dizajn është ai që e bën dështimin mekanik. Kur kontejneri dërgon një paketë, hosti kryen një kërkim rrugë për prefiksin e kontejnerit. Rruga që fiton është ajo ku shkon paketa, dhe kontejneri nuk ka mendim për këtë.
Çfarë ndryshon klienti VPN në atë rrugë
Një klient korporativ shpesh instalon një grup të gjerë rrugësh dhe një filtër që refuzon aksesin në nënrrjetin lokal sa kohë tuneli është aktiv. Qëllimi është mbrojtës: një rrjet lokal i komprometuar nuk duhet të arrijë një makinë të mbrojtur. Efekti dytësor është që rruga e hostit drejt prefiksit të kontejnerit nuk është më rrjeti NAT lokal.
Në vend të kësaj, kërkimi përputhet me tunelin dhe paketa i dorëzohet portës, e cila nuk ka dëgjuar kurrë për atë adresë kontejneri. Ping dështon, aplikacioni shkon në skadim kohe dhe kontejneri duket i prishur ndërsa ikona e VPN shkëlqen. Shikoni tabelën e hostit kur jeni i lidhur dhe rruga konkurruese është e dukshme.
| 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 |
Përse kontejnerët Linux sillen ndryshe
Motori Linux i ekzekuton kontejnerët brenda një makine virtuale të lehtë, dhe lidhjet dalëse nga ajo makinë hapen nga një proxy në anën e hostit në emër të kontejnerit. Hosti e nis socketin, prandaj rregulli i VPN për prefiksin e kontejnerit nuk zbatohet në të njëjtën mënyrë, dhe ngarkesa vazhdon të arrijë rrjetin.
Ky ndryshim shpjegon gjithashtu përse recetat Linux nuk transferohen. Një kontejner Linux që ka nevojë për tunelin e vet merr një pajisje TUN plus aftësinë NET_ADMIN. Kontejnerët Windows nuk ekspozojnë asnjë ndërfaqe si pajisje, prandaj ai model nuk ka ekuivalent në atë anë.
Provoni rrugën, pastaj zgjidhni një dizajn
Mblidhni prova nga hosti, jo nga kontejneri, sepse hosti e kryen kërkimin:
docker network inspect nat --format "{{range .IPAM.Config}}{{.Subnet}}{{end}}"
route print -4
Get-NetRoute -AddressFamily IPv4 | Where-Object DestinationPrefix -like "172.16.*"
Ekzekutoni daljen e rrugëve një herë përpara se VPN të lidhet dhe një herë pas. Nëse në daljen e dytë prefiksi i kontejnerit tregon përshtatësin e tunelit, diagnoza është e plotë dhe rinisja e kontejnerëve nuk do të ndihmojë.
Opsioni i parë është një vendim politike: pyesni pronarin e rrjetit nëse aksesi në LAN-in lokal mund të lejohet për këtë pajisje. Disa klientë korporativë e ofrojnë atë si cilësim, por dobëson një kufi të qëllimshëm. Kërkoni atë si një përjashtim të dokumentuar me pronar dhe datë rishikimi. Një çelës për çdo pajisje ku askush nuk kthehet është mënyra se si një politikë mbrojtëse zhduket në heshtje.
Aty ku politika duhet të qëndrojë, zhvendosni ngarkesën në vend që të luftoni me rrugën. Një rrjet transparent me nënrrjet dhe portë të qartë i vendos kontejnerët në lidhjen lokale, një ngarkesë Linux ekzekutohet pas proxy-t të makinës virtuale, dhe një makinë virtuale e veçantë me klientin e vet ruan politikën e vet. Zgjidhni një me qëllim dhe provojeni nga brenda kontejnerit, sepse aty lind kërkesa e përdoruesit.