Ráno som strávil pri tuneli, ktorý sa čisto zdvihol a prenášal prevádzku presne jedným smerom: pobočka dosiahla na súborový server v centrále a každé spojenie otvorené z centrály do pobočky zomrelo na prvom SYN. SA boli aktívne, počítadlá tunela rástli a handshake nikdy nebol problém. Odpoveď sa smerovala niekam, čo tunel nepokrýva, a toto rozhodnutie patrí vzdialenej strane. VPN medzi lokalitami prenáša len pakety, ktoré hostiteľ odovzdá bráne, a každý hostiteľ toto rozhodnutie robí zvlášť, v každom smere, z vlastnej smerovacej tabuľky.

Oba smery sa smerujú oddelene

IP si nepamätá smer konverzácie. Každý hostiteľ, ktorý odošle paket, vykoná vlastné hľadanie najdlhšieho prefixu, vyberie jeden ďalší skok a rozhodnutie zabudne. Požiadavka a odpoveď sú dva nesúvisiace pakety, ktoré náhodou patria k tomu istému spojeniu, a tunel je jeden skok, ktorý môže a nemusí použiť ktorýkoľvek z nich. Nič vo výmene IKE neučí vzdialený server, ako dosiahnuť vašu podsieť; rokovanie sa len zhodne na tom, ktoré prefixy sa smú šifrovať.

Tá dohoda je druhá brána. V strongSwane sú selektory prevádzky leftsubnet a rightsubnet a paket, ktorého zdroj alebo cieľ leží mimo dohodnutej dvojice, sa nešifruje, nech smerovacia tabuľka hovorí čokoľvek. Prefix, ktorý sa smeruje do tunela, ale v selektoroch chýba, je tiché jednosmerné zlyhanie: trasa vyzerá správne, paket predsa odchádza v čitateľnej podobe alebo sa zahodí, a sťažuje sa len protokol charonu.

Vzdialený hostiteľ o vašom tuneli nič nevie

Vnútri vzdialenej LAN je odpoveď obyčajný paket adresovaný vášmu klientovi. Cieľový hostiteľ nevidí žiadnu hlavičku IPsec a nemá dôvod uprednostniť bránu VPN; vyhľadá váš prefix, nenájde nič konkrétnejšie ako svoju predvolenú trasu a bude ju nasledovať. Ak predvolená trasa ukazuje na hlavný firewall, firewall má buď trasu späť do tunela, alebo nie. Keď ju nemá, dostanete tiché zahodenie, ICMP nedostupnosť alebo odpoveď, ktorá vyjde rozhraním k internetu a zahynie.

Druhé rozhranie stačí na to, aby sa to pokazilo aj vtedy, keď trasa existuje. NAS s management rozhraním v inom VLAN, server so záložným uplinkom, pravidlo politiky, ktoré posiela jeden rozsah zdrojov do druhej tabuľky: čokoľvek z toho môže odpoveď zachytiť. V Linuxe ip rule show a ip route show table all ukážu pravidlá a tabuľky, ktoré predvolený výpis skrýva.

Prečítajte rozhodnutie na stroji, ktorý odpoveď odosiela

Pýtajte sa jadra, skôr než niečo zmeníte, a dajte mu zdrojovú adresu, pretože pravidlá závislé od zdroja menia odpoveď.

ip route get 10.10.5.10 from 10.20.30.15
ip rule show
ip route show table all
ss -tn state established "( sport = :445 )"

Výstup uvádza odchádzajúce rozhranie a ďalší skok. Ak rozhranie nie je to, ktoré mieri k bráne VPN, našli ste závadu a zostáva vybrať, kam trasa patrí. Ping z brány tu dokazuje málo: odpovedá adresou, ktorú vzdialený hostiteľ vie umiestniť, nie adresou vášho notebooku.

