Laboratorij VPN v VirtualBoxu: prehodna VM ali omrežje samo za gostitelja
Izberite med usmerjeno prehodno VM in segmentom samo za gostitelja za laboratorij VPN v VirtualBoxu, nato pa naj gost ob padcu tunela odpove zaprt.
Odločiti se morate, koliko strojne opreme si zasluži vaš laboratorij VPN. Usmerjena prehodna VM med dvema segmentoma VirtualBoxa poustvari prevajanje naslovov, povratno pot in položaj požarnega zidu, za katerim sedi resničen odjemalec. En sam segment samo za gostitelja vam da ena nadzorovana vrata in nič drugega. Različica s prehodom stane tri goste in usmerjevalno tabelo, ki jo vzdržujete; različica samo za gostitelja stane enega gosta in eno politiko. Tri vprašanja jih ločijo, in tretje odloči, ali vaš test sploh lahko uspe.
Odgovorite na tri vprašanja, preden karkoli klonirate
Začnite s tem, kar mora strežnik VPN opazovati. Če mora strežnik videti izvorni naslov, ki ni naslov testnega gosta, mora nekaj prevajati med njima, in to nekaj mora biti usmerjevalnik, ki ga nadzorujete. Omrežje samo za gostitelja da gostitelju vmesnik v segmentu gosta, ne prevajalnika. Ko mora gost nato doseči nekaj zunaj, priključite vmesnik NAT, in VirtualBoxov lastni motor NAT prepiše izvor, ne da bi vas vprašal.
Nato vprašajte, ali sme gost doseči karkoli drugega kot skozi tunel. Ta odgovor izbere notranje ali samo za gostitelja, in to je vprašanje, ki ga večina opisov laboratorijev izpusti. Nazadnje vprašajte, kaj se mora zgoditi, ko tunel pade, ker to določa politiko in ne topologijo, laboratorij, ki dokazuje samo srečno pot, pa ni preizkusil skoraj ničesar.
| 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 vloge z notranjimi omrežji
Uporabite tri goste in dva poimenovana segmenta, pri čemer naj bo prehod edini stroj z vmesnikom na obeh:
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
Za notranje omrežje ni ločenega koraka ustvarjanja. Niz v --intnet1 je segment: dva stroja si ga delita le, če se ime natančno ujema, in nič na gostitelju ni povezano z njim. Prav ta zadnja lastnost je razlog, da se laboratorij čisto ponovi, ker poti gostitelja, njegov lastni odjemalec VPN in njegov požarni zid ne morejo po naključju doseči gostov. Notranji segment tudi nima strežnika DHCP, razen če ga dodate, zato so statični naslovi najkrajša pot.
Odjemalcu dajte samo njegov naslov WAN, privzeti prehod pa naj kaže na naslov WAN prehoda. Strežnik dobi naslov LAN in uporabi naslov LAN prehoda kot svoj privzeti prehod. Gost, ki drži dva naslova na enem segmentu ali ima zablodelo pot v drugi segment, ima pot okoli usmerjevalnika, in spodnji testi vam bodo lagali.
Ob imenih VM hranim besedilno datoteko s štirimi naslovi in dvema imenoma segmentov ter jo prilepim v vsako lupino. Tedne pozneje, ko sprememba profila kaj pokvari, je ta datoteka razlika med razhroščevanjem profila in razhroščevanjem lastnega spomina.
Za segment, ki ne sme puščati, izberite notranji ali samo za gostitelja
Način samo za gostitelja ustvari navidezni vmesnik na gostitelju samem, običajno vboxnet0, in da gostitelju naslov v segmentu gosta. To je priročno za upravljanje in usodno za preizkus izolacije, ker lahko gostitelj zdaj doseže gosta neposredno in vsaka storitev na gostiteljevi strani postane možna pot. Notranji način nima vmesnika gostitelja sploh. Dva načina se v plošči z nastavitvami omrežja zlahka zamenjata, zato preverite dokumentirano razliko, ne oznake (glejte stran podrobnosti o omrežju VirtualBox).
Za gosta, ki mora uporabljati tunel, je notranji varnejša privzeta izbira, s prehodom kot edinim izhodom. Če obdržite samo za gostitelja, obravnavajte vmesnik gostitelja kot upravljavsko pot in to povejte na glas: gostitelj sme doseči gosta, gost pa ne sme moci uporabiti gostitelja kot izhoda.
VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0
Izolacija, ki jo lahko dokažete, je izolacija, ki ste jo nastavili. Gost z enim notranjim vmesnikom, privzeto potjo na prehodu in brez vmesnika NAT nima poti, ki bi obšla prehod. Gost z vmesnikom samo za gostitelja in vmesnikom NAT ima dve poti, in samo ena od njih je tista, ki ste jo hoteli preizkusiti.
Usmerjajte in prevajajte na prehodu, nato pa ga prisilite, da odpove zaprt
VirtualBox ne posreduje med segmenti; to stori gost. Ko je VM strežnika VPN za prehodom, omogočite posredovanje in prevajajte promet odjemalca, ko odhaja proti strežniku:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
S tem pravilom strežnik vidi naslov LAN prehoda namesto odjemalčevega, in tako je videti resničen odjemalec za NAT operaterja s stališča glave omrežja. Shranite vrednost sysctl v /etc/sysctl.d/ in pravilo v tisti storitvi požarnega zidu, ki jo uporablja distribucija, sicer ponovni zagon tiho vrne laboratorij v usmerjeno, a neprevedeno stanje.
Posredovanje ni avtorizacija. Pod privzeto politiko FORWARD z vrednostjo ACCEPT gost, katerega privzeta pot kaže na prehod, izstopi skozi vmesnik, ki ga izbere usmerjevalna tabela, s tunelom ali brez. Če ima prehod tudi vmesnik NAT za nameščanje paketov, je ta vmesnik delujoč nešifriran izhod v trenutku, ko tunel pade, in vaš preizkus samo-VPN ni bil nikoli preizkus samo-VPN.
Ko je strežnik oddaljen in tunel zaključi prehod sam, ista odločitev kaže na vmesnik tunela, ne na kartico, ki 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 lastni zunanji transport tunela in zunajpasovno upravljavsko pot ločeno od posredovanega prometa. Če je edini način za popravilo prehoda skozi tunel, ki ga razhroščujete, laboratorij postane vaja v zaklepanju. Serijska konzola, upravljavski vmesnik samo za gostitelja ali posnetek znanega dobrega stanja so cenejši od ročnega obnavljanja pokvarjenega usmerjevalnika.
Preverite pot z gosta, ne z gostitelja
Delajte navzven. Potrdite, da odjemalec doseže naslov WAN prehoda, nato strežnik skozi prehod, nato da povezava na vrata VPN odide in se vrne. Zajem na obeh vmesnikih prehoda pokaže, ali odgovor prispe in ali se na povratni poti zavrže, česar zajem samo na odjemalcu ne more razločiti:
tcpdump -ni eth0 udp port 1194
tcpdump -ni tun0 udp port 1194
Nato dokažite izhod. Vprašajte z gosta storitev za odsev naslovov, kateri izvor vidi, in to primerjajte z lastnim izhodnim naslovom prehoda; če se odgovor ujema z naslovom gostitelja, obstaja pot okoli tunela. Preverite, kateri razreševalnik gost dejansko uporablja, in IPv6 preverite ločeno, ker segment, kjer je IPv6 omogočen, medtem ko tunel nosi samo IPv4, pušča po zasnovi in ne po naključju.
Nazadnje ga namerno zlomite. Ustavite tunel ali blokirajte njegova zunanja vrata in odprite novo povezavo z gosta. Morala bi spodleteti, razlog pa mora biti tak, da ga lahko poimenujete: ni poti, pravilo zavrnitve ali mrtev razreševalnik. Znova zaženite tunel in potrdite, da si gost opomore brez ponovne gradnje omrežja. Če si laboratorij deli mesh VPN, kot sta Hamachi ali ZeroTier, ne pozabite, da mostovni vmesnik sledi imenu vmesnika, ne meshu, zato je treba most po namestitvi odjemalčevega lastnega navideznega vmesnika znova usmeriti.
VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>
Deljenje gostovega tunela z gostiteljem zrcali težavo. Usmerjanje gostiteljeve privzete poti na gosta deluje, prav tako posrednik znotraj gosta; NAT skozi gostitelja ne nosi gostovega tunela za promet, ki ga je začel gostitelj. Shranite imena segmentov in pravila požarnega zidu na enem mestu, naredite posnetek delujočega stanja in zapišite izvorni naslov, ki ga je strežnik opazoval. Naslednja sprememba profila bo potem stala eno izvajanje skripta namesto ponovno zgrajenega laboratorija.