Prichádzajúce spojenia k hostiteľovi, ktorý tiež spúšťa klienta VPN, zlyhávajú veľmi špecifickým spôsobom: handshake dorazí, démon odpovie a klient nedostane nič späť. Nič neblokuje port. Odpoveď odišla tunelom, pretože tunel vlastní predvolenú trasu a jadro smeruje odpovede podľa cieľa, nie podľa pamäti o tom, odkiaľ požiadavka prišla. To jediné opomenutie vysvetľuje každý nasledujúci príznak.

Odpoveď sa smeruje, nepamätá

Klient VPN, ktorý nainštaluje predvolenú trasu, pridá záznam, ktorý prekoná bránu LAN, buď metrikou, alebo rozdelením priestoru na dve konkrétnejšie polovice. Odchádzajúce pakety teraz vyberajú rozhranie tunela. Jadro sa nikdy nepýta, odkiaľ paket, na ktorý sa odpovedá, pôvodne dorazil. To jediné opomenutie vysvetľuje každý nasledujúci príznak.

Dopredný smer sa smeruje podľa cieľa, a spätný tiež. Odpoveď je adresovaná verejnému klientovi, ktorého tunel rád prenesie. Vzdialený koniec dostane paket, ktorého zdroj nevlastní, zahodí ho a pôvodný klient čaká, kým nevyprší čas.

Prísne filtrovanie spätnej cesty môže zahodiť prichádzajúci paket skôr, než ho démon vôbec prečíta. Najprv skontrolujte ten počítadlo, pretože zahodenie filtrom a chyba smerovania vyzerajú zvonku rovnako.

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

Prvý príkaz ukazuje, ktorá predvolená trasa práve vyhráva. Druhý hlási, či prísne filtrovanie platí globálne alebo pre rozhranie, a tretí ukazuje akékoľvek pravidlo v reťazci preposielania, ktoré môže byť zapojené.

Tri spôsoby, ako zachovať spätnú cestu

Vylúčenie cieľa služby z tunela je najužšia možnosť. Trasa hostiteľa namierená na bránu LAN plus démon viazaný na fyzickú adresu namiesto všetkých adries drží ten jeden tok mimo tunela. Zmena je lokálna a ľahko vratná.

Smerovanie podľa politiky je všeobecná odpoveď. Pravidlo naviazané na zdrojovú adresu alebo na značku firewallu vyberie tabuľku, ktorej predvolená trasa ukazuje na bránu WAN, zatiaľ čo vlastné spojenia hostiteľa naďalej používajú tunel. Udržujte prioritu explicitnú, aby pravidlo nemohlo byť neskôr zatienené.

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

Prvé dva príkazy zostavia alternatívnu cestu pre odpovede so zdrojom vo verejnej adrese. Tretí sa jadra pýta, ktorú cestu by presne tento zdroj a cieľ zvolili, a tak potvrdíte, že pravidlo má nejaký účinok.

Preklad zdroja je tretia možnosť a jediná, ktorá prežije router, ktorý pred službou už robí NAT. Odpoveď sa musí vrátiť k tomu routeru, a maskovanie na rozhranie WAN to dosiahne, pričom klienta skryje z protokolov služby. Ručné nahradenie predvolenej trasy po pripojení je diagnostika, pretože klient tabuľku pri ďalšom pripojení prepíše.

Keď box smeruje aj pre LAN

Rovnaká porucha sa objaví o jeden skok ďalej, keď hostiteľ smeruje pre zariadenia za sebou. Prichádzajúce spojenie sa prepošle internému zariadeniu, ktorého jedinou spätnou cestou je tunel, a odpoveď sa k vonkajšiemu klientovi dostane z adresy poskytovateľa. Interné zariadenie celý čas pracuje správne.

Sledovanie spojení potom uvidí odpoveď pre tok, ktorý nikdy nezaznamenalo, a zahodí ju. Preklad cieľa doručí prichádzajúce spojenie zariadeniu a preklad zdroja spôsobí, že odpoveď vyzerá, akoby vychádzala zo samotného routera.

Politická trasa, ktorá drží preposielaný port na WAN, zatiaľ čo vlastná prevádzka routera používa tunel, je čistejší ekvivalent. Bez prekladu zdroja je odpoveď adresovaná vonkajšiemu klientovi a interné zariadenie pre tú adresu nemá vôbec žiadnu trasu.

Tri sondy, ktoré oddelia príčiny

Vykonajte tri sondy: spojenie do boxu z internetu, spojenie z neho na verejného hostiteľa a vyhľadanie mena. Keď sa prvé dve rozchádzajú, na vine je spätná cesta. Keď mená zlyhávajú oboma smermi, resolver je iná porucha, ktorá tunel len zdieľa.

Najprv opravte otázku smerovania, potom sa pozerajte na mená. Miešať oboje je spôsob, akým je fungujúci server obviňovaný z pokazeného resolvera.

Zaznamenajte, ktoré rozhranie výnimka pomenúva, a držte konfiguráciu pod verziovou kontrolou. Pravidlo napísané proti rozhraniu, ktoré sa po aktualizácii premenuje, dnes prejde a po ďalšom reštarte zlyhá.

Súvisiace články