Politické smerovanie odpovedá na inú otázku, než akú kladú väčšina poznámok k riešeniu problémov. Hlavná tabuľka hovorí, kam ide cieľ; pravidlá politiky hovoria, ktorá tabuľka sa vôbec prehliada, a môžu to rozhodnúť podľa zdrojovej adresy, značky paketu, alebo rozhrania, na ktorom paket prišiel. Keď sa tunel správa nekonzistentne, príčinou je často sada pravidiel a smerovacia tabuľka často nie.

Pravidlá vyberajú tabuľku, potom tabuľka vyberá trasu

Každé pravidlo nesie prioritu, podmienku zhody a cieľovú tabuľku. Jadro prechádza pravidlá v poradí priority a zastaví sa pri prvej zhode, potom vykoná bežné hľadanie najdlhšieho prefixu v tej tabuľke. Pravidlo ukazujúce na prázdnu tabuľku prepadne na to, čo vyberie ďalšie pravidlo, a tak môže starostlivo napísané pravidlo vyzerať, akoby nič nerobilo.

Preto výpis hlavnej tabuľky málokedy vysvetlí fungujúceho klienta VPN. Klienti zvyčajne vkladajú pravidlá s nízkymi číslami priority, dávno pred predvoleným pravidlom hlavnej tabuľky, takže paket sa nikdy nedostane na trasu, na ktorú ste hľadeli. Zníženie metriky v hlavnej tabuľke nič nezmení pre prevádzku, ktorá už bola odklonená.

Pravidlo tiež môže zámerne urobiť z prefixu čiernu dieru alebo ho urobiť nedostupným. Niektorí klienti pridávajú také pravidlo ako vypínač, a potom odhod vyzerá ako pokazený tunel, nie ako nakonfigurovaný.

Čítajte sadu pravidiel ako postupnosť, nie ako zoznam

Vypíšte pravidlá s ich prioritami a tabuľkami, na ktoré odkazujú, potom vypíšte každú tabuľku, ktorá nesie predvolenú trasu alebo trasu tunela. Poradie je tá časť, na ktorej záleží, a je to časť, ktorú snímka obrazovky zvyčajne vynechá:

ip rule show
ip route show table all | sed -n '1,60p'
ip route get 198.51.100.20 from 10.8.0.2
ip route get 198.51.100.20 from 10.8.0.2 mark 0x1

Posledné dva príkazy sú tie, ktoré menia teóriu na pozorovanie, pretože sa pýtajú čo by jadro urobilo pre ten zdroj a tú značku. Ak sa odpoveď zmení, keď sa zmení značka, ide o pravidlo založené na značke a každý test, ktorý značku vynechá, testuje iný paket. Vonkajšie spojenie si zaslúži vlastné pravidlo. Tunel, ktorý smeruje všetku prevádzku cez seba, musí vylúčiť adresu koncového bodu, ku ktorému sa pripája, inak sa šifrované pakety posielajú späť do tunela, ktorý práve opustili. Väčšina klientov toto vylúčenie vkladá automaticky, a ručne upravená sada pravidiel je miesto, kde chýba.

Značky a sockety: dva spôsoby, akými klienti delia prevádzku

Niektorí klienti označujú pakety vo firewalle a pridávajú pravidlo, ktoré značke zodpovedá. Iní používajú smerovanie na úrovni socketu a nastavujú trasu na sockete pred pripojením. Prvé je vidieť v ip rule; druhé nie, a v bežnom vyhľadávaní sa neobjaví.

Ak sa testovací program správa inak ako aplikácia, ktorú má zastupovať, skontrolujte, či aplikácia nastavuje značku alebo sa viaže na zariadenie. Ten rozdiel nie je záhada, keď sa mechanizmus pomenuje, a vysvetľuje, prečo curl z shellu a karta prehliadača môžu na tom istom stroji ísť rôznymi cestami. Obe techniky sú politické smerovanie v širšom zmysle: vyberajú cestu niečím iným než cieľom. Ani jedna z nich neautorizuje prevádzku a ani jedna nenahrádza pravidlá firewallu alebo prihlasovacie údaje, ktoré protistrana očakáva.

Vystopujte vlastníctvo, než pridáte ďalšie pravidlo

Pravidlá inštaluje niečo. Klient VPN, správca siete a ručne napísaný skript môžu každý pri štarte pridať pravidlá a logika opätovného pripojenia môže ponechať predchádzajúcu sadu. Dve zastarané pravidlá z predchádzajúceho profilu budú naďalej usmerňovať prevádzku dlho po tom, čo bol profil vymazaný.

Zistite, ktorý proces pravidlo vlastní, podľa jeho priority a tvaru, a skontrolujte, či tento vlastník sadu pri každom pripojení prepisuje. Ak áno, ručné pravidlo pridané dnes zajtra zmizne a oprava patrí do konfigurácie klienta, nie do súboru histórie shellu. Vymazanie celej sady pravidiel kvôli testu je lákavá skratka s predvídateľnou cenou: odstráni aj pravidlá, ktoré klient potrebuje, aby jeho vlastný tunel fungoval. Mažte jedno pravidlo po druhom, alebo testujte na stroji, ktorý môžete reštartovať.

Dokážte rozsah dvoma tokmi, nie jedným

Oprava sa overí len tokom, ktorý má byť zasiahnutý, a tokom, ktorý nemá. Vyberte cieľ, ktorý politika smeruje do tunela, a jeden, ktorý musí zostať vonku, potom porovnajte vyhľadania a zachytenia pre oba:

ip route get 198.51.100.20 from 192.0.2.44
ip route get 198.51.100.21 from 192.0.2.44
tcpdump -ni any host 198.51.100.21 and port 443

Keď dve vyhľadania vrátia rôzne rozhrania, pravidlo niečo robí. Keď vrátia rovnaké rozhranie, pravidlo zodpovedá širšie, než bolo zamýšľané, a to je porucha, ktorá potichu posiela celú podsieť tunelom určeným pre jednu aplikáciu.

Zapíšte priority pravidiel a vlastnícku službu do tiketu spolu s dvoma testovacími adresami. Ďalší človek potom má reprodukovateľnú dvojicu namiesto opisu príznaku a dokáže za minútu povedať, či politické smerovanie stále pôsobí.

Súvisiace články