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 ജോലിഭാരം VM പ്രോക്സിക്ക് പിന്നിൽ പ്രവർത്തിക്കുന്നു, കൂടാതെ സ്വന്തം ക്ലയന്റുള്ള വേറെ വെർച്വൽ മെഷീൻ സ്വന്തം നയം നിലനിർത്തുന്നു. ഒന്ന് ബോധപൂർവം തിരഞ്ഞെടുത്ത് കണ്ടെയ്നറിനുള്ളിൽ നിന്ന് പരിശോധിക്കുക, കാരണം ഉപയോക്താവിന്റെ അഭ്യർത്ഥന അവിടെയാണ് ഉത്ഭവിക്കുന്നത്.