Jy moet besluit hoeveel masjinerie jou VPN-lab verdien. 'n Gerouteerde deurlaat-VM tussen twee VirtualBox-segmente reproduseer die adresvertaling, die terugpad en die firewallposisie waaragter 'n werklike kliënt sit. 'n Enkele slegs-gasheer-segment gee jou een beheerde deur en niks anders. Die deurlaat-weergawe kos drie gaste en 'n roetetabel wat jy onderhou; die slegs-gasheer-weergawe kos een gas en 'n beleid. Drie vrae skei hulle, en die derde besluit of jou toets hoegenaamd kan slaag.

Beantwoord drie vrae voordat jy enigiets kloon

Begin met wat die VPN-bediener moet waarneem. As die bediener 'n bronadres moet sien wat nie die toetsgas s'n is nie, moet iets tussen hulle vertaal, en daardie iets moet 'n roeteerder wees wat jy beheer. Slegs-gasheer-netwerking gee die gasheer 'n adapter op die gas se segment, nie 'n vertaler nie. Wanneer die gas dan iets buite moet bereik, koppel jy 'n NAT-adapter, en VirtualBox se eie NAT-enjin herskryf die bron sonder om jou te vra.

Vra dan of die gas enigiets mag bereik buiten deur die tonnel. Daardie antwoord kies intern of slegs-gasheer, en dit is die vraag wat die meeste lab-verslae oorslaan. Vra laastens wat moet gebeur wanneer die tonnel val, want dit bepaal beleid eerder as topologie, en 'n lab wat net die gelukkige pad bewys, het byna niks getoets nie.

What the test requiresRouted gateway VMHost-only guest
Server sees a translated source addressYes, from your own MASQUERADE ruleNo, VirtualBox NAT does it instead
The guest has exactly one egressYes, while the second adapter faces the tunnelOnly until a NAT adapter is attached
Policy is testable during a tunnel failureRules live in one placeRules live on each guest

Bekabel die drie rolle met interne netwerke

Gebruik drie gaste en twee benoemde segmente, met die deurlaat as die enigste masjien wat 'n adapter op albei het:

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

Daar is geen aparte skeppingsstap vir 'n interne netwerk nie. Die string in --intnet1 is die segment: twee masjiene deel dit net as die naam presies ooreenstem, en niks op die gasheer is daaraan gekoppel nie. Daardie laaste eienskap is hoekom die lab skoon herhaal, aangesien die gasheer se roetes, sy eie VPN-kliënt en sy firewall die gaste nie per ongeluk kan bereik nie. 'n Interne segment het ook geen DHCP-bediener tensy jy een byvoeg nie, so statiese adresse is die kortste pad.

Gee die kliënt net sy WAN-adres, met 'n verstekdeurlaat wat na die deurlaat se WAN-adres wys. Die bediener kry 'n LAN-adres en gebruik die deurlaat se LAN-adres as sy verstekdeurlaat. 'n Gas wat twee adresse op een segment hou, of 'n verdwaalde roete na die ander segment, het 'n pad om die roeteerder, en die toetse hieronder sal vir jou lieg.

Ek hou 'n tekslêer langs die VM-name met die vier adresse en die twee segmentname, en plak dit in elke skulp. Weke later, wanneer 'n profielverandering iets breek, is daardie lêer die verskil tussen die profiel ontfout en my eie geheue ontfout.

Kies intern of slegs-gasheer vir die segment wat nie mag lek nie

Slegs-gasheer-modus skep 'n virtuele adapter op die gasheer self, gewoonlik vboxnet0, en gee die gasheer 'n adres op die gas se segment. Dit is gerieflik vir administrasie en noodlottig vir 'n isolasietoets, want die gasheer kan nou die gas direk bereik en elke diens aan die gasheerkant word 'n moontlike pad. Interne modus het hoegenaamd geen gasheeradapter nie. Die twee modusse is maklik om in die netwerkinstellingspaneel te verwar, so kyk na die gedokumenteerde verskil eerder as na die etiket (sien die VirtualBox-netwerkbesonderhede-bladsy).

Vir 'n gas wat die tonnel moet gebruik, is intern die veiliger verstek, met die deurlaat as die enigste uitweg. As jy slegs-gasheer hou, behandel die gasheeradapter as 'n bestuurspad en sê dit hardop: die gasheer mag die gas bereik, en die gas mag nie die gasheer as 'n uitgang kan gebruik nie.

VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0

