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 работното оптоварување работи зад проксито на виртуелната машина, и посебна виртуелна машина со сопствен клиент ја задржува сопствената политика. Изберете една намерно и тестирајте ја од внатрешноста на контејнерот, бидејќи таму настанува барањето на корисникот.