Host-only adaptéry vytvářejí lokální virtuální síť a směrované TUN tunely přenášejí IP pakety mezi adresami. Ani jedno není mostem k druhému, proto funkční konfigurace musí říct, kdo přeposílá a komu patří zpětná routa. Spletete-li tato dvě přiřazení, host odpoví tunelu zdrojem, o který klient tunelu vůbec nežádal. Návrh níže drží oba prefixy oddělené a činí zpětnou cestu explicitní.

Dvě sítě, dva prefixy

Dejte poolu tunelu a host-only síti různé prefixy a nikdy jeden nepoužívejte pro druhý. V tomto příkladu je pool VPN 10.44.0.0/24 a host-only síť 192.168.99.0/24, hostitel je na 192.168.99.1 a host na 192.168.99.20. Přiřazení stejného prefixu jak TUN zařízení, tak host-only adaptéru je nespojí. Vytváří dva nároky na jeden rozsah adres a směrovací tabulka pak odpovídá za ten, který náhodou podržela.

Host-only adaptér existuje na hostiteli i uvnitř hosta a sám o sobě nemá cestu z tohoto stroje. Přemostěná a NAT připojení mají jinou expozici a přepnutí do přemostěného režimu není podmínkou pro dosažení jedné služby hosta.

Hostitel už cestu drží

Podívejte se, co existuje, než něco přidáte. Hostitel má rozhraní v host-only síti a routu pro tento prefix, obojí vzniklo, když se adaptér zvedl.

ip -br addr show
ip route show 192.168.99.0/24
sysctl net.ipv4.ip_forward

Třetí řádek je mechanismus, který dělá z hostitele hop. Bez něj je paket přicházející z tunelu adresován síti, kterou hostitel dosáhne, ale nebude ji přeposílat. Přeposílání je nutné a nestačí. Filtr politika stále rozhoduje, zda je konkrétní tok mezi rozhraním tunelu a host-only rozhraním povolen, a to rozhodnutí patří písemně, ne do výchozí politiky, kterou nikdo nečetl.

Pushněte routu a pak filtrujte, kam dosáhne

Server může host-only prefix poskytnout klientům, kteří přijímají pushnuté routy, což je stejný mechanismus jako pro kteroukoli jinou podsíť za tunelem.

push "route 192.168.99.0 255.255.255.0"
iptables -A FORWARD -i tun0 -o vboxnet0 -d 192.168.99.20 -p tcp --dport 5432 -j ACCEPT
iptables -A FORWARD -i vboxnet0 -o tun0 -s 192.168.99.20 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Tato dvě pravidla povolují jednu službu jedním směrem a její odpovědi. Routa, která dosáhne celého prefixu, a filtr, který povolí jeden port, jsou záměrná kombinace; routa plus bezpodmínečné přijetí je způsob, jak se z laboratorní služby stane vystavená. Pushnutá routa také není autorizace. Klient ji přijme, hostitel ji přepošle, a firewall hosta i služba samotná stále mají slovo.

Host potřebuje cestu zpět

Host, k němuž se přistupuje z 10.44.0.x, musí posílat své odpovědi na host-only adresu hostitele, nebo musí hostitel přeložit zdroj. Získání adresy z DHCP VirtualBoxu neříká nic o ani jednom z těchto uspořádání.

ip route add 10.44.0.0/24 via 192.168.99.1 dev enp0s8
ip route get 10.44.0.15

Přidání této routy uvnitř hosta zachová původní zdroj, což udržuje politiku a logy pro jednotlivé klienty smysluplné. Omezený překlad zdroje na hostiteli je alternativou a funguje, ovšem za cenu skrytí toho, který klient se připojil. Překryv je druhý režim selhání. Vzdálený klient, jehož domácí LAN už používá 192.168.99.0/24, přečte pushnutou routu jako svou vlastní síť a žádná změna na straně serveru tuto nejednoznačnost nevyřeší. Přečíslujte jednu stranu nebo zvolte prefix, který pravděpodobně nekoliduje.

Zařízení TUN přenáší IP pakety, takže přidání výchozí brány uvnitř hosta nepromění tunel v Ethernet segment s host-only adaptérem. TAP bridging je jiný návrh s vlastní podporou klientů a vlastnictvím adres, a míchání obou popisů vede ke konfiguracím, které nikdy nekonvergují.

Ověřte to a pak to přežijte restart

Otestujte jednu neškodnou službu z běžného vzdáleného klienta, zkontrolujte zpětnou routu hosta a potvrďte, že služba, kterou jste nepovolili, je odmítnuta, ne pomalá.

ss -lntp '( sport = :5432 )'
conntrack -L | grep 192.168.99.20

Potom restartujte službu VPN a síťování virtuálního stroje a zopakujte stejné tři kontroly. Routa přidaná ručně přežije do dalšího restartu a konfigurace, která funguje jen v teplé relaci, není návrh. Zapište oba prefixy, politiku přeposílání a routu hosta společně. Kdo přidá další virtuální stroj, bude potřebovat všechny tři, a jinak je znovu objeví jedním neúspěšným připojením za druhým.

Související články