VPN-നായുള്ള Linux നെറ്റ്വർക്ക് നെയിംസ്പേസുകൾ: അവ എന്തിനെ വേർതിരിക്കുന്നില്ല
നെയിംസ്പേസ് ഇന്റർഫേസുകളും റൂട്ടുകളും സോക്കറ്റുകളും നീക്കുന്നു, ഫയലുകളോ അക്കൗണ്ടുകളോ അല്ല. സ്വന്തം netns-ൽ ഒരു VPN എന്തു ഉൾക്കൊള്ളുന്നു, ട്രാഫിക് എവിടെ നിന്ന് ഇപ്പോഴും പുറത്തുപോകുന്നു എന്നത് ഇവിടെ കാണാം.
VPN അതിന്റെ സ്വന്തം നെയിംസ്പേസിനുള്ളിൽ ആരംഭിക്കുക, അവിടെ ഒരു ആപ്ലിക്കേഷൻ പ്രവർത്തിപ്പിക്കുക, ട്രാഫിക് ഇപ്പോഴും ഹോസ്റ്റ് റൂട്ടിലൂടെ പുറത്തുപോകുന്നു. ഒന്നും തകർന്നിട്ടില്ല: നെയിംസ്പേസ് അതിലേക്ക് പ്രവേശിക്കുന്ന പ്രോസസുകളെ മാത്രം നിയന്ത്രിക്കുന്നു, ചോർച്ച ഒരിക്കലും പ്രവേശിക്കാത്ത ഒരു പ്രോസസിൽ നിന്നാണ് വന്നത്. ഇന്റർഫേസുകൾ, വിലാസങ്ങൾ, റൂട്ടുകൾ, ഫയർവാൾ നിയമങ്ങൾ, സോക്കറ്റുകൾ എന്നിവയാണ് നെയിംസ്പേസിന്റെ ഉടമസ്ഥതയിലുള്ളത്. ഫയലുകൾ, അക്കൗണ്ടുകൾ, ഇപ്പോൾ പ്രവർത്തിക്കുന്ന സേവനങ്ങൾ എന്നിവ അല്ല, അതിൽ നിന്നാണ് കൂടുതൽ അത്ഭുതങ്ങൾ വരുന്നത്.
നെയിംസ്പേസ് എന്താണ് ഉടമസ്ഥതയിൽ വയ്ക്കുന്നത്, സോക്കറ്റ് എവിടെ ജനിക്കുന്നു
ഒരു ഇന്റർഫേസ് നെയിംസ്പേസിലേക്ക് നീക്കുക, ഹോസ്റ്റ് അത് നഷ്ടപ്പെടും; ഉള്ളിൽ ഒരു ടണൽ നിർമ്മിക്കുക, ഹോസ്റ്റിന് അത് കാണാൻ കഴിയില്ല. ഇതാണ് നെയിംസ്പേസ് പരിധിയിലുള്ള VPN-ന്റെ സംവിധാനം: ഉപകരണവും അതിലേക്ക് ചൂണ്ടുന്ന റൂട്ടുകളും തിരഞ്ഞെടുത്ത പ്രോസസുകൾക്ക് മാത്രം എത്താൻ കഴിയുന്ന ഒരു സന്ദർഭത്തിൽ ജീവിക്കുന്നു. ഹോസ്റ്റ് അതിന്റെ സ്ഥിര റൂട്ട് നിലനിർത്തുന്നു, അതിനാൽ പുറത്തുള്ളതെല്ലാം അസ്പൃശ്യമായി തുടരുന്നു.
WireGuard-ന് സൃഷ്ടിയുടെ സന്ദർഭം നിലവിലെ സ്ഥാനം പോലെ തന്നെ പ്രധാനമാണ്: UDP സോക്കറ്റ് ഇന്റർഫേസ് സൃഷ്ടിച്ച അതേ നെയിംസ്പേസിൽ ബന്ധിക്കപ്പെടുന്നു, ഉപകരണം മറ്റൊടത്തേക്ക് മാറിയ ശേഷവും. എൻക്രിപ്റ്റ് ചെയ്ത പാക്കറ്റുകൾ ഏത് റൂട്ടിംഗ് പട്ടിക പിന്തുടരുന്നു എന്നത് ആ ജന്മസ്ഥലത്തെ ആശ്രയിച്ചിരിക്കുന്നു. സോക്കറ്റ് സഹയാത്രികനിലേക്ക് റൂട്ട് ഇല്ലാത്ത സന്ദർഭത്തിൽ തുടർന്നാൽ, ഇന്റർഫേസ് തിരയുന്നു, കൈകൊടുക്കൽ ഒരിക്കലും പുറത്തുപോകുന്നില്ല. ആദ്യം അതിന്റെ ജന്മസ്ഥലം, പിന്നീട് നിലവിലെ സ്ഥാനം പരിശോധിക്കുക.
നെയിംസ്പേസ് എന്തിനെ വേർതിരിക്കുന്നില്ല
ഇവിടെ ഒന്നും ഫയൽ സിസ്റ്റങ്ങളെയോ അക്കൗണ്ടുകളെയോ രഹസ്യങ്ങളെയോ വേർതിരിക്കുന്നില്ല, നിങ്ങൾ ഒരു നെയിംസ്പേസ് സൃഷ്ടിച്ചതുകൊണ്ട് ആ അതിരുകളിൽ ഒന്നും പ്രത്യക്ഷപ്പെടുന്നുമില്ല. റിസോൾവർ കോൺഫിഗറേഷൻ ഒരു ഫയലാണ്, അതിനാൽ ഉള്ളിലെ ഒരു പ്രോസസിന് ഇപ്പോഴും ഹോസ്റ്റ് റിസോൾവറിലേക്ക് ചൂണ്ടുന്ന ഒരു ക്രമീകരണം വായിക്കാനും അത് സൂചിപ്പിക്കുന്ന റൂട്ടിലൂടെ തന്റെ ചോദ്യം പുറത്തയക്കാനും കഴിയും. അഭ്യർത്ഥനം ഇപ്പോൾ പ്രവർത്തിക്കുന്ന ഒരു ബ്രോക്കറിനോ സിസ്റ്റം സേവനത്തിനോ കൈമാറുന്ന ആപ്ലിക്കേഷൻ തികച്ചും വേറെ സന്ദർഭത്തിലെ ഒരു പ്രോസസിനെ ഉൾപ്പെടുത്തുന്നു. രണ്ടും അതിർത്തി ഉത്തരം നൽകാൻ ഒരിക്കലും ഉദ്ദേശിക്കാത്ത അഭ്യർത്ഥനകളാണ്.
പരിഹാരം /etc/netns/<name>/resolv.conf-ൽ ഓരോ നെയിംസ്പേസിനും ഒരു ഫയൽ, അല്ലെങ്കിൽ തയ്യാറാക്കിയ ഫയലിന്റെ bind mount, ഉള്ളിൽ നിന്ന് എത്താവുന്ന ഒരു റിസോൾവറിലേക്ക് ചൂണ്ടുന്നത്. ഹോസ്റ്റിലെ /etc/resolv.conf എഡിറ്റ് ചെയ്യുന്നത് നെയിംസ്പേസ് കാണുന്നതിൽ ഒന്നും മാറ്റുന്നില്ല.
പ്രോസസുകളുടെ സ്ഥാനനിർണ്ണയമാണ് നിയന്ത്രണം
നിങ്ങൾക്ക് ലഭിക്കുന്ന വേർതിരിവ് ഉള്ളിൽ നിങ്ങൾ ആരംഭിക്കുന്ന പ്രോസസുകളുടെ വേർതിരിവ് തന്നെയാണ്. നെയിംസ്പേസിന്റെ exec സഹായിയിലൂടെ ആരംഭിച്ച ഒരു ഷെൽ, അത് സൃഷ്ടിക്കുന്നതെല്ലാം ഉള്ളിൽ തുടരുന്നു; ഹോസ്റ്റ് സെഷനിൽ നിന്ന് ആരംഭിച്ച ഡെസ്ക്ടോപ്പ് ആപ്ലിക്കേഷൻ തുടരുന്നില്ല. സന്ദർഭം സൃഷ്ടിക്കുക, ഉപകരണം നീക്കുക, പിന്നീട് ഇരു വശങ്ങളും തെളിയിക്കുക:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
നെയിംസ്പേസിനുള്ളിൽ നിന്ന് ആദ്യത്തെ wg show ഉം ഹോസ്റ്റിൽ നിന്ന് രണ്ടാമത്തേതും വായിക്കുക, അവയിൽ ഒന്ന് മാത്രം സഹയാത്രികനെ പട്ടികപ്പെടുത്തുമെന്ന് പ്രതീക്ഷിക്കുക. രണ്ടും അങ്ങനെ ചെയ്താൽ ഉപകരണം ഒരിക്കലും നീങ്ങിയിട്ടില്ല; ഒന്നും ചെയ്തില്ലെങ്കിൽ അത് മറ്റൊടത്തേക്ക് പോയി. ലോഞ്ചർ ഒരു സേവന മാനേജർ ആണെങ്കിൽ എഡിറ്റ് ചെയ്യേണ്ടത് unit ഫയലാണ്, ഡെസ്ക്ടോപ്പ് കുറുക്കുവഴി അല്ല. നെയിംസ്പേസ് ക്രമീകരണമില്ലാത്ത unit ഡീമണിനെ ഹോസ്റ്റ് സന്ദർഭത്തിൽ ആരംഭിച്ച് രൂപകൽപ്പന നിശബ്ദമായി റദ്ദാക്കുന്നു.
ആപ്ലിക്കേഷന്റെ സന്ദർഭത്തിൽ നിന്ന് പരീക്ഷിക്കുക
ആപ്ലിക്കേഷൻ ഉപയോഗിക്കുന്ന അതേ ബൈനറിയും അതേ ഉപയോക്താവും ഉപയോഗിച്ച് നെയിംസ്പേസിനുള്ളിൽ പരിശോധന നടത്തുക. DNS-ഉം രണ്ട് വിലാസ കുടുംബങ്ങളും ഉൾപ്പെടുത്തുക, കാരണം നിങ്ങൾ ഒരിക്കലും ചിന്തിക്കാത്ത ഒരു IPv6 റൂട്ട് സാധാരണ പുറത്തുപോകാനുള്ള വഴിയാണ്. നിങ്ങളുടെ സ്വന്തം ഷെല്ലിൽ നിന്നുള്ള പരീക്ഷണം നിങ്ങളുടെ ഷെൽ വേർതിരിക്കപ്പെട്ടിരിക്കുന്നു എന്ന് മാത്രം തെളിയിക്കുന്നു.
പിന്നീട് ഹോസ്റ്റിൽ അതേ പരിശോധന നടത്തി ഉത്തരങ്ങൾ വ്യത്യസ്തമാണെന്ന് ഉറപ്പാക്കുക: ഉള്ളിൽ ടണൽ വിലാസവും ഉദ്ദേശിച്ച പുറത്തുപോകലും, പുറത്ത് ഹോസ്റ്റ് റൂട്ടും ഓഫീസ് പുറത്തുപോകലും, റിസോൾവർ പേരനുസരിച്ചും. നെയിംസ്പേസുകൾക്ക് പ്രോട്ടോക്കോളിന് പകരം വിന്യാസത്തിന് അനുസരിച്ച് പേരിടുക, ക്ലീനപ്പ് സ്ക്രിപ്റ്റ് രണ്ടെണ്ണം കൂട്ടിക്കുഴയ്ക്കാതിരിക്കാൻ.
ഫോർവേഡിംഗ്, പരാജയ നയം, ക്ലീനപ്പ്
ഗേറ്റ്വേയ്ക്ക് ഫോർവേഡിംഗ് ബോധപൂർവ്വം ഓണാക്കി ടണൽ വീഴുമ്പോൾ എന്ത് സംഭവിക്കണം എന്ന് തീരുമാനിക്കുക. നെയിംസ്പേസ് ഉള്ളിൽ ഇൻസ്റ്റാൾ ചെയ്യുന്ന റൂട്ടുകളെ തടയുന്നില്ല, അതിനാൽ ഹോസ്റ്റിലേക്ക് ഒരു ബദൽ റൂട്ട് ഉണ്ടാക്കിയാൽ അത് ഉപയോഗിക്കും. ഇത് ഒരു നയ തീരുമാനമാണ്, ഒരു തടസ്സം അത് പരീക്ഷിക്കുന്നതിന് മുൻപ് അത് എഴുതിവയ്ക്കണം.
നെയിംസ്പേസുകളുടെ പേരുകൾ, ഇന്റർഫേസുകൾ, കോൺഫിഗറേഷൻ ആരുടേതാണ് എന്നിവ രേഖപ്പെടുത്തുക, ക്ലീനപ്പ് വിന്യാസം സൃഷ്ടിച്ചത് മാത്രം നീക്കം ചെയ്യാൻ. റോൾബാക്കിനിടയിൽ ഹോസ്റ്റ് നെറ്റ്വർക്കിംഗ് റീസെറ്റ് ചെയ്യുന്നത് ക്ലീനപ്പിനെ തടസ്സമാക്കി മാറ്റുന്നു. network_namespaces(7) പേജ് ചെറുതാണ്, ആ വഴി രൂപകൽപ്പന ചെയ്യുന്നതിന് മുൻപ് വായിക്കാൻ യോഗ്യമാണ്.