Příchozí spojení k hostiteli, který také spouští VPN klienta, selhávají velmi specifickým způsobem: handshake dorazí, démon odpoví a klient nedostane nic zpět. Nic port neblokuje. Odpověď odešla tunelem, protože tunel vlastní výchozí trasu a jádro směruje odpovědi podle cíle, ne podle paměti toho, odkud požadavek přišel. Démon je v pořádku a port je otevřený.

Odpověď se směruje, nepamatuje

VPN klient, který nainstaluje výchozí trasu, přidá záznam, jenž předčí bránu LAN, buď metrikou, nebo rozdělením prostoru na dvě konkrétnější poloviny. Odchozí pakety nyní volí rozhraní tunelu. Jádro se nikdy neptá, odkud paket, na který se odpovídá, původně dorazil. To jediné opomenutí vysvětluje každý následující příznak.

Dopředný směr se směruje podle cíle, a zpětný také. Odpověď je adresována veřejnému klientovi, kterého tunel rád ponese. Vzdálený konec dostane paket, jehož zdroj nevlastní, zahodí ho a původní klient čeká, dokud nevyprší čas.

Přísné filtrování zpětné cesty může zahodit příchozí paket dřív, než ho démon vůbec přečte. Zkontrolujte nejdřív ten čítač, protože zahození filtrem a chyba směrování vypadají zvenku stejně.

ip route show default
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.eth0.rp_filter
nft list ruleset | grep -A3 'hook forward'

První příkaz ukazuje, která výchozí trasa právě vyhrává. Druhý hlásí, zda přísné filtrování platí globálně nebo pro rozhraní, a třetí ukazuje jakékoli pravidlo v řetězci předávání, které může být zapojené.

Tři způsoby, jak zachovat zpáteční cestu

Vyloučení cíle služby z tunelu je nejužší možnost. Trasa hostitele namířená na bránu LAN plus démon vázaný na fyzickou adresu místo všech adres drží ten jeden tok mimo tunel. Změna je místní a snadno vratná.

Politické směrování je obecná odpověď. Pravidlo navázané na zdrojovou adresu nebo na značku firewallu vybere tabulku, jejíž výchozí trasa míří na bránu WAN, zatímco vlastní spojení hostitele dál používají tunel. Udržujte prioritu explicitní, aby pravidlo nemohlo být později zastíněno.

ip rule add from 203.0.113.25/32 table 100 priority 100
ip route add default via 192.0.2.1 dev eth0 table 100
ip route get 198.51.100.7 from 203.0.113.25

První dva příkazy postaví alternativní cestu pro odpovědi se zdrojem ve veřejné adrese. Třetí se jádra ptá, kterou cestu by přesně tento zdroj a cíl zvolily, a tak potvrdíte, že pravidlo má nějaký účinek.

Překlad zdroje je třetí možnost a jediná, která přežije router, jenž před službou už dělá NAT. Odpověď se musí vrátit k tomu routeru, a maskování na rozhraní WAN toho dosáhne, zatímco klienta skryje z protokolů služby. Ruční nahrazení výchozí trasy po připojení je diagnostika, protože klient tabulku při dalším připojení přepíše.

Když box směruje i pro LAN

Stejná porucha se objeví o jeden skok dál, když hostitel směruje pro zařízení za sebou. Příchozí spojení se předá internímu zařízení, jehož jedinou zpáteční cestou je tunel, a odpověď se k vnějšímu klientovi dostane z adresy poskytovatele. Interní zařízení celou dobu pracuje správně.

Sledování spojení pak uvidí odpověď pro tok, který nikdy nezaznamenalo, a zahodí ji. Překlad cíle doručí příchozí spojení zařízení a překlad zdroje způsobí, že odpověď vypadá, jako by vycházela ze samotného routeru.

Politická trasa, která drží předávaný port na WAN, zatímco vlastní provoz routeru používá tunel, je čistší ekvivalent. Bez překladu zdroje je odpověď adresována vnějšímu klientovi a interní zařízení pro tu adresu nemá vůbec žádnou trasu.

Tři sondy, které oddělí příčiny

Proveďte tři sondy: spojení do boxu z internetu, spojení z něj na veřejný hostitel a vyhledání jména. Když se první dvě rozcházejí, je na vině zpáteční cesta. Když jména selhávají oběma směry, je resolver jiná závada, která tunel jen sdílí.

Nejdřív opravte otázku směrování, potom se dívejte na jména. Míchat obojí je způsob, jak je fungující server obviňován z rozbitého resolveru.

Zaznamenejte, které rozhraní výjimka jmenuje, a držte konfiguraci pod verzovací kontrolou. Pravidlo napsané proti rozhraní, které se po upgradu přejmenuje, dnes projde a po dalším restartu selže.

Související články