Windows контейнерлері және VPN: жергілікті желі неге үзіледі
Windows контейнері хосттың маршруттау кестесін пайдаланады, сондықтан жергілікті қосымша желіні блоктайтын VPN контейнер префиксін де алып кетеді. Linux режимі басқа жолмен жүреді.
Бір ноутбукте, бір қосылған VPN клиентімен, Linux контейнерлері бір-бірімен сөйлесуді жалғастырады, ал Windows контейнерлері тоқтайды. Айнымалы бейне емес, пакеттердің хостқа кіретін жолы. Әдепкі желідегі Windows контейнерлері хосттың маршруттау кестесі мен трансляциясын қарызға алады, сондықтан хосттың маршруттауын өзгертетін саясат оларды да өзгертеді. Кез келген нәрсені қайта орнатудан бұрын мұны маршрут іздеуімен растаңыз.
Windows контейнерінің пакеттері хостқа қайдан кіреді
Әдепкі nat желісіндегі контейнер Host Networking Service префиксінен мекенжай алады, әдетте 172.16.0.0/12 ішінде бір жерден, және виртуалды адаптер арқылы хостқа жетеді. Хост сол префикстің маршрутын иеленеді және трафикті қазір белсенді адаптерге қарай аударады. Бұл жолдың ортасында бөлек виртуалды машина жоқ.
Дәл осы дизайн ақаулықты механикалық етеді. Контейнер пакет жібергенде, хост контейнер префиксі үшін маршрут іздеуін орындайды. Қай маршрут жеңсе, пакет сонда кетеді, ал контейнердің бұған пікірі жоқ.
VPN клиенті бұл жолда нені өзгертеді
Корпоративтік клиент көбінесе маршруттардың кең жиынтығын және туннель қосулы кезде жергілікті қосымша желіге қатынауды қабылдамайтын сүзгіні орнатады. Ниет қорғаныстық: зақымдалған жергілікті желі қорғалған машинаға жетпеуі керек. Жанама әсері — хосттың контейнер префиксіне арналған маршруты енді жергілікті NAT желісі емес.
Оның орнына іздеу туннельге сәйкес келеді және пакет сол контейнер мекенжайы туралы ешқашан естімеген қақпаға беріледі. Ping сәтсіз аяқталады, қолданба уақыты бітеді және VPN белгішесі жарқырап тұрғанда контейнер сынған болып көрінеді. Қосылған кезде хосттың кестесін қараңыз, бәсекелес маршрут көрінеді.
| 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 контейнерлері неге басқаша әрекет етеді
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 жүктемесі виртуалды машина проксиінің артында жүреді және өз клиенті бар бөлек виртуалды машина өз саясатын сақтайды. Біреуін әдейі таңдап, оны контейнердің ішінен сынап көріңіз, өйткені пайдаланушы сұранысы дәл сонда туындайды.