Vo Windows sú ekvivalenty Find-NetRoute -RemoteIPAddress 10.10.5.10 pre rozhodnutie a Get-NetRoute pre tabuľku. Trasa pridaná pomocou New-NetRoute s vyššou metrikou ako predvolená prehráva ticho, takže čítajte stĺpec metriky, nie záznam. Potom to potvrďte paketmi: tcpdump -ni any "host 10.10.5.10 and tcp port 445" na vzdialenom LAN rozhraní ukáže požiadavku a ten istý filter na strane tunela ukáže, či sa odpoveď vrátila. Viditeľná požiadavka bez odpovede znamená, že odpoveď bola smerovaná inam alebo zahodená; odpoveď na nesprávnom rozhraní vám dá vinníka skôr, než sa dotknete trasy.

Keď brána servera nie je koncovým bodom VPN

Mnoho lokalít stavia firewall medzi servery a koncentrátor. Ten firewall odpoveď preposiela, takže potrebuje trasu pre prefix vášho klienta smerom k bráne VPN a politiku preposielania v oboch smeroch. Stavové zariadenia to zhoršujú: požiadavka prešla firewallom od hostiteľa LAN, ktorému to povolil, odpoveď teraz prichádza z iného smeru a záznam sledovania spojení už nesedí, takže paket sa zahodí ako neplatný, nie ako zakázaný. Preto log politiky vyzerá prázdny, kým prevádzka mizne.

Brána má vlastný druhý filter. Spätné filtrovanie cesty v Linuxe zahadzuje pakety, ktorých zdroj nie je dostupný cez rozhranie, ktorým prišli, a to je presne podoba legitímnej asymetrickej spiatočnej cesty. príručka strongSwanu k preposielaniu preto žiada net.ipv4.ip_forward a uvoľnený net.ipv4.conf.all.rp_filter. Prísna hodnota 1 na ktorejkoľvek bráne ticho pokazí správnu trasu a nstat -az ukáže zahodenia, ak viete, kam sa pozerať.

SymptomWhere the reply is most likely lost
Gateway ping works, LAN host silentSource address the far host cannot place in its table
SYN arrives, no SYN-ACK, tunnel counters flatNo route to the client prefix on the far host or its gateway
Reply counted on the internet-facing interfaceDefault route or policy rule on the far host
Firewall reports invalid stateAsymmetric path through a stateful device
Worked until a link failed overNew path is asymmetric, or rp_filter now rejects it

Smerujte alebo prekladajte, potom overte v oboch smeroch

Dve opravy nie sú rovnocenné. Pridanie trasy zachová adresu klienta nedotknutú, takže pravidlá založené na zdroji, audítorské záznamy a aplikácie zaznamenávajúce volajúceho ďalej fungujú; cenou je, že každý skok, ktorý rozhodnutie prijíma, potrebuje trasu, teda viac miest na chybu. Maskovanie na vzdialenej bráne zhusťuje spiatočnú cestu na jeden skok, pretože odpoveď je teraz adresovaná samotnej bráne, a skrýva, ktorý klient čo urobil.

iptables -t nat -A POSTROUTING -o eth1 -s 10.20.30.0/24 -j MASQUERADE

Vyberte ho vedome: len čo sa klienti začnú javiť ako adresa brány, ACL založené na zdroji ich prestanú rozlišovať a conntrack musí držať mapovanie, aby sa odpoveď prepísala späť do tunela. Ak selektory stále vylučujú prefix klienta, NAT nič nemení, pretože požiadavka do tunela nikdy nevstúpila.

Skôr než to vyhlásite za opravené, potvrďte štyri veci v poradí: trasu na hostiteľovi, ktorý odpoveď odosiela, trasu na každom skoku, ktorý ju preposiela, selektory pokrývajúce oba prefixy a záznam, ktorý ukazuje odpoveď vstupujúcu do tunela s očakávaným zdrojom. Potom test zopakujte z druhej lokality. Jeden prechádzajúci smer je polootvorený návrh a druhý smer zvyčajne zlyhá z iného dôvodu, než aký ste práve opravili.

Súvisiace články