OpenVPN iroute versus trasa v jádru: která chybí?
Server má trasu a provoz přesto stojí. Jedno rozhodnutí o cestě patří jádru, druhé protějšku; zjistěte, které chybí a co ověřit.
Paket pro 10.77.20.0/24 činí na serveru OpenVPN dvě samostatná rozhodnutí: operační systém jej musí předat rozhraní VPN a OpenVPN musí vědět, který připojený klient vlastní tento prefix. Chybějící trasa v jádru jej zahodí před tunelem, chybějící trasa protějšku po něm. Obě selhání vypadají ze vzdálené LAN stejně a diagnóza, které máte, vyžaduje jeden příkaz na každé straně.
V klasické datové cestě v uživatelském prostoru dostane trasa v jádru paket do procesu tunelu a iroute tomuto procesu říká, který protějšek jej má přijmout. Ani jedno nenahrazuje druhé a konfigurace s pouze jedním z nich bude vypadat rozumně až do prvního pingu.
Dvě rozhodnutí, ne jedna trasa
Představte si propojení dvou lokalit, kde 10.77.20.0/24 leží za jediným klientem. Trasa v jádru serveru, například ip route add 10.77.20.0/24 dev tun0, posílá odpovídající pakety tunelovému zařízení. OpenVPN pak nahlédne do své vlastní interní tabulky, sestavené ze záznamů iroute v adresáři konfigurace klienta, a rozhodne, které spojení protějšku je přijme. Bez trasy v jádru se paket nikdy nedostane do procesu a bez trasy protějšku se do procesu dostane a nikam nedojde.
Toto rozdělení se snadno zapomene, protože jediný řádek trasy v profilu klienta může vypadat, že dělá obě práce. Nedělá: vložení trasy říká klientům, co mají posílat tunelem, zatímco iroute říká serveru, kdo vlastní rozsah adres za klientem. Žijí v různých souborech, čtou je různé strany a selhávají v opačných směrech.
Kam iroute patří a co říká
Záznam jde do souboru pro jednotlivého klienta pojmenovaného podle common_name klienta, v client-config-dir, jako iroute 10.77.20.0/24. Shoda názvu souboru není kosmetická: OpenVPN vyhledá ověřenou identitu a přečte soubor přesně s tímto názvem, takže soubor site-a působí jen na klienta, jehož běžné jméno je site-a. Přidejte ccd-exclusive, pokud klienti bez takového souboru mají být rovnou odmítnuti, což je správné nastavení, když je každý klient bránou lokality. Udržujte jeden soubor na bránu a pojmenujte jej podle subjektu certifikátu, který skutečně vydáváte.
Otestujte záznam ze serveru, než obviníte vzdálenou LAN. Stavový soubor vypisuje připojené klienty s jejich běžnými jmény a server běžící s --verb 4 zapisuje instalaci iroute ve chvíli, kdy se protějšek připojí. Pokud se při připojení nic neobjeví, soubor je ve špatném adresáři nebo pojmenovává špatnou identitu.
Past: soubor existuje, identita je špatná
Správně vypadající iroute připojený ke špatnému protějšku ztrácí více času než chybějící soubor, protože na disku vypadá vše správně. Přejmenování certifikátů, duplicitní běžná jména a username-as-common-name, který mění efektivní identitu, to vše vytváří. Zkontrolujte, kterou identitu server ověřil, místo které jste očekávali: výstup stavu je směrodatný, zatímco název souboru je jen vyhledávací klíč.
Trasa může svého vlastníka přežít. Statické trasy a záznamy iroute popisují prefix, nikoli záruku dostupnosti, takže provoz může dál proudit k protějšku, který je právě odpojený.
Dokončete cestu za protějškem
Vlastnictví protějšku je střed cesty, ne konec. Klient musí přeposílat pakety z tunelu do své LAN, což znamená povolené přeposílání IP na onom hostiteli a pravidlo firewallu, které průchod dovolí. Hostitelé ve vzdálené LAN potřebují zpáteční cestu pro adresu tunelu: buď trasu směřující zpět na bránu, nebo záměrný návrh NAT na straně klienta. Ověřte nastavení přeposílání na klientovi pomocí sysctl net.ipv4.ip_forward, místo abyste předpokládali výchozí hodnotu distribuce.
Jestliže se k této podsíti musí dostat jiní klienti VPN, uspořádání znovu roste: server potřebuje client-to-client a ti klienti musí prefix směrovat tunelem. Nic z toho nevyplývá z vlastní směrovací tabulky serveru.
Ověřte jeden cíl ze skutečného zdroje místo ze samotného serveru. Ping z nesouvisejícího hostitele v LAN na hostitele za klientem procvičí zpáteční cestu, pravidlo přeposílání i vlastnictví protějšku jedním pohybem, zatímco úspěšný handshake dokazuje jen identitu. Potom odpojte vlastnící protějšek a zaznamenejte, co trasa dělá, protože ta odpověď je váš způsob selhání.