Du skirtingi klausimai ateina kartu kiekvieną kartą, kai virtualioji mašina paleidžia VPN klientą, ir jų atsakymai skiriasi. Pirmasis – ar tunelis svečio viduje apsaugo šeimininką, antrasis – ar tunelis šeimininke uždengia svečią. Adapterio režimas nulemia abu, labiau nei pati VPN programinė įranga. NAT adapteris paverčia šeimininką matomu galiniu tašku, o tilto adapteris padeda svečią į tinklą su jo paties adresu.

Kas iš tikrųjų užbaigia šifruotą sesiją

Šifruota sesija priklauso mašinai, kuri ją užbaigia, o tai yra svečias, kai klientas veikia VM viduje. Per tą tunelį eina tik srautas, patenkantis į svečio virtualų adapterį, o hipervizorius niekada savo iniciatyva nekelia kitos mašinos per svečią. Todėl svečias gali laikyti veikiantį tunelį, kol šeimininkas naršo atvirai. Priešingybė nėra simetriška, ir būtent ši asimetrija yra ta dalis, kurią dauguma vadovų supranta neteisingai.

Kieno adresą mato išorinis tinklas – tai klausimas, į kurį atsako adapterio režimas. Kai tai išspręsta, aprėptis nustoja būti politikos klausimu ir tampa mechanine. Viskas toliau išplaukia iš šių dviejų faktų.

NAT perrašo svečią, kol jis ima atrodyti kaip šeimininkas

Naudojant NAT, hipervizorius perrašo kiekvieną svečio paketą šeimininko adresu, kol jis dar nepasiekė pirmojo komutatoriaus. Tada šis srautas perduodamas šeimininko savo tinklo kamienui, kur jis vadovaujasi šeimininko maršrutų lentele, įskaitant numatytąjį maršrutą, kuris priklauso šeimininke veikiančiam tuneliui. Taigi NAT svečias be jokios konfigūracijos uždengiamas tuneliu šeimininke, o tai yra priešingybė tam, ką sufleruoja kryptis nuo svečio prie šeimininko.

# on the host: adapter mode and NAT DNS behaviour
VBoxManage showvminfo "lab-vm" | grep -i -E "nic|nat"
VBoxManage modifyvm "lab-vm" --natdnshostresolver1 on

Svečias, paleidžiantis savo klientą, užbaigia tą tunelį svečio viduje, o šifruotas srautas tada išeina per tą patį perrašymą, todėl šeimininko programos išlaiko savo kelią ir savo išėjimo adresą. VirtualBox šiame režime taip pat valdo vardų skyrimą ir persiunčia svečio užklausas per savo variklį, nebent --natdnshostresolver1 būtų įjungtas. Jį įjungus, svečio paieškos perduodamos šeimininko sprendėjui, kas pataiso skyrimą, kai šeimininko požiūris teisingas, ir lygiai taip pat perduoda sprendėją, kuris gali egzistuoti tik tunelio viduje. VM turi būti išjungta prieš keičiant nuostatą, o nuostata priklauso adapteriui, o ne svečio programinei įrangai.

Tiltas suteikia svečiui savo nuomą ir savo atvirumą

Tiltas perduoda svečio kadrus į fizinį segmentą, todėl DHCP suteikia jam nuomą ir tinklas traktuoja jį kaip atskirą šeimininką. Kiekvienas tiltu sujungtas svečias gali laikyti nepriklausomą tunelį su savo numatytuoju maršrutu, o šeimininko lentelė niekada nesikeičia. Kaina yra atvirumas: svečias atsako į transliacijas, pasirodo kaimynų lentelėse ir patenka į komutatoriaus prievadų saugumą bei belaidžių klientų izoliaciją. Tunelis šeimininke taip pat neuždengia šios schemos, nes svečio kadrai niekada neina per šeimininko kamieną.

Šį skirtumą nuo NAT atvejo verta pasakyti tiesiogiai, o ne palikti kaip užuominą. Tiltu sujungtam svečiui reikia savo kliento ir savo prisijungimo duomenų, kai tik jo srautui tenka naudoti tunelį. Ten, kur svečias turi likti nematomas vietiniam tinklui, NAT arba tik vidinis tinklas su kontroliuojamu maršrutizavimu yra geresnė konstrukcija.

Kodėl svečias negali būti šeimininko tinklų sietuvu

Svečio tunelio skolinimas šeimininkui neturi palaikomo jungiklio nė viename iš dviejų didžiųjų hipervizorių. Šeimininkas neturi maršruto į svečio tunelį ir jokios vertimo taisyklės, rodančios į jį, todėl svečio ir šeimininko srautas lieka atskiri srautai su atskirais savininkais. Ši kryptis nepavyksta nepriklausomai nuo adapterio režimo.

Veikiami pakaitalai yra peradresavimai ir tarpinės. Vietinis SSH peradresavimas leidžia šeimininkui jungtis prie savo grįžtamosios kilpos, kol svečias neša srautą į tunelį, o tai uždengia TCP paslaugas neinstaliuojant antro kliento. Versti šeimininko pačio IP srautą naudoti svečio tunelį vietoj to reikalauja maršrutizatoriaus svečio viduje, taip pat aiškaus maršruto šeimininke ir vertimo šeimininke. Tai maža tinklo konstrukcija, o ne žymimasis langelis, ir jai reikia grįžimo kelio plano. Kai svečias egzistuoja vien tam, kad paleistų klientą, dėk klientą į šeimininką ir pašalink papildomą šuolį.

ssh -N -f -L 8080:internal-host.example:80 user@lab-vm

Sprendėjai ir maršrutai neperžengia ribos

DNS seka adapterį, kuris gavo parinktį, todėl svečias nepaveldi šeimininko tunelio sprendėjo ir šeimininkas niekada nesužino svečiui įstumto serverio. Įstumtos dhcp-option DNS reikšmės galioja sąsajai, kuri jas priėmė, ir todėl tiltu sujungtas svečias be kliento negali išspręsti vidinių vardų. NAT svečias paprastai naudoja hipervizoriaus DNS tvarkymą, o skirtumas matomas viena komanda kiekvienoje aplinkoje.

# 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

Perskaityk sprendėją ir maršrutą svečio viduje, prieš darydamas prielaidą, kad kuris nors jų seka šeimininką. Pridėk tunelio sprendėją prie svečio savo adapterio, kai vidinius vardus reikia išspręsti ten, tada patikrink vardu, kuris egzistuoja tik už tunelio. Užrašyk kiekvienai VM adapterio režimą, tunelio savininką ir sprendėjo šaltinį, nes šie trys faktai atsako į beveik kiekvieną vėlesnį klausimą. Kiti hipervizoriai pervadina režimus ir palieka principą nepaliestą.

Susiję straipsniai