Kontena za Windows na VPN: kwa nini mtandao wa ndani huvunjika
Kontena ya Windows hutumia jedwali la njia la mwenyeji, kwa hiyo VPN inayozuia subnet ya ndani hubeba pamoja nayo kiambishi cha kontena. Hali ya Linux huchukua njia nyingine.
Kwenye laptop moja, ukiwa na mteja mmoja wa VPN aliyeunganishwa, kontena za Linux zinaendelea kuzungumza na kontena za Windows zinasimama. Kigezo si taswira; ni njia ambayo pakiti huchukua kuingia kwenye mwenyeji. Kontena za Windows kwenye mtandao chaguo-msingi hukopa jedwali la njia na tafsiri ya mwenyeji, kwa hiyo sera inayobadilisha uelekezaji wa mwenyeji huzibadilisha pia. Thibitisha hilo kwa utafutaji wa njia kabla ya kusakinisha upya kitu chochote.
Pakiti za kontena ya Windows huingia kwenye mwenyeji wapi
Kontena kwenye mtandao chaguo-msingi nat hupata anwani kutoka kiambishi cha huduma ya Host Networking Service, kwa kawaida mahali fulani ndani ya 172.16.0.0/12, na kumfikia mwenyeji kupitia adapta ya mtandaoni. Mwenyeji anamiliki njia ya kiambishi hicho na hutafsiri trafiki kuelekea adapta ambayo inatumika sasa. Hakuna mashine ya mtandaoni tofauti katikati ya njia hiyo.
Muundo huu ndio unaofanya hitilafu kuwa ya kimakanika. Kontena inapotuma pakiti, mwenyeji hufanya utafutaji wa njia kwa kiambishi cha kontena. Njia ipi itakayoshinda ndiyo pakiti inakoenda, na kontena haina maoni kuhusu hilo.
Mteja wa VPN hubadilisha nini kwenye njia hiyo
Mteja wa shirika mara nyingi husakinisha seti pana ya njia na kichujio kinachokataa ufikiaji wa subnet ya ndani wakati handaki inafanya kazi. Kusudi ni la ulinzi: mtandao wa ndani ulioathirika haupaswi kufikia mashine iliyolindwa. Athari ya pembeni ni kwamba njia ya mwenyeji kuelekea kiambishi cha kontena si tena mtandao wa NAT wa ndani.
Badala yake utafutaji unalingana na handaki na pakiti inakabidhiwa kwa lango, ambalo halijawahi kusikia anwani hiyo ya kontena. Ping inashindikana, programu inaisha muda, na kontena inaonekana imevunjika wakati aikoni ya VPN inang'aa. Angalia jedwali la mwenyeji ukiwa umeunganishwa na njia pinzani inaonekana.
| 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 |
Kwa nini kontena za Linux hujiendesha tofauti
Injini ya Linux huendesha kontena ndani ya mashine ya mtandaoni nyepesi, na miunganisho ya kutoka kwenye mashine hiyo hufunguliwa na proksi upande wa mwenyeji kwa niaba ya kontena. Mwenyeji ndiye anayeanzisha soketi, kwa hiyo kanuni ya VPN kuhusu kiambishi cha kontena haitumiki kwake kwa namna hiyo hiyo, na mzigo wa kazi unaendelea kufikia mtandao.
Tofauti hiyo pia inaeleza kwa nini mapishi ya Linux hayahamiki. Kontena ya Linux inayohitaji handaki yake yenyewe hupewa kifaa cha TUN pamoja na uwezo wa NET_ADMIN. Kontena za Windows hazionyeshi kiolesura chochote kama kifaa, kwa hiyo muundo huo hauna kifani upande huo.
Thibitisha njia, kisha chagua muundo
Kusanya ushahidi kutoka kwa mwenyeji, si kutoka kwa kontena, kwa sababu mwenyeji ndiye anayefanya utafutaji:
docker network inspect nat --format "{{range .IPAM.Config}}{{.Subnet}}{{end}}"
route print -4
Get-NetRoute -AddressFamily IPv4 | Where-Object DestinationPrefix -like "172.16.*"
Endesha matokeo ya njia mara moja kabla VPN kuunganishwa na mara moja baadaye. Ikiwa kwenye matokeo ya pili kiambishi cha kontena kinaelekeza kwenye adapta ya handaki, utambuzi umekamilika na kuanzisha upya kontena hakutasaidia.
Chaguo la kwanza ni uamuzi wa sera: muulize mmiliki wa mtandao ikiwa ufikiaji wa LAN ya ndani unaweza kuruhusiwa kwa kifaa hiki. Wateja kadhaa wa shirika hutoa hilo kama mpangilio, lakini hudhoofisha mpaka uliokusudiwa. Liombe kama msamaha ulioandikwa ukiwa na mmiliki na tarehe ya mapitio. Kitufe cha kila kifaa ambacho hakuna anayerejea ni njia ambayo sera ya ulinzi hutoweka kimya.
Mahali sera inapaswa kusimama, hamisha mzigo wa kazi badala ya kupigana na njia. Mtandao wazi wenye subnet na lango lililo wazi huweka kontena kwenye kiungo cha ndani, mzigo wa kazi wa Linux huendeshwa nyuma ya proksi ya mashine ya mtandaoni, na mashine ya mtandaoni tofauti yenye mteja wake huhifadhi sera yake mwenyewe. Chagua moja kwa makusudi na uijaribu kutoka ndani ya kontena, kwa sababu ombi la mtumiaji huanzia hapo.