VirtualBox VPN laboratorij: prolazni VM nasuprot mreži samo za hosta
Odaberite između rutiranog prolaznog VM-a i segmenta samo za hosta za VirtualBox VPN laboratorij, pa natjerajte gosta da se zatvori pri kvaru kada tunel padne.
Morate odlučiti koliko strojeva zaslužuje vaš VPN laboratorij. Rutirani prolazni VM između dvaju VirtualBox segmenta reproducira prijevod adresa, povratni put i položaj vatrozida iza kojeg sjedi stvarni klijent. Jedan segment samo za hosta daje vam jedna kontrolirana vrata i ništa više. Verzija s prolazom stoji tri gosta i tablicu usmjeravanja koju održavate; verzija samo za hosta stoji jednog gosta i jednu politiku. Tri pitanja ih razdvajaju, a treće odlučuje može li vaš test uopće proći.
Odgovorite na tri pitanja prije nego što išta klonirate
Počnite s onim što VPN poslužitelj mora promatrati. Ako poslužitelj mora vidjeti izvornu adresu koja nije adresa testnog gosta, nešto mora prevoditi između njih, a to nešto mora biti usmjerivač koji kontrolirate. Umrežavanje samo za hosta daje hostu adapter na segmentu gosta, a ne prevoditelj. Kad gost zatim treba doći do bilo čega izvana, priključite NAT adapter, a VirtualBoxov vlastiti NAT stroj prepisuje izvor bez pitanja.
Zatim pitajte smije li gost doći do bilo čega osim kroz tunel. Taj odgovor bira internu ili samo za hosta, i to je pitanje koje većina opisa laboratorija preskoči. Naposljetku pitajte što se mora dogoditi kad tunel padne, jer to određuje politiku, a ne topologiju, a laboratorij koji dokazuje samo sretan put nije ispitao gotovo ništa.
| What the test requires | Routed gateway VM | Host-only guest |
|---|---|---|
| Server sees a translated source address | Yes, from your own MASQUERADE rule | No, VirtualBox NAT does it instead |
| The guest has exactly one egress | Yes, while the second adapter faces the tunnel | Only until a NAT adapter is attached |
| Policy is testable during a tunnel failure | Rules live in one place | Rules live on each guest |
Povežite tri uloge internim mrežama
Rabite tri gosta i dva imenovana segmenta, s prolazom kao jedinim strojem koji ima adapter na obama:
VBoxManage modifyvm lab-client --nic1 intnet --intnet1 WAN
VBoxManage modifyvm lab-server --nic1 intnet --intnet1 LAN
VBoxManage modifyvm lab-gw --nic1 intnet --intnet1 WAN --nic2 intnet --intnet2 LAN
Nema posebnog koraka stvaranja za internu mrežu. Niz u --intnet1 jest segment: dva stroja dijele ga samo ako se ime točno podudara, i ništa na hostu nije priključeno na njega. To posljednje svojstvo razlog je zašto se laboratorij čisto ponavlja, jer rute hosta, njegov vlastiti VPN klijent i njegov vatrozid ne mogu slučajno doći do gostiju. Interni segment također nema DHCP poslužitelj osim ako ga dodate, pa su statične adrese najkraći put.
Dajte klijentu samo njegovu WAN adresu, s podrazumijevanim prolazom koji pokazuje na WAN adresu prolaza. Poslužitelj dobiva LAN adresu i rabi LAN adresu prolaza kao svoj podrazumijevani prolaz. Gost koji drži dvije adrese na jednom segmentu ili ima zalutalu rutu prema drugom segmentu ima put oko usmjerivača, i testovi ispod će vam lagati.
Držim tekstualnu datoteku uz imena VM-ova s četiri adrese i dva imena segmenata i lijepim je u svaku ljusku. Tjednima kasnije, kad promjena profila nešto pokvari, ta datoteka je razlika između otklanjanja pogrešaka u profilu i otklanjanja pogrešaka u vlastitom pamćenju.
Odaberite internu ili samo za hosta za segment koji ne smije procuriti
Način samo za hosta stvara virtualni adapter na samom hostu, obično vboxnet0, i daje hostu adresu na segmentu gosta. To je prikladno za administraciju i kobno za test izolacije, jer host sada može doći do gosta izravno i svaka usluga na strani hosta postaje mogući put. Interni način uopće nema adapter hosta. Dva se načina lako pobrkaju u ploči mrežnih postavki, pa provjerite dokumentiranu razliku, a ne oznaku (pogledajte stranicu pojedinosti umrežavanja u VirtualBoxu).
Za gosta koji mora rabiti tunel, interni je sigurniji podrazumijevani izbor, s prolazom kao jedinim izlazom. Ako zadržite samo za hosta, tretirajte adapter hosta kao put upravljanja i recite to naglas: host smije doći do gosta, a gost ne smije moći rabiti host kao izlaz.
VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0
Izolacija koju možete dokazati jest izolacija koju ste konfigurirali. Gost s jednim internim adapterom, podrazumijevanom rutom na prolazu i bez NAT adaptera nema put koji zaobilazi prolaz. Gost s adapterom samo za hosta i NAT adapterom ima dva puta, i samo je jedan od njih onaj koji ste htjeli testirati.
Usmjeravajte i prevodite na prolazu, pa ga natjerajte da se zatvori pri kvaru
VirtualBox ne prosljeđuje između segmenata; to čini gost. S VM-om VPN poslužitelja iza prolaza uključite prosljeđivanje i prevodite promet klijenta dok izlazi prema poslužitelju:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
S tim pravilom poslužitelj vidi LAN adresu prolaza umjesto klijentove, i tako stvarni klijent iza NAT-a operatera izgleda glavnom čvoru. Spremite sysctl vrijednost u /etc/sysctl.d/, a pravilo u kojoj god usluzi vatrozida distribucija rabi, inače ponovno pokretanje tiho vraća laboratorij u rutirano, ali neprevedeno stanje.
Prosljeđivanje nije autorizacija. Pod podrazumijevanom politikom FORWARD s vrijednošću ACCEPT, gost čija podrazumijevana ruta pokazuje na prolaz izlazi kroz sučelje koje odabere tablica usmjeravanja, s tunelom ili bez njega. Ako prolaz ima i NAT adapter za instalaciju paketa, taj je adapter radni nešifrirani izlaz u trenutku kad tunel padne, i vaš test samo za VPN nikada nije bio test samo za VPN.
Kad je poslužitelj umjesto toga udaljen i prolaz sam završava tunel, ista odluka pokazuje na sučelje tunela, a ne na NIC koji doseže internet:
iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Držite vlastiti vanjski prijevoz tunela i izvanpojasnu rutu upravljanja odvojeno od proslijeđenog prometa. Ako je jedini način da popravite prolaz kroz tunel koji otklanjate, laboratorij postaje vježba zaključavanja. Serijska konzola, upravljački adapter samo za hosta ili snimka poznatog dobrog stanja jeftiniji su od ručnog oporavka pokvarenog usmjerivača.
Provjerite put s gosta, a ne s hosta
Radite prema van. Potvrdite da klijent doseže WAN adresu prolaza, zatim poslužitelj kroz prolaz, zatim da veza prema VPN portu izlazi i vraća se. Snimka na obama sučeljima prolaza pokazuje dolazi li odgovor i odbacuje li se na povratnom putu, što snimka samo na klijentu ne može razlikovati:
tcpdump -ni eth0 udp port 1194
tcpdump -ni tun0 udp port 1194
Zatim dokažite izlaz. Pitajte s gosta uslugu zrcaljenja adresa koji izvor vidi i usporedite to s vlastitom izlaznom adresom prolaza; ako se odgovor podudara s adresom hosta, postoji put oko tunela. Provjerite koji razrješivač gost zapravo rabi i provjerite IPv6 zasebno, jer segment u kojem je IPv6 uključen dok tunel nosi samo IPv4 curi po dizajnu, a ne slučajno.
Naposljetku, pokvarite to namjerno. Zaustavite tunel ili blokirajte njegov vanjski port i otvorite novu vezu s gosta. Mora pasti, a razlog mora biti onaj koji možete imenovati: nema rute, postoji pravilo odbijanja ili je razrješivač mrtav. Ponovno pokrenite tunel i potvrdite da se gost oporavlja bez ponovne izgradnje mreže. Ako mesh VPN poput Hamachija ili ZeroTiera dijeli laboratorij, zapamtite da premosni adapter slijedi ime adaptera, a ne mesh, pa se most mora preusmjeriti nakon što klijent instalira vlastiti virtualni adapter.
VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>
Dijeljenje gostovog tunela s hostom preslikava problem. Usmjeravanje hostove podrazumijevane rute na gosta funkcionira, kao i proxy unutar gosta; NAT kroz host ne nosi gostov tunel za promet koji je host pokrenuo. Spremite imena segmenata i pravila vatrozida na jednom mjestu, snimite radno stanje i zabilježite izvornu adresu koju je poslužitelj promatrao. Sljedeća promjena profila tada stoji jedno pokretanje skripte umjesto ponovno izgrađenog laboratorija.