VirtualBox NAT അല്ലെങ്കിൽ ബ്രിഡ്ജ്: VM-ന്റെ VPN എവിടെ അവസാനിക്കുന്നു
NAT അതിഥിയെ ഹോസ്റ്റിന് പിന്നിൽ ഒളിപ്പിക്കുന്നു, അതിനാൽ ഹോസ്റ്റിലെ ടണൽ അതിനെ മൂടുന്നു. ബ്രിഡ്ജ് അതിഥിക്ക് സ്വന്തം വിലാസം നൽകുന്നു, അതിനാൽ ടണൽ VM-നുള്ളിൽ തന്നെ ആയിരിക്കണം.
ഒരു വെർച്വൽ മെഷീൻ VPN ക്ലയന്റ് പ്രവർത്തിപ്പിക്കുമ്പോഴെല്ലാം രണ്ട് വ്യത്യസ്ത ചോദ്യങ്ങൾ ഒരുമിച്ച് വരുന്നു, അവയുടെ ഉത്തരങ്ങളും വ്യത്യസ്തമാണ്. ആദ്യത്തേത് അതിഥിക്കുള്ളിലെ ടണൽ ഹോസ്റ്റിനെ സംരക്ഷിക്കുന്നുണ്ടോ എന്നതാണ്, രണ്ടാമത്തേത് ഹോസ്റ്റിലെ ടണൽ അതിഥിയെ മൂടുന്നുണ്ടോ എന്നതും. അഡാപ്റ്റർ മോഡാണ് രണ്ടും നിർണ്ണയിക്കുന്നത്, VPN സോഫ്റ്റ്വെയറിനേക്കാൾ കൂടുതലായി. NAT അഡാപ്റ്റർ ഹോസ്റ്റിനെ കാണാവുന്ന അന്ത്യബിന്ദുവാക്കുന്നു, ബ്രിഡ്ജ് അഡാപ്റ്റർ അതിഥിയെ സ്വന്തം വിലാസത്തോടെ നെറ്റ്വർക്കിൽ ഇടുന്നു.
എൻക്രിപ്റ്റ് ചെയ്ത സെഷൻ യഥാർത്ഥത്തിൽ അവസാനിപ്പിക്കുന്നത് ആരാണ്
എൻക്രിപ്റ്റ് ചെയ്ത സെഷൻ അത് അവസാനിപ്പിക്കുന്ന യന്ത്രത്തിനാണ്, ക്ലയന്റ് VM-നുള്ളിൽ പ്രവർത്തിക്കുമ്പോൾ അത് അതിഥിയാണ്. ആ ടണലിലൂടെ കടന്നുപോകുന്നത് അതിഥിയുടെ വെർച്വൽ അഡാപ്റ്ററിലേക്ക് പ്രവേശിക്കുന്ന ട്രാഫിക് മാത്രമാണ്, ഹൈപ്പർവൈസർ ഒരിക്കലും സ്വയം മറ്റൊരു യന്ത്രത്തെ അതിഥിയിലൂടെ കടത്തിവിടുന്നില്ല. അതുകൊണ്ടാണ് അതിഥിക്ക് പ്രവർത്തിക്കുന്ന ടണൽ നിലനിർത്താൻ കഴിയുന്നത്, ഹോസ്റ്റ് തുറന്ന നെറ്റ്വർക്കിൽ ബ്രൗസ് ചെയ്യുമ്പോൾ. വിപരീത ദിശ സമമിതമല്ല, ഈ അസമമിതിയാണ് മിക്ക ഗൈഡുകളും തെറ്റിക്കുന്ന ഭാഗം.
പുറം നെറ്റ്വർക്ക് ആരുടെ വിലാസമാണ് കാണുന്നത് എന്ന ചോദ്യത്തിന് ഉത്തരം നൽകുന്നത് അഡാപ്റ്റർ മോഡാണ്. അത് തീർപ്പായാൽ കവറേജ് ഒരു നയപ്രശ്നമല്ലാതായി യാന്ത്രികമായി മാറുന്നു. താഴെയുള്ളതെല്ലാം ആ രണ്ട് വസ്തുതകളിൽ നിന്ന് വരുന്നു.
NAT അതിഥിയെ ഹോസ്റ്റ് പോലെ തോന്നുന്നതുവരെ വീണ്ടും എഴുതുന്നു
NAT-ൽ, ആദ്യ സ്വിച്ചിൽ എത്തുന്നതിന് മുൻപേ ഹൈപ്പർവൈസർ അതിഥിയുടെ ഓരോ പാക്കറ്റും ഹോസ്റ്റിന്റെ വിലാസത്തിലേക്ക് വീണ്ടും എഴുതുന്നു. പിന്നീട് ആ ട്രാഫിക് ഹോസ്റ്റിന്റെ സ്വന്തം നെറ്റ്വർക്ക് സ്റ്റാക്കിന് നൽകപ്പെടുന്നു, അവിടെ അത് ഹോസ്റ്റിന്റെ റൂട്ടിംഗ് പട്ടിക പിന്തുടരുന്നു, ഹോസ്റ്റിലെ ടണലിന്റെ ഉടമസ്ഥതയിലുള്ള ഡിഫോൾട്ട് റൂട്ട് ഉൾപ്പെടെ. അതിനാൽ NAT അതിഥി ഒരു ക്രമീകരണവുമില്ലാതെ ഹോസ്റ്റിലെ ടണലാൽ മൂടപ്പെടുന്നു, ഇത് അതിഥിയിൽ നിന്ന് ഹോസ്റ്റിലേക്കുള്ള ദിശ സൂചിപ്പിക്കുന്നതിന്റെ വിപരീതമാണ്.
# on the host: adapter mode and NAT DNS behaviour
VBoxManage showvminfo "lab-vm" | grep -i -E "nic|nat"
VBoxManage modifyvm "lab-vm" --natdnshostresolver1 on
സ്വന്തം ക്ലയന്റ് പ്രവർത്തിപ്പിക്കുന്ന അതിഥി ആ ടണൽ അതിഥിക്കുള്ളിൽ തന്നെ അവസാനിപ്പിക്കുന്നു, എൻക്രിപ്റ്റ് ചെയ്ത ട്രാഫിക് അതേ പുനരെഴുത്തിലൂടെ പുറത്തുപോകുന്നു, അതിനാൽ ഹോസ്റ്റിലെ അപ്ലിക്കേഷനുകൾ അവയുടെ വഴിയും പുറത്തുകടക്കുന്ന വിലാസവും നിലനിർത്തുന്നു. ഈ മോഡിൽ VirtualBox നാമപരിഹാരത്തിന്റെയും ഉടമയാണ്, --natdnshostresolver1 സജീവമല്ലെങ്കിൽ അതിഥിയുടെ ചോദ്യങ്ങൾ അതിന്റെ സ്വന്തം എഞ്ചിൻ വഴി കൈമാറുന്നു. അത് സജീവമാക്കിയാൽ അതിഥിയുടെ തിരച്ചിലുകൾ ഹോസ്റ്റിന്റെ റിസോൾവറിലേക്ക് പോകുന്നു, ഇത് ഹോസ്റ്റിന്റെ സ്വന്തം കാഴ്ച ശരിയായിരിക്കുമ്പോൾ പരിഹാരം തിരുത്തുന്നു, അതേ അളവിൽ ടണലിനുള്ളിൽ മാത്രം നിലനിൽക്കാവുന്ന ഒരു റിസോൾവറും കൈമാറുന്നു. ക്രമീകരണം മാറ്റുന്നതിന് മുൻപ് VM ഓഫാക്കണം, ക്രമീകരണം അതിഥിയുടെ സോഫ്റ്റ്വെയറിന്റേതല്ല, അഡാപ്റ്ററിന്റേതാണ്.
ബ്രിഡ്ജ് അതിഥിക്ക് സ്വന്തം പാട്ടവും സ്വന്തം വെളിപ്പെടലും നൽകുന്നു
ബ്രിഡ്ജ് അതിഥിയുടെ ഫ്രെയിമുകൾ ഭൗതിക സെഗ്മെന്റിലേക്ക് കടത്തുന്നു, അതിനാൽ DHCP അതിന് പാട്ടം നൽകുന്നു, നെറ്റ്വർക്ക് അതിനെ പ്രത്യേക ഹോസ്റ്റായി കണക്കാക്കുന്നു. ബ്രിഡ്ജ് ചെയ്ത ഓരോ അതിഥിക്കും സ്വന്തം ഡിഫോൾട്ട് റൂട്ടുള്ള സ്വതന്ത്ര ടണൽ നിലനിർത്താം, ഹോസ്റ്റിന്റെ പട്ടിക ഒരിക്കലും മാറുന്നില്ല. വില വെളിപ്പെടലാണ്: അതിഥി ബ്രോഡ്കാസ്റ്റുകൾക്ക് ഉത്തരം നൽകുന്നു, അയൽവാസി പട്ടികകളിൽ പ്രത്യക്ഷപ്പെടുന്നു, സ്വിച്ച് പോർട്ട് സുരക്ഷയുടെയും വയർലെസ് ക്ലയന്റുകളുടെ ഒറ്റപ്പെടുത്തലിന്റെയും കീഴിലാകുന്നു. ഹോസ്റ്റിലെ ടണലും ഈ ക്രമീകരണം മൂടുന്നില്ല, കാരണം അതിഥിയുടെ ഫ്രെയിമുകൾ ഒരിക്കലും ഹോസ്റ്റ് സ്റ്റാക്കിലൂടെ പോകുന്നില്ല.
NAT കേസിൽ നിന്നുള്ള ഈ വ്യത്യാസം സൂചനയായി വിടാതെ വ്യക്തമായി പറയേണ്ടതാണ്. ബ്രിഡ്ജ് ചെയ്ത അതിഥിക്ക് അതിന്റെ ട്രാഫിക് ടണൽ ഉപയോഗിക്കേണ്ടിവരുമ്പോഴെല്ലാം സ്വന്തം ക്ലയന്റും സ്വന്തം ക്രെഡൻഷ്യലുകളും വേണം. അതിഥി പ്രാദേശിക നെറ്റ്വർക്കിന് അദൃശ്യമായി നിൽക്കേണ്ടിടത്ത്, NAT അല്ലെങ്കിൽ നിയന്ത്രിത റൂട്ടിംഗുള്ള ആന്തരിക-മാത്രം നെറ്റ്വർക്കാണ് മികച്ച രൂപകൽപ്പന.
അതിഥിക്ക് ഹോസ്റ്റിന്റെ ഗേറ്റ്വേ ആകാൻ കഴിയാത്തത് എന്തുകൊണ്ട്
അതിഥിയുടെ ടണൽ ഹോസ്റ്റിന് കടം കൊടുക്കാൻ രണ്ട് വലിയ ഹൈപ്പർവൈസറുകളിലും പിന്തുണയുള്ള സ്വിച്ചില്ല. ഹോസ്റ്റിന് അതിഥിയുടെ ടണലിലേക്ക് റൂട്ടില്ല, അതിലേക്ക് ചൂണ്ടുന്ന വിവർത്തന നിയമവുമില്ല, അതിനാൽ അതിഥിയുടെയും ഹോസ്റ്റിന്റെയും ട്രാഫിക് വേറിട്ട ഉടമകളുള്ള വേറിട്ട പ്രവാഹങ്ങളായി തുടരുന്നു. ഈ ദിശ അഡാപ്റ്റർ മോഡ് ഏതായാലും പരാജയപ്പെടുന്നു.
പ്രായോഗിക പകരക്കാർ ഫോർവേഡിംഗും പ്രോക്സികളുമാണ്. SSH ലോക്കൽ ഫോർവേഡിംഗ് ഹോസ്റ്റിനെ സ്വന്തം ലൂപ്പ്ബാക്കിലേക്ക് ബന്ധിപ്പിക്കാൻ അനുവദിക്കുന്നു, അതിഥി പ്രവാഹം ടണലിലേക്ക് കൊണ്ടുപോകുമ്പോൾ, ഇത് രണ്ടാമതൊരു ക്ലയന്റ് ഇൻസ്റ്റാൾ ചെയ്യാതെ TCP സേവനങ്ങൾ മൂടുന്നു. ഹോസ്റ്റിന്റെ സ്വന്തം IP ട്രാഫിക് പകരം അതിഥിയുടെ ടണൽ ഉപയോഗിക്കാൻ ആക്കാൻ അതിഥിക്കുള്ളിൽ ഒരു റൗട്ടർ, കൂടാതെ ഹോസ്റ്റിൽ വ്യക്തമായ ഒരു റൂട്ടും ഹോസ്റ്റിൽ വിവർത്തനവും ആവശ്യമാണ്. അത് ഒരു ചെക്ക്ബോക്സല്ല, ചെറിയ ഒരു നെറ്റ്വർക്ക് രൂപകൽപ്പനയാണ്, തിരികെ വരുന്ന വഴിക്ക് ഒരു പദ്ധതിയും വേണം. അതിഥി ക്ലയന്റ് പ്രവർത്തിപ്പിക്കാൻ മാത്രമാണെങ്കിൽ, ക്ലയന്റ് ഹോസ്റ്റിൽ ഇട്ട് അധികമുള്ള ചവിട്ടുപടി നീക്കം ചെയ്യുക.
ssh -N -f -L 8080:internal-host.example:80 user@lab-vm
റിസോൾവറുകളും റൂട്ടുകളും അതിർത്തി കടക്കുന്നില്ല
DNS ഓപ്ഷൻ സ്വീകരിച്ച അഡാപ്റ്ററിനെ പിന്തുടരുന്നു, അതിനാൽ അതിഥി ഹോസ്റ്റിന്റെ ടണൽ റിസോൾവർ പാരമ്പര്യമായി നേടുന്നില്ല, ഹോസ്റ്റ് അതിഥിക്ക് തള്ളിയ സെർവറും അറിയുന്നില്ല. തള്ളിയ dhcp-option DNS മൂല്യങ്ങൾ അവ സ്വീകരിച്ച ഇന്റർഫേസിന് ബാധകമാണ്, അതിനാൽ ക്ലയന്റില്ലാത്ത ബ്രിഡ്ജ് അതിഥിക്ക് ആന്തരിക നാമങ്ങൾ പരിഹരിക്കാനാവില്ല. NAT അതിഥി സാധാരണയായി ഹൈപ്പർവൈസറിന്റെ DNS കൈകാര്യം ഉപയോഗിക്കുന്നു, വ്യത്യാസം ഓരോ പരിതസ്ഥിതിയിലും ഒരു കമാൻഡിൽ കാണാം.
# on the host
VBoxManage showvminfo "lab-vm" | grep -i -E "nic|nat"
# inside a Linux guest
ip -4 route
resolvectl status
# inside a Windows guest
Get-DnsClientServerAddress
ഒന്ന് ഹോസ്റ്റിനെ പിന്തുടരുന്നു എന്ന് അനുമാനിക്കുന്നതിന് മുൻപ് അതിഥിക്കുള്ളിൽ റിസോൾവറും റൂട്ടും വായിക്കുക. ആന്തരിക നാമങ്ങൾ അവിടെ പരിഹരിക്കേണ്ടതുണ്ടെങ്കിൽ ടണൽ റിസോൾവർ അതിഥിയുടെ സ്വന്തം അഡാപ്റ്ററിൽ ചേർക്കുക, എന്നിട്ട് ടണലിന് പിന്നിൽ മാത്രം നിലനിൽക്കുന്ന ഒരു നാമത്തോടെ പരിശോധിക്കുക. ഓരോ VM-നും അഡാപ്റ്റർ മോഡ്, ടണലിന്റെ ഉടമ, റിസോൾവറിന്റെ ഉറവിടം എന്നിവ രേഖപ്പെടുത്തുക, കാരണം ആ മൂന്ന് വസ്തുതകൾ പിന്നീടുള്ള ഏതാണ്ട് എല്ലാ ചോദ്യത്തിനും ഉത്തരം നൽകുന്നു. മറ്റ് ഹൈപ്പർവൈസറുകൾ മോഡുകളുടെ പേര് മാറ്റുന്നു, തത്വം അതേപടി നിലനിർത്തുന്നു.