Dva OpenVPN démony môžu oba hlásiť úspešný tunel, zatiaľ čo brána posiela každého klienta tou istou. V handshaku nič nerozhoduje, ktorý tunel klient použije; rozhoduje jadro, paket po pakete, prechádzaním pravidiel politiky a potom tabuľky, ktorú každé pravidlo pomenuje. Keď sa na to pozriete takto, konfigurácia prestáva byť o možnostiach OpenVPN a stáva sa smerovacou maticou s dvoma vlastníkmi.

Rozhoduje jadro, nie démon

Preposielaný paket prichádza na rozhranie LAN a smerovací kód vyhodnocuje zoznam pravidiel v poradí priorít. Prvé pravidlo, ktorého selektor zodpovedá, pomenuje tabuľku, a trasy tej tabuľky vyberú výstupné zariadenie. Ak tabuľka nemá zodpovedajúcu trasu, vyhľadávanie pokračuje ďalším pravidlom, a práve tento detail spôsobuje, že nedokončené nastavenie zlyháva potichu, nie nahlas.

Proces tunela do toho prechádzania nemá čo hovoriť. Vytvorí rozhranie a môže inštalovať trasy, ale či paket konkrétneho klienta vstúpi do tohto rozhrania, závisí úplne od tabuľky, do ktorej bol odoslaný. Dva tunely s rovnakými importovanými trasami preto súperia, a posledný zapisujúci vyhráva pre všetkých. Preto môže nastavenie v konfiguračných súboroch vyzerať vyvážene a napriek tomu posielať všetkých klientov cez jediného démona.

Dajte každej inštancii vlastnú sadu prostriedkov

Začnite názvami, pretože znovu použité názvy sú spôsob, akým obe inštancie omylom začnú zdieľať stav. Prideľte odlišné tunelové zariadenia, odlišné konfiguračné súbory, odlišné prihlasovacie údaje a odlišné služobné jednotky. Zaznamenajte vonkajší koncový bod a tunelovú adresu každej inštancie do tej istej tabuľky ako maticu politiky, aby neskoršia zmena mala jedno miesto, kam sa pozrieť.

dev tun-office
route-nopull
pull-filter ignore "redirect-gateway"

dev tun-lab
route-nopull

route-nopull drží trasy, ktoré server tlačí, mimo lokálnej tabuľky, a to je presne to, čo chcete, keď majú byť tabuľky politiky explicitné. Či daný server tlačí aj voľbu redirect-gateway a či vaša verzia klienta podporuje formu s filtrom, stojí za overenie v manuáli namiesto predpokladu.

Napíšte maticu: zdroj, tabuľka, zariadenie

Pre každú skupinu klientov pridajte pravidlo, ktoré vyberá tabuľku podľa zdrojovej adresy, a potom vložte zamýšľanú cestu do tej tabuľky:

ip rule add from 10.8.1.0/24 lookup 100 priority 1000
ip rule add from 10.9.1.0/24 lookup 200 priority 1000
ip route add default dev tun-office table 100
ip route add default dev tun-lab table 200

Tabuľka potrebuje cieľové trasy, ktoré má skupina mať, plus prípadné lokálne alebo správne výnimky, ktoré udržia bránu použiteľnou. Tabuľka obsahujúca iba predvolenú trasu je politikou plného tunela pre túto skupinu, čo môže byť presne správne, ale malo by to byť rozhodnutie, nie opomenutie.

Vlastná doprava tunela nie je v klientskej skupine

Šifrované pakety každého démona vznikajú na samotnej bráne a sú adresované vonkajšiemu partnerovi. Pravidlo, ktoré zodpovedá iba prefixu zdroja klienta, necháva tie pakety na pokoji, a preto sú pravidlá obmedzené na zdroj bezpečnejšie než pravidlá zodpovedajúce všetkému. Pravidlo bez selektora môže zachytiť vlastnú dopravu tunela a poslať ju späť cez tunel, a spojenie potom zlyhá spôsobom, ktorý vyzerá ako problém poskytovateľa.

Držte lokálnu správnu reláciu a cestu spodnej vrstvy výslovne mimo tabuliek politiky. Zapíšte tie výnimky vedľa matice; sú súčasťou návrhu, nie obchádzkou, ktorú treba počas incidentu znovu objaviť.

Voľba cesty ju nepovoľuje

Povolenie preposielať je druhé rozhodnutie prijaté neskôr na ceste. Pravidlo firewallu, ktoré prijíma pakety odchádzajúce druhým tunelom, neprinúti smerovací kód vybrať ho, a správna tabuľka nedáva povolenie preposielať. Musia existovať obe, a test, ktorý dokazuje len jedno, vás vzhľadom na druhé oklame. Keď jedna skupina funguje a druhá nie, skontrolujte tieto dva kroky oddelene namiesto prepisovania tabuliek.

Preklad zdroja je tretie rozhodnutie a mal by byť obmedzený na zdrojovú skupinu a tunelové zariadenie, ktoré ho skutočne nesie. Pridajte vyhradenú reťaz pre obe inštancie namiesto vymazania reťaze postrouting, pretože nesúvisiace služby tam môžu mať záznamy a vymazanie ich potichu odstráni.

Čo sa stane, keď jeden tunel spadne

Rozhodnite o správaní pri zlyhaní vopred. Keď tunelová tabuľka stratí svoju trasu, vyhľadávanie prepadne na ďalšie pravidlo a prevádzka skupiny pokračuje druhým tunelom alebo bežným vzostupným spojením bez akejkoľvek chyby. Ak to nie je prijateľné, pridajte ukončovacie pravidlo s nižším číslom priority, ktoré pre tento zdroj vráti nedostupný výsledok, aby strata bola viditeľná a nebola pohltená.

Odošlite novú požiadavku z každej zdrojovej skupiny a zaznamenajte štyri skutočnosti: zvolenú tabuľku, výstupné zariadenie, preložený zdroj a či sa odpoveď vrátila tou istou cestou. Potom vypnite jeden tunel a zopakujte. Dve zariadenia TUN v zozname rozhraní dokazujú, že oba démony naštartovali; nehovoria nič o tom, ktorý daný klient použil. Druhý beh, s jedným tunelom preč, je ten, ktorý ukazuje, či vaše záložné pravidlo robí to, čo ste zamýšľali.

Súvisiace články