O mașină virtuală Hyper-V folosește VPN-ul gazdei? Depinde de comutator
VPN-ul gazdei nu este o setare a întregii mașini. Tipul comutatorului decide dacă traficul oaspeților este punte, rutat prin gazdă sau izolat, iar asta schimbă răspunsul.
Instalați un client VPN pe gazda Hyper-V, deschideți acolo un browser și adresa de ieșire se schimbă; deschideți aceeași pagină în mașina virtuală și s-ar putea să arate adresa veche, sau nimic. Concluzia obișnuită este că mașina virtuală este defectă, sau că tunelarea divizată trebuie activată. Niciuna nu decurge. Un client VPN nu este o proprietate a mașinii; este un set de rute, un adaptor virtual și adesea un filtru legat de interfețe anume. Dacă traficul oaspeților întâlnește vreodată acel mecanism depinde de comutatorul virtual pe care îl folosește oaspetele.
Mitul, spus pe șleau
Credința este că un VPN instalat pe gazdă protejează întreaga mașină, inclusiv mașinile virtuale, pentru că o mașină virtuală este doar un proces care rulează pe acea mașină. Este o credință comodă, pentru că antivirusul și firewall-urile gazdei se comportă de obicei așa. Căile de rețea nu.
Cadrul unui oaspete este atins de stiva VPN a gazdei doar dacă gazda îl rutează sau îl filtrează. Copiați acea propoziție pe un bilețel, pentru că fiecare caz de mai jos este o variantă a ei.
Trei tipuri de comutator, trei căi
Un comutator extern leagă un adaptor virtual de o placă de rețea fizică, iar oaspetele trimite cadre prin acea legătură cu propria adresă MAC. Oaspetele devine un egal în rețeaua fizică, cu propria concesiune DHCP, gateway și servere DNS. Ruta implicită a VPN-ului gazdei trăiește în stiva gazdei și nu mișcă acele cadre, pentru că sunt punte și nu rutate prin gazdă. De aceea și un comutator extern peste un adaptor Wi-Fi este o idee proastă: majoritatea driverelor wireless nu transportă cadre pentru o a doua adresă MAC.
Un comutator intern conectează oaspeții la un adaptor virtual al gazdei. Singur nu oferă ieșire la internet; un obiect NAT pe gazdă asigură traducerea, așa cum este descris în ghidul NAT Hyper-V. Acum pachetele oaspetelui intră într-adevăr în rutarea și calea NAT a gazdei, așa că rutele și filtrele clientului VPN contează din nou. Aceasta este configurația în care mașina virtuală urmează cu adevărat VPN-ul gazdei și în care un kill switch poate tăia complet oaspetele.
Un comutator privat nu are adaptor de gazdă și nici legătură ascendentă. Oaspeții vorbesc între ei și cu nimic altceva, deci dacă o mașină virtuală de pe un comutator privat nu are internet, routerul lipsă este cauza, iar VPN-ul este irelevant.
Comutatorul implicit este o configurație separată
Windows oferă un comutator implicit care combină un comutator intern cu NAT și un proxy DNS. Subrețeaua lui este aleasă de gazdă, se poate schimba după reporniri și nu este același obiect ca o rețea NAT pe care o creați singur. Reconstruirea lui ca și cum ar fi o rețea de laborator este modul în care oamenii ajung cu două NAT-uri și un oaspete încă fără rută.
Dacă mașina virtuală stă pe comutatorul implicit, citiți adresa primită de oaspete și comparați-o cu tabelul NAT al gazdei înainte de a atinge clientul VPN. O nepotrivire între gateway-ul oaspetelui și prefixul NAT explică mai multe eșecuri decât orice setare a clientului.
Patru fapte care lămuresc întrebarea
Adunați acestea înainte de a schimba ceva: tipul comutatorului și legătura lui ascendentă, adaptorul atașat mașinii virtuale, adresa, gateway-ul și DNS-ul oaspetelui însuși, plus starea NAT și a rutei implicite a gazdei. Comenzile doar-citire sunt Get-VMSwitch, Get-VMNetworkAdapter -VMName "TestVM", Get-NetNat, și Get-NetRoute -DestinationPrefix 0.0.0.0/0; iar în oaspete ipconfig /all dă restul.
Apoi decideți ce ar trebui să facă oaspetele. Dacă trebuie să rămână în afara VPN-ului, obțineți excepția susținută de furnizor pentru exact acea cale, pentru că excluderea unui executabil al gazdei nu scutește traficul de mașină virtuală redirecționat. Dacă trebuie să folosească VPN-ul, confirmați tratamentul documentat al clientului asupra traficului mașinilor virtuale în loc să presupuneți că un test în browserul gazdei îl acoperă.
Un test în interiorul oaspetelui este singura dovadă care contează. Verificați adresa de ieșire din oaspete, rezolvați un nume intern, reconectați VPN-ul și repetați. Rezultatul browserului gazdei nu înlocuiește nimic din aceasta.
Cât costă mitul
Oamenii dezactivează kill switch-ul, adaugă rute statice sau șterg și recreează comutatoare doar pentru ca un test să treacă. Fiecare scurtătură schimbă modul de eșec: oaspetele poate ajunge la internet pe o cale pe care nimeni nu a intenționat-o, sau gazda poate pierde conectivitatea când un comutator extern își releagă placa fizică.
Relegarea unui comutator extern întrerupe accesul propriei gazde, așa că țineți deschisă o cale din afara benzii și evitați ștergerea comutatoarelor cât timp încă diagnosticați. Rezultatul corect este calea dorită a oaspetelui, inclusiv cum se reconectează și cum eșuează, nu o bifă verde de la o singură încărcare de pagină.
Răspunsul durabil este o linie pentru fiecare mașină virtuală din inventar: ce comutator folosește și ce componentă îi furnizează gateway-ul. Odată scris, următoarea schimbare de VPN este o căutare în loc de o după-amiază de presupuneri.