Yhdellä kannettavalla, kun yksi VPN-asiakasohjelma on yhdistetty, Linux-säiliöt jatkavat keskinäistä keskustelua ja Windows-säiliöt pysähtyvät. Muuttuja ei ole levykuva, vaan reitti, jota paketit kulkevat isäntäkoneeseen. Oletusverkossa olevat Windows-säiliöt lainaavat isäntäkoneen reititystaulukkoa ja käännöstä, joten isäntäkoneen reititystä muuttava käytäntö muuttaa myös niitä. Vahvista tämä reittihaulla ennen kuin asennat mitään uudelleen.

Mihin Windows-säiliön paketit tulevat isäntäkoneeseen

Oletusverkossa nat oleva säiliö saa osoitteen Host Networking Service -palvelun etuliitteestä, yleensä jossakin 172.16.0.0/12 sisällä, ja saavuttaa isäntäkoneen virtuaalisen sovittimen kautta. Isäntäkone omistaa kyseisen etuliitteen reitin ja kääntää liikennettä siihen sovittimeen, joka on kulloinkin aktiivinen. Reitin keskellä ei ole erillistä virtuaalikonetta.

Juuri tämä rakenne tekee viasta mekaanisen. Kun säiliö lähettää paketin, isäntäkone tekee reittihaun säiliön etuliitteelle. Mikä reitti voittaa, sinne paketti menee, eikä säiliöllä ole siitä mielipidettä.

Mitä VPN-asiakasohjelma muuttaa tällä reitillä

Yritysasiakasohjelma asentaa usein laajan joukon reittejä ja suodattimen, joka estää pääsyn paikalliseen aliverkkoon tunnelin ollessa päällä. Tarkoitus on puolustuksellinen: vaarantuneen paikallisen verkon ei pitäisi päästä suojattuun koneeseen. Sivuvaikutus on, että isäntäkoneen reitti säiliön etuliitteeseen ei ole enää paikallinen NAT-verkko.

Sen sijaan haku osuu tunneliin ja paketti luovutetaan yhdyskäytävälle, joka ei ole koskaan kuullutkaan kyseisestä säiliöosoitteesta. Ping epäonnistuu, sovellus aikakatkaistaan ja säiliö näyttää rikkinäiseltä VPN-kuvakkeen hehkuessa. Katso isäntäkoneen taulukkoa yhteyden aikana, niin kilpaileva reitti näkyy.

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

Miksi Linux-säiliöt käyttäytyvät eri tavalla

Linux-moottori ajaa säiliöitä kevyen virtuaalikoneen sisällä, ja kyseisen koneen lähtevät yhteydet avaa isäntäkoneen puolella toimiva välityspalvelin säiliön puolesta. Isäntäkone aloittaa pistokkeen, joten VPN:n säännöt säiliön etuliitteestä eivät päde siihen samalla tavalla, ja työkuorma saavuttaa verkon edelleen.

Tämä ero selittää myös, miksi Linux-ohjeet eivät siirry sellaisenaan. Linux-säiliö, joka tarvitsee oman tunnelinsa, saa TUN-laitteen ja NET_ADMIN-ominaisuuden. Windows-säiliöt eivät paljasta mitään liitäntää laitteena, joten tällä mallilla ei ole vastinetta sillä puolella.

Todista reitti ja valitse sitten rakenne

Kerää todisteet isäntäkoneelta, älä säiliöstä, koska isäntäkone tekee haun:

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

Aja reittituloste kerran ennen kuin VPN yhdistyy ja kerran sen jälkeen. Jos säiliön etuliite osoittaa toisessa tulosteessa tunnelisovittimeen, diagnoosi on valmis, eikä säiliöiden uudelleenkäynnistys auta.

Ensimmäinen vaihtoehto on käytäntöpäätös: kysy verkon omistajalta, voidaanko paikallinen LAN-yhteys sallia tälle laitteelle. Useat yritysasiakasohjelmat tarjoavat sen asetuksena, mutta se heikentää tarkoituksellista rajaa. Pyydä sitä dokumentoituna poikkeuksena, jolla on omistaja ja tarkistuspäivä. Laittekohtainen kytkin, jonka ääreen kukaan ei palaa, on se tapa, jolla puolustuksellinen käytäntö katoaa hiljaa.

Missä käytännön on pysyttävä, siirrä työkuorma sen sijaan että taistelisit reittiä vastaan. Läpinäkyvä verkko, jossa on selkeä aliverkko ja yhdyskäytävä, sijoittaa säiliöt paikalliseen linkkiin, Linux-työkuorma ajetaan virtuaalikoneen välityspalvelimen takana, ja erillinen virtuaalikone, jolla on oma asiakasohjelmansa säilyttää oman käytäntönsä. Valitse yksi tarkoituksella ja testaa se säiliön sisältä, koska käyttäjän pyyntö syntyy siellä.

Aiheeseen liittyvät artikkelit