Mohou trasy z DHCP poslat váš provoz mimo tunel VPN?
Šifrování chrání pakety až ve chvíli, kdy vstoupí do tunelu. O tom, které tam vstoupí, rozhoduje volba trasy. Zkontrolujte trasy z DHCP, pravidla a cestu, kterou aplikace jdou.
Šifrování začíná na hranici a touto hranicí je rozhodnutí o směrování, které koncový bod učiní dřív, než se jakýkoli paket zapouzdří. Síť, která vaše klíče nikdy nevidí, vám přesto může dát trasu, která se jí líbí víc než ta, kterou má tunel sám. Zde se pletou dvě selhání: čtení paketu, který už v tunelu je, a směrování paketu, který tam nikdy nebyl vložen.
Rozdíl je důležitý, protože druhé selhání se dá levněji zařídit a mnohem snáz přehlédnout. Projeví se jako požadavek, který odešel špatným rozhraním, zatímco klient stále hlásil zdravé spojení.
Dva způsoby, jak na vás síť může působit
Paket, který dorazí do tunelu, má svůj obsah skrytý před každým skokem, který překročí, a tato ochrana platí, i když vás cesta překvapí. Paket, který do tunelu nikdy nedorazí, je obyčejný požadavek z vaší adresy, odeslaný tam, kam ukazovala směrovací tabulka. První selhání potřebuje rozbitou šifru nebo kompromitovaného protějška, kdežto druhé potřebuje jen konfigurační zprávu, které se váš stroj rozhodl věřit. Právě tato asymetrie je důvod, proč si polovina se směrováním zaslouží vlastní kontrolu.
Zařízení na cestě nepotřebuje vaše klíče, aby ovlivnilo druhý případ. Potřebuje jen to, aby váš koncový bod přijal trasu, resolver nebo pravidlo zásady, které nějakou vytvoří.
expected: app -> tunnel device -> encapsulation -> internet
observed: app -> wlan0 -> plaintext -> internet
Odkud může trasa přijít dřív, než tunel existuje
DHCP rozdává víc než jen pronájem adresy. Volba beztřídní statické trasy může nést cílové prefixy a další skoky a RFC 3442 rozebírá bezpečnostní důsledky špatné adresy routeru: nesprávně přesměrovaný provoz, odmítnutí služby nebo pozorovatele usazeného na cestě. Klient, který tyto trasy přijme dřív, než se tunel zvedne, může skončit s preferovanou cestou, která s vaším poskytovatelem nemá nic společného.
Nic z toho nedělá injektáž tras univerzální. Klient musí volbu přijmout, prefix musí pokrývat provoz, na kterém vám záleží, zvolený další skok musí být dostupný a zásada vynucení musí paketu dovolit vyjít touto cestou. Odeberte kteroukoli z nich a stejná odpověď je neškodná. Proto se také dva stroje na jedné síti mohou chovat různě, protože neběží stejný klient, stejnou zásadu ani stejnou adresní rodinu.
IPv6 si zaslouží vlastní průchod, protože oznámení routeru nesou výchozí trasu jiným kódem než volba DHCPv4. Test, který zkoumá jen tabulku v4, to nepokryl.
Zkontrolujte cestu, kterou jádro skutečně zvolí
Dotazy na trasu mají odpověď, tak se jich ptejte, místo abyste usuzovali z kontrolky stavu. Níže uvedené příkazy ukazují zvolenou trasu a zdroj pro jeden cíl, plus pravidla, která mohou přebít hlavní tabulku. Spusťte je za připojení a znovu po opětovném připojení, protože obnovení pronájmu může odpověď změnit.
ip route get 203.0.113.10
ip route show table all | grep -E '^(default|203\.0\.113)'
ip rule show
resolvectl query example.com
Ve výstupu hledejte dvě věci: rozhraní uvedené v trase a zvolenou zdrojovou adresu. Trasa tunelem uvádí tunelové zařízení, uniklá trasa fyzické a rozdíl je vidět bez dešifrování čehokoli. Pokud se odpověď mezi spuštěními změní, uchovejte oba výstupy a porovnejte pravidla, která je vytvořila.
Nezastavujte se u výchozí trasy. Výjimka pro aplikaci, prefix rozděleného tunelu nebo druhé pravidlo zásady mohou vést konkrétní cíl kolem tunelu, zatímco výchozí trasa do něj stále ukazuje.
Rozhodněte, kde má vynucení žít
Tři podmínky rozhodují, zda vynucení na straně klienta stačí, nebo potřebujete něco mimo ně. Pokud klient instaluje a brání trasy pro každou adresní rodinu, kterou používáte, tunel, který vlastní výchozí trasu, obvykle stačí. Pokud stroj musí dosáhnout na místní prostředky, zatímco vše ostatní zůstává v tunelu, musí být tyto výjimky vyjmenované a vlastněné, místo aby se nechaly na tom, co inzeruje přístupová síť. A pokud platforma umí připoutat provoz k rozhraní pro každou aplikaci, takové připoutání je silnější zárukou než trasa, kterou může cokoli přebít.
Ať zvolíte cokoli, zapište rozhodnutí tam, kde žije konfigurace. Pravidlo, které existuje proto, že ho někdo napsal během incidentu, nepřežije další restart, takže držte místní výjimky a výjimky při startu úzké a zaznamenejte, proč každá existuje.
Po každé aktualizaci klienta a každé změně sítě znovu spusťte vyhledávací příkazy a porovnejte je s posledním zaznamenaným výstupem. Směrovací tabulka je hranice vynucení, tak k ní tak přistupujte.