Два различита питања долазе заједно сваки пут када виртуелна машина покрене 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, јер та три факта одговарају на скоро свако касније питање. Други хипервизори преименују режиме и остављају принцип нетакнут.

Повезани чланци