VPN laboratoř ve VirtualBoxu: bránová VM versus síť pouze pro hostitele
Vyberte mezi routovanou bránovou VM a segmentem pouze pro hostitele pro VPN laboratoř ve VirtualBoxu a pak zařiďte, aby se host při výpadku tunelu zavřel.
Musíte rozhodnout, kolik strojovny si vaše VPN laboratoř zaslouží. Routovaná bránová VM mezi dvěma segmenty VirtualBoxu reprodukuje překlad adres, zpáteční cestu a pozici firewallu, za kterou sedí skutečný klient. Jediný segment pouze pro hostitele vám dá jedny kontrolované dveře a nic víc. Verze s bránou stojí tři hosty a směrovací tabulku, kterou udržujete; verze pouze pro hostitele stojí jednoho hosta a jednu politiku. Oddělují je tři otázky a třetí rozhoduje, zda váš test vůbec může projít.
Než cokoli naklonujete, odpovězte na tři otázky
Začněte tím, co musí VPN server pozorovat. Pokud server musí vidět zdrojovou adresu, která není adresou testovacího hosta, musí mezi nimi něco překládat a tím něčím musí být router, který ovládáte. Síť pouze pro hostitele dává hostiteli adaptér v segmentu hosta, ne překladač. Když se host potom potřebuje dostat kamkoli ven, připojíte NAT adaptér a vlastní NAT engine VirtualBoxu přepíše zdroj, aniž by se vás zeptal.
Dále se zeptejte, zda se host smí dostat kamkoli jinam než tunelem. Tato odpověď volí interní nebo pouze pro hostitele a je to otázka, kterou většina popisů laboratoří vynechává. Nakonec se zeptejte, co se musí stát, když tunel spadne, protože to určuje politiku, nikoli topologii, a laboratoř, která dokazuje jen šťastnou cestu, neotestovala téměř nic.
| 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 |
Propojte tři role interními sítěmi
Použijte tři hosty a dva pojmenované segmenty, přičemž brána je jediný stroj, který má adaptér na obou:
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
Pro interní síť neexistuje samostatný krok vytvoření. Řetězec v --intnet1 je segment: dva stroje jej sdílejí jen při přesné shodě názvu a nic na hostiteli k němu není připojeno. Právě tato poslední vlastnost je důvod, proč se laboratoř čistě opakuje, protože trasy hostitele, jeho vlastní VPN klient i jeho firewall se k hostům nemohou dostat omylem. Interní segment také nemá DHCP server, dokud nějaký nepřidáte, takže statické adresy jsou nejkratší cestou.
Dejte klientovi jen jeho WAN adresu s výchozí bránou ukazující na WAN adresu brány. Server dostane LAN adresu a použije LAN adresu brány jako svou výchozí bránu. Host, který drží dvě adresy v jednom segmentu nebo má zatoulanou trasu do druhého segmentu, má cestu kolem routeru a testy níže vám budou lhát.
Vedle jmen VM držím textový soubor se čtyřmi adresami a dvěma názvy segmentů a vkládám jej do každého shellu. O týdny později, když změna profilu něco rozbije, je tento soubor rozdílem mezi laděním profilu a laděním vlastní paměti.
Pro segment, který nesmí unikat, zvolte interní nebo pouze pro hostitele
Režim pouze pro hostitele vytváří virtuální adaptér na samotném hostiteli, obvykle vboxnet0, a dává hostiteli adresu v segmentu hosta. To je pohodlné pro správu a smrtelné pro test izolace, protože hostitel teď může dosáhnout hosta přímo a každá služba na straně hostitele se stává možnou cestou. Interní režim nemá adaptér hostitele vůbec. Oba režimy se v panelu nastavení sítě snadno pletou, proto zkontrolujte dokumentovaný rozdíl, ne označení (viz stránka podrobnosti o sítích VirtualBoxu).
Pro hosta, který musí používat tunel, je interní bezpečnější výchozí volba, s bránou jako jediným východem. Pokud ponecháte pouze pro hostitele, berte adaptér hostitele jako správní cestu a řekněte to nahlas: hostitel může dosáhnout hosta a host nesmí moci použít hostitele jako východ.
VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0
Izolace, kterou můžete dokázat, je izolace, kterou jste nakonfigurovali. Host s jedním interním adaptérem, výchozí trasou na bráně a bez NAT adaptéru nemá cestu, která by bránu obešla. Host s adaptérem pouze pro hostitele a NAT adaptérem má dvě cesty a jen jedna z nich je ta, kterou jste chtěli testovat.
Směrujte a překládejte na bráně a pak ji nechte při výpadku zavřít
VirtualBox mezi segmenty nepředává; dělá to host. S VM VPN serveru za bránou zapněte předávání a překládejte provoz klienta, když odchází k serveru:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
S tímto pravidlem server vidí LAN adresu brány místo adresy klienta, což je přesně to, jak skutečný klient za NAT operátora vypadá z pohledu hlavového uzlu. Uložte hodnotu sysctl do /etc/sysctl.d/ a pravidlo do té služby firewallu, kterou distribuce používá, jinak restart tiše vrátí laboratoř do směrovaného, ale nepřeloženého stavu.
Předávání není autorizace. Pod výchozí politikou FORWARD s hodnotou ACCEPT host, jehož výchozí trasa ukazuje na bránu, odchází rozhraním, které zvolí směrovací tabulka, s tunelem nebo bez něj. Pokud má brána také NAT adaptér pro instalaci balíčků, je tento adaptér funkčním nešifrovaným východem ve chvíli, kdy tunel spadne, a váš test pouze-VPN nikdy nebyl testem pouze-VPN.
Když je server naopak vzdálený a tunel ukončuje sama brána, stejné rozhodnutí ukazuje na rozhraní tunelu, ne na NIC, které dosáhne internetu:
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žte vlastní vnější transport tunelu a mimosíťovou správní trasu odděleně od předávaného provozu. Pokud je jediný způsob, jak bránu opravit, projít tunelem, který ladíte, stane se laboratoř cvičením v uzamčení. Sériová konzole, správní adaptér pouze pro hostitele nebo snímek známého dobrého stavu jsou levnější než ruční obnova rozbitého routeru.
Ověřte cestu z hosta, ne z hostitele
Pracujte směrem ven. Potvrďte, že klient dosáhne WAN adresy brány, pak serveru přes bránu, pak že spojení na port VPN odejde a vrátí se. Zachycení na obou rozhraních brány ukáže, zda odpověď dorazí a je na zpáteční cestě zahozena, což zachycení jen na klientovi nerozliší:
tcpdump -ni eth0 udp port 1194
tcpdump -ni tun0 udp port 1194
Pak dokažte východ. Zeptejte se z hosta služby pro odraz adres, jaký zdroj vidí, a porovnejte to s vlastní výstupní adresou brány; pokud odpověď odpovídá adrese hostitele, existuje cesta kolem tunelu. Zkontrolujte, který resolver host skutečně používá, a zkontrolujte IPv6 zvlášť, protože segment, kde je IPv6 zapnuté, zatímco tunel nese jen IPv4, uniká konstrukcí, ne náhodou.
Nakonec to schválně rozbijte. Zastavte tunel nebo zablokujte jeho vnější port a otevřete z hosta nové spojení. Musí selhat a důvod musí být takový, který dokážete pojmenovat: žádná trasa, pravidlo zamítnutí nebo mrtvý resolver. Restartujte tunel a potvrďte, že se host zotaví bez přestavby sítě. Pokud laboratoř sdílí mesh VPN jako Hamachi nebo ZeroTier, pamatujte, že mostový adaptér sleduje název adaptéru, ne mesh, takže most je třeba po instalaci vlastního virtuálního adaptéru klientem přesměrovat.
VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>
Sdílení tunelu hosta s hostitelem zrcadlí stejný problém. Nasměrování výchozí trasy hostitele na hosta funguje, stejně jako proxy uvnitř hosta; NAT přes hostitele nenese tunel hosta pro provoz, který hostitel zahájil. Uložte názvy segmentů a pravidla firewallu na jedno místo, udělejte snímek funkčního stavu a poznamenejte zdrojovou adresu, kterou server pozoroval. Příští změna profilu pak stojí jedno spuštění skriptu místo přestavěné laboratoře.