Die isolasie wat jy kan bewys, is die isolasie wat jy opgestel het. 'n Gas met een interne adapter, 'n verstekroete by die deurlaat en geen NAT-adapter het geen pad wat die deurlaat oorslaan nie. 'n Gas met 'n slegs-gasheer-adapter en 'n NAT-adapter het twee paaie, en net een daarvan is die een wat jy bedoel het om te toets.

Roeteer en vertaal op die deurlaat, en laat dit dan gesluit faal

VirtualBox stuur nie tussen segmente deur nie; die gas doen dit. Met die VPN-bediener-VM agter die deurlaat, aktiveer doorstuur en vertaal die kliënt se verkeer soos dit na die bediener vertrek:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Met daardie reël sien die bediener die deurlaat se LAN-adres in plaas van die kliënt s'n, wat is hoe 'n werklike kliënt agter 'n vervoerder-NAT vir 'n hoofkant lyk. Hou die sysctl-waarde in /etc/sysctl.d/ en die reël in watter firewalldiens die verspreiding ook al gebruik, anders laat 'n herbegin die lab stil terugkeer na 'n gerouteerde maar onvertaalde toestand.

Doorstuur is nie magtiging nie. Onder die verstek FORWARD-beleid van ACCEPT verlaat 'n gas wie se verstekroete na die deurlaat wys, deur watter koppelvlak die roetetabel ook al kies, tonnel of nie. As die deurlaat ook 'n NAT-adapter vir pakketinstallasies het, is daardie adapter 'n werkende onversleutelde uitgang die oomblik wanneer die tonnel val, en jou slegs-VPN-toets was nooit 'n slegs-VPN-toets nie.

Wanneer die bediener eerder op afstand is en die deurlaat self die tonnel beëindig, wys dieselfde besluit na die tonnelkoppelvlak, nie na die NIC wat die internet bereik nie:

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

Hou die tonnel se eie buitenste vervoer en 'n buitebandse bestuurroete apart van deurgevoerde verkeer. As die enigste manier om die deurlaat te herstel deur die tonnel is wat jy ontfout, word die lab 'n uitsluitingsoefening. 'n Reekskonsole, 'n slegs-gasheer-bestuursadapter of 'n momentopname van 'n bekende goeie toestand is goedkoper as om 'n stukkende roeteerder met die hand te herstel.

Verifieer die pad vanaf die gas, nie vanaf die gasheer nie

Werk na buite. Bevestig die kliënt kan die deurlaat se WAN-adres bereik, dan die bediener deur die deurlaat, dan dat 'n verbinding na die VPN-poort uitgaan en terugkom. 'n Opname op albei deurlaatkoppelvlakke wys of die antwoord aankom en op die terugpad laat val word, wat 'n opname op die kliënt alleen nie kan onderskei nie:

tcpdump -ni eth0 udp port 1194
tcpdump -ni tun0 udp port 1194

Bewys dan die uitgang. Vra vanaf die gas 'n adresweerkaatsingsdiens watter bron dit sien en vergelyk dit met die deurlaat se eie uitgangadres; as die antwoord met die gasheer se adres ooreenstem, bestaan daar 'n pad om die tonnel. Kyk watter oplosser die gas werklik gebruik, en kyk IPv6 afsonderlik, want 'n segment waar IPv6 geaktiveer is terwyl die tonnel net IPv4 dra, lek volgens ontwerp eerder as per ongeluk.

Breek dit laastens doelbewus. Stop die tonnel, of blokkeer sy buitenste poort, en open 'n nuwe verbinding vanaf die gas. Dit moet misluk, en die rede moet een wees wat jy kan noem: geen roete, 'n verwerpingsreël of 'n dooie oplosser. Herbegin die tonnel en bevestig die gas herstel sonder om die netwerk te herbou. As 'n maas-VPN soos Hamachi of ZeroTier die lab deel, onthou dat 'n oorbrugde adapter die adapternaam volg, nie die maas nie, so die brug moet herpunt word nadat die kliënt sy eie virtuele adapter installeer.

VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>

Om 'n gas se tonnel met die gasheer te deel, weerspieël die probleem. Om die gasheer se verstekroete na die gas te wys, werk, en so ook 'n instaanbediener binne die gas; NAT deur die gasheer dra nie die gas se tonnel vir verkeer wat die gasheer begin het nie. Stoor die segmentname en die firewallreëls op een plek, neem 'n momentopname van die werkende toestand, en teken die bronadres aan wat die bediener waargeneem het. Die volgende profielverandering kos dan een scriptlopie in plaas van 'n herboude lab.

Verwante artikels