VirtualBox NAT au daraja: VPN ya VM inaishia wapi
NAT huficha mgeni nyuma ya mwenyeji, kwa hiyo handaki kwenye mwenyeji humfunika. Daraja humpa mgeni anwani yake, kwa hiyo handaki lazima liishi ndani ya VM.
Maswali mawili tofauti huja pamoja kila wakati mashine pepe inapoendesha mteja wa VPN, na majibu yao ni tofauti. La kwanza ni kama handaki ndani ya mgeni linamlinda mwenyeji, na la pili ni kama handaki kwenye mwenyeji linamfunika mgeni. Hali ya adapta huamua yote mawili, kuliko programu ya VPN yenyewe. Adapta ya NAT humfanya mwenyeji kuwa mwisho unaoonekana, wakati adapta ya daraja humweka mgeni kwenye mtandao na anwani yake mwenyewe.
Nani kwa kweli hukamilisha kikao kilichosimbwa
Kikao kilichosimbwa ni cha mashine inayokikamilisha, na huyo ni mgeni wakati mteja anaendesha ndani ya VM. Ni trafiki inayoingia kwenye adapta pepe ya mgeni pekee inayopita handaki hilo, na hypervisor kamwe haiuelekezi mashine nyingine kupitia mgeni kwa hiari yake. Ndiyo sababu mgeni anaweza kushikilia handaki linalofanya kazi wakati mwenyeji anavinjari kwenye mtandao wazi. Kinyume chake si linganifu, na upendeleo huo ndio sehemu ambayo miongozo mingi huikosea.
Anwani ya nani inayoonekana na mtandao wa nje ni swali ambalo hali ya adapta hujibu. Mara hilo linapobainika, ufunikaji huacha kuwa suala la sera na huwa la kiufundi. Kila kitu kilicho hapa chini kinatokana na mambo hayo mawili.
NAT huandika upya mgeni hadi aonekane kama mwenyeji
Kwa NAT, hypervisor huandika upya kila pakiti ya mgeni kwenda anwani ya mwenyeji kabla haijafika kwenye swichi ya kwanza. Trafiki hiyo hupewa staki ya mtandao ya mwenyeji mwenyewe, ambako hufuata jedwali lake la njia, ikiwa ni pamoja na njia chaguo-msingi inayomilikiwa na handaki kwenye mwenyeji. Kwa hiyo mgeni wa NAT hufunikwa na handaki kwenye mwenyeji bila usanidi wowote, jambo ambalo ni kinyume cha kile kinachodokezwa na upande kutoka mgeni kwenda mwenyeji.
# on the host: adapter mode and NAT DNS behaviour
VBoxManage showvminfo "lab-vm" | grep -i -E "nic|nat"
VBoxManage modifyvm "lab-vm" --natdnshostresolver1 on
Mgeni anayeendesha mteja wake mwenyewe hukamilisha handaki hilo ndani ya mgeni, na trafiki iliyosimbwa hukatiza kwa uandikaji-upya huo huo, kwa hiyo programu za mwenyeji huhifadhi njia yao na anwani yao ya kutokea. VirtualBox pia inamiliki utatuzi wa majina katika hali hii, ikipitisha maswali ya mgeni kupitia injini yake isipokuwa --natdnshostresolver1 imewezeshwa. Kuiwezesha hukabidhi utafutaji wa mgeni kwa kitatuzi cha mwenyeji, jambo ambalo hurekebisha utatuzi wakati mtazamo wa mwenyeji mwenyewe ni sahihi na vilevile hukabidhi kitatuzi ambacho kinaweza kuwepo ndani ya handaki pekee. VM lazima izimwe kabla ya kubadilisha mpangilio, na mpangilio ni wa adapta si wa programu ya mgeni.
Daraja humpa mgeni kodi yake na mfichuo wake mwenyewe
Daraja hupitisha fremu za mgeni kwenda sehemu ya kimwili, kwa hiyo DHCP humpa kodi na mtandao humchukulia kama mwenyeji tofauti. Kila mgeni aliyedarakishwa anaweza kushikilia handaki huru na njia yake ya chaguo-msingi, na jedwali la mwenyeji halibadiliki kamwe. Gharama ni mfichuo: mgeni hujibu matangazo, huonekana kwenye majedwali ya majirani, na huwa chini ya usalama wa bandari za swichi na utengano wa wateja wasio na waya. Handaki kwenye mwenyeji pia halifuniki mpangilio huu, kwa sababu fremu za mgeni kamwe hazipiti kwenye staki ya mwenyeji.
Tofauti hiyo na kisa cha NAT inafaa kusemwa waziwazi badala ya kuachwa kama dokezo. Mgeni aliyedarakishwa anahitaji mteja wake mwenyewe na vitambulisho vyake mwenyewe kila wakati trafiki yake inapaswa kutumia handaki. Pale mgeni anapopaswa kubaki asionekane kwa mtandao wa ndani, NAT au mtandao wa ndani pekee wenye uelekezaji unaodhibitiwa ndio muundo bora.
Kwa nini mgeni hawezi kuwa lango la mwenyeji
Kukopesha handaki la mgeni kwa mwenyeji hakuna swichi inayotumika katika hypervisor kubwa mbili. Mwenyeji hana njia kuingia kwenye handaki la mgeni wala kanuni ya tafsiri inayoelekea huko, kwa hiyo trafiki ya mgeni na mwenyeji hubaki mikondo tofauti na wamiliki tofauti. Mwelekeo huo hushindwa bila kujali hali ya adapta.
Vibadala vinavyofanya kazi ni upelekaji na wakala. Upelekaji wa ndani wa SSH humruhusu mwenyeji kuunganisha kwenye loopback yake wakati mgeni anabeba mkondo kwenye handaki, jambo ambalo hufunika huduma za TCP bila kufunga mteja wa pili. Kuufanya trafiki ya IP ya mwenyeji mwenyewe kutumia handaki la mgeni badala yake kunahitaji kipitishaji ndani ya mgeni pamoja na njia iliyo wazi kwenye mwenyeji na tafsiri kwenye mwenyeji. Huo ni muundo mdogo wa mtandao na si kisanduku cha tiki, na unahitaji mpango wa njia ya kurudi. Wakati mgeni yupo kwa ajili ya kuendesha mteja pekee, weka mteja kwenye mwenyeji na uondoe hatua ya ziada.
ssh -N -f -L 8080:internal-host.example:80 user@lab-vm
Vitatuzi na njia hazivuki mpaka
DNS hufuata adapta iliyopokea chaguo, kwa hiyo mgeni harithi kitatuzi cha handaki cha mwenyeji na mwenyeji hajui kamwe seva iliyosukumwa kwa mgeni. Thamani za dhcp-option DNS zilizosukumwa zinatumika kwa kiolesura kilichozikubali, na ndiyo sababu mgeni aliyedarakishwa bila mteja hawezi kutatua majina ya ndani. Mgeni wa NAT kwa kawaida hutumia ushughulikiaji wa DNS wa hypervisor, na tofauti huonekana kwa amri moja kwa kila mazingira.
# 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
Soma kitatuzi na njia ndani ya mgeni kabla ya kudhani kwamba kimoja chao kinafuata mwenyeji. Ongeza kitatuzi cha handaki kwenye adapta ya mgeni mwenyewe wakati majina ya ndani yanapaswa kutatuliwa hapo, kisha thibitisha kwa jina ambalo lipo nyuma ya handaki pekee. Andika hali ya adapta, mmiliki wa handaki na chanzo cha kitatuzi kwa kila VM, kwa sababu mambo hayo matatu hujibu karibu kila swali la baadaye. Hypervisor nyingine hubadilisha majina ya hali na kuacha kanuni ikiwa sawa.