Մեկ նոթբուքի վրա, մեկ միացված VPN հաճախորդով, Linux կոնտեյներները շարունակում են խոսել միմյանց հետ, իսկ Windows կոնտեյներները կանգ են առնում։ Փոփոխականը պատկերը չէ, այլ այն ուղին, որով փաթեթները մտնում են հոսթ։ Լռելյայն ցանցում Windows կոնտեյներները փոխառում են հոսթի երթուղիների աղյուսակը և թարգմանությունը, ուստի հոսթի երթուղավորումը փոխող քաղաքականությունը փոխում է նաև նրանց։ Հաստատեք դա երթուղու որոնմամբ, նախքան որևէ բան վերատեղադրելը։

Որտեղ են Windows կոնտեյների փաթեթները մտնում հոսթ

Լռելյայն nat ցանցի կոնտեյները հասցե է ստանում Host Networking Service-ի նախածանցից, սովորաբար ինչ-որ տեղ 172.16.0.0/12-ի ներսում, և հոսթին հասնում է վիրտուալ ադապտերի միջոցով։ Հոսթը տիրապետում է այդ նախածանցի երթուղուն և երթևեկությունը թարգմանում է դեպի այն ադապտերը, որն այժմ ակտիվ է։ Այդ ուղու մեջտեղում առանձին վիրտուալ մեքենա չկա։

Հենց այս ձևավորումն է խափանումը դարձնում մեխանիկական։ Երբ կոնտեյները փաթեթ է ուղարկում, հոսթը երթուղու որոնում է կատարում կոնտեյների նախածանցի համար։ Որ երթուղին հաղթի, այնտեղ է գնում փաթեթը, և կոնտեյները կարծիք չունի այդ մասին։

Ինչ է փոխում VPN հաճախորդը այդ ուղու վրա

Կորպորատիվ հաճախորդը հաճախ տեղադրում է երթուղիների լայն հավաքածու և զտիչ, որը մերժում է մուտքը տեղական ենթացանց թունելի ակտիվ ժամանակ։ Մտադրությունը պաշտպանական է. վնասված տեղական ցանցը չպետք է հասնի պաշտպանված մեքենայի։ Կողմնակի ազդեցությունն այն է, որ հոսթի երթուղին դեպի կոնտեյների նախածանց այլևս տեղական NAT ցանցը չէ։

Փոխարենը որոնումը համընկնում է թունելի հետ, և փաթեթը հանձնվում է դարպասին, որը երբեք չի լսել այդ կոնտեյների հասցեի մասին։ Ping-ը ձախողվում է, հավելվածը սպառում է ժամանակը, և կոնտեյները կոտրված է թվում, մինչ VPN պատկերակը փայլում է։ Նայեք հոսթի աղյուսակին, երբ միացված եք, և մրցակից երթուղին տեսանելի է։

Container modeOutbound pathTypical result behind the VPN
Windows, default natHost routes and translates container trafficContainer prefix follows the tunnel and fails
Windows, transparentContainer sits on the physical linkDepends on the local subnet being allowed
Linux engine on Docker DesktopVM egress proxied by a host processOften keeps working

Ինչու են Linux կոնտեյներներն այլ կերպ վարվում

Linux շարժիչը կոնտեյներներն աշխատեցնում է թեթև վիրտուալ մեքենայի ներսում, և այդ մեքենայից ելքային կապերը բացում է հոսթի կողմի վստահված սերվերը կոնտեյների անունից։ Հոսթն է սկսում սոքեթը, ուստի VPN-ի կանոնը կոնտեյների նախածանցի մասին նրա վրա նույն կերպ չի տարածվում, և աշխատանքային բեռը շարունակում է հասնել ցանցին։

Այս տարբերությունը նաև բացատրում է, թե ինչու Linux բաղադրատոմսերը չեն տեղափոխվում։ Սեփական թունելի կարիք ունեցող Linux կոնտեյները ստանում է TUN սարք և NET_ADMIN հնարավորություն։ Windows կոնտեյներները ոչ մի ինտերֆեյս սարք չեն ներկայացնում, ուստի այդ ձևանմուշն այդ կողմում համարժեք չունի։

Ապացուցեք երթուղին, ապա ընտրեք ձևավորում

Ապացույցները հավաքեք հոսթից, ոչ թե կոնտեյներից, որովհետև որոնումը կատարում է հոսթը:

docker network inspect nat --format "{{range .IPAM.Config}}{{.Subnet}}{{end}}"
route print -4
Get-NetRoute -AddressFamily IPv4 | Where-Object DestinationPrefix -like "172.16.*"

Գործարկեք երթուղիների ելքը մեկ անգամ VPN-ի միանալուց առաջ և մեկ անգամ դրանից հետո։ Եթե երկրորդ ելքում կոնտեյների նախածանցը ցույց է տալիս թունելի ադապտերը, ախտորոշումն ավարտված է, և կոնտեյներների վերագործարկումը չի օգնի։

Առաջին տարբերակը քաղաքականության որոշում է. հարցրեք ցանցի սեփականատիրոջը, թե արդյոք կարող է թույլատրվել տեղական LAN մուտքը այս սարքի համար։ Մի քանի կորպորատիվ հաճախորդ դա առաջարկում են որպես կարգավորում, բայց դա թուլացնում է դիտավորյալ սահմանը։ Պահանջեք այն որպես փաստաթղթավորված բացառություն՝ սեփականատիրոջ և վերանայման ամսաթվի հետ։ Յուրաքանչյուր սարքի համար նախատեսված անջատիչը, որին ոչ ոք չի վերադառնում, հենց այն ձևն է, որով պաշտպանական քաղաքականությունը լուռ անհետանում է։

Այնտեղ, որտեղ քաղաքականությունը պետք է մնա, տեղափոխեք աշխատանքային բեռը՝ երթուղու հետ կռվելու փոխարեն։ Հստակ ենթացանցով և դարպասով թափանցիկ ցանցը կոնտեյներները դնում է տեղական կապի վրա, Linux աշխատանքային բեռը աշխատում է վիրտուալ մեքենայի վստահված սերվերի հետևում, և առանձին վիրտուալ մեքենա՝ իր սեփական հաճախորդով պահպանում է իր սեփական քաղաքականությունը։ Ընտրեք մեկը դիտավորյալ և փորձարկեք այն կոնտեյների ներսից, որովհետև օգտվողի հարցումը հենց այնտեղ է ծագում։

Առնչվող հոդվածներ