Většina konfigurací s plným tunelem posílá každý paket přes VPN a právě direktiva redirect-gateway to zařizuje. Jedna destinace přesto může být vyňata. Přidání hostitelské trasy pro tuto adresu se zástupným znakem net_gateway řekne klientovi, aby se k ní dostal přes původní bránu stroje, zatímco vše ostatní dál používá tunel.

Řádek vypadá neškodně a často také je, ale řeší jen jednu otázku: kam jdou pakety pro přesně tuto adresu IPv4. Nemění DNS, IPv6, politiku firewallu ani to, který proces otevřel spojení, a každá z těchto věcí může výjimku tiše zmařit.

Co net_gateway vlastně označuje

Záznam profilu pro tuto výjimku je jeden řádek: route 198.51.100.77 255.255.255.255 net_gateway. První adresa je dokumentační zástupný znak pro destinaci, maska z ní dělá trasu k jednomu hostiteli a poslední token označuje zástupný znak brány. OpenVPN při instalaci tras rozlišuje zástupné znaky bran. vpn_gateway znamená vlastní bránu tunelu, tedy vzdálenou stranu spojení VPN. net_gateway znamená výchozí bránu, kterou hostitel měl, než VPN cokoli změnila, což je obvykle místní router ve fyzické síti.

Třetí zástupný znak, remote_host, odkazuje na adresu serveru VPN a existuje proto, aby se tunel mohl k serveru dostat po fyzické cestě. Zaměnit tyto tři je nejčastější důvod, proč výjimka míří na špatné místo nebo se vůbec nenainstaluje.

Hodnota se čte v okamžiku připojení, neukládá se do souboru. Když se stroj přesune do jiné sítě, brána před VPN se změní a trasa následuje novou. Obvykle je to to, co chcete, ale také to znamená, že chování výjimky závisí na síti, ze které klient začal.

Proč hostitelská trasa poráží výchozí trasu tunelu

Směrování se rozhoduje podle nejkonkrétnějšího odpovídajícího prefixu. redirect-gateway def1 obvykle nenahrazuje výchozí trasu; přidává dvě poloviny, trasu pro spodní polovinu adresního prostoru a jednu pro horní polovinu, takže původní výchozí trasa zůstává zachována pro jiné účely. Tyto poloviny jsou širší než jediná adresa.

Trasa pro jednu adresu s maskou 255.255.255.255 je /32, což je nejvyšší možná konkrétnost IPv4. Když se vyhodnocuje paket pro tuto adresu, /32 odpovídá a vyhrává bez ohledu na to, která trasa byla nainstalována první. To je mechanismus za výjimkou a funguje stejně na Linuxu, macOS i Windows, pokud je trasa skutečně přítomná.

Windows přidává druhý rozměr. Když jsou dvě trasy stejně konkrétní, vyhrává ta s nižší metrikou a adaptér VPN může nést metriku rozhraní, která výsledek změní. /32 je stále konkrétnější než poloviny, takže výjimka obvykle platí, ale zastaralá trasa z dřívější relace může přinést matoucí výsledek, je-li stejně konkrétní.

Co výjimka nepokrývá

DNS je první mezera. Klient může protlačit interní nastavení resolveru a operační systém je bude dál používat pro dotazy. Aplikace, která přeloží jméno před připojením, může dostat interní adresu služby, která má jít přímo, nebo externí adresu, která se přeloží správně, ale pak narazí na další mezeru.

IPv6 je druhá. Direktiva trasy zvládá jen IPv4. Destinace s duálním stackem může preferovat IPv6, který podle politiky následuje tunel nebo výchozí trasu IPv6 hostitele, takže výjimka pro IPv4 se nikdy neuplatní. Potřebujete odpovídající trasu IPv6, nebo vědomé rozhodnutí vypnout IPv6 pro tohoto klienta.

Rozsah aplikací je třetí. Pravidlo je založené na destinaci, takže každý proces, který se k této adrese připojuje, používá přímou cestu, ať už je to ten, který jste měli na mysli, nebo ne. Naopak web může odpovídat z několika adres, takže vyjmutí jedné /32 nevyjímá celý web. Pokud je skutečným požadavkem směrování podle aplikací, směrovací tabulka klienta Community je špatný nástroj.

Jak výjimku ověřit, aniž byste se oklamali

Začněte nainstalovanou trasou, ne prohlížečem. Na Linuxu se zeptejte jádra, kterou trasu a další skok použije pro konkrétní adresu; na Windows si přečtěte směrovací tabulku pro tuto /32. Ověřte, že brána je fyzická, a ne tunelová. Pokud záznam chybí, profil nebyl aplikován nebo klient neměl oprávnění měnit trasy.

Pak otestujte dvě destinace. Požadavek na vyjmutou adresu by měl odejít přes fyzické rozhraní a požadavek na kontrolní interní adresu by měl stále používat tunel. Testování jen vyjmuté adresy nic nedokazuje o zbytku tunelu a testování veřejného webu testuje adresu, na kterou se tento web přeložil, což nemusí být ta z pravidla.

Nakonec zkontrolujte ovládací prvky, které mohou trasu přebít. Klientský kill switch nebo nastavení block-outside-dns ve Windows může zakázat přímý provoz, což se projeví jako spojení, které selže, i když je trasa správná. Nevypínejte tyto ovládací prvky, aby výjimka vypadala, že funguje; pokud politika přímou cestu zakazuje, je výjimka problémem návrhu pro toho, kdo vlastní službu VPN.

Po opětovném připojení nebo změně sítě to zkontrolujte znovu, protože brána před VPN a dostupná cesta jsou vlastnosti okamžiku, ne profilu.

Související články