Klienti sa pripoja a overia, a potom ich prevádzka odchádza nesprávnym smerom nahor, pretože jediná predvolená trasa na stroji patrí samotnej bráne. Nahradenie tejto predvolenej trasy by pokazilo vlastné aktualizácie stroja a prístup na správu, takže výber musí byť užší než „celá prevádzka“. Fungujúca podoba je pravidlo politiky naviazané na vnútornú zdrojovú adresu klientskeho poolu, ktoré ukazuje na druhú smerovaciu tabuľku vlastniacu alternatívny WAN. Od toho miesta ďalej ide kontrolný zoznam o úplnosti a správaní pri poruche, nie o samotnom pravidle.

Overte, že zdrojová adresa prežije až do rozhodnutia o smerovaní

Pravidlo politiky, ktoré zodpovedá rozsahu zdroja, sa aktivuje len vtedy, keď paket v čase vyhľadávania ešte nesie tento zdroj. Preposielaná klientska prevádzka to spĺňa, pokiaľ ju nič vyššie pred smerovaním neprepísalo. Prevádzka, ktorú generuje samotná brána, to nespĺňa, a práve preto môže jej vlastná predvolená trasa zostať tam, kde je.

Tu lokálne testy zavádzajú. Spustenie curl na bráne je lokálne vytvorený tok s adresou brány, takže vezme hlavnú tabuľku a o klientskej ceste nič nedokazuje. Testujte z pripojeného klienta alebo generujte prevádzku so zdrojom, ktorý do poolu skutočne patrí.

Začnite tým, že zapíšete skutočné hodnoty: prefix poolu, tunelové rozhranie, ktoré ho nesie, adresu a ďalší skok druhého WAN a číslo tabuľky, ktorú chcete použiť. Pred pridaním nových pravidiel vyčistite staré pravidlá z každého predchádzajúceho pokusu, pretože duplikované pravidlá s rôznymi prioritami vytvárajú poruchy, ktoré vyzerajú náhodne.

Zostavte vybranú tabuľku, ktorá je úplná

Tabuľka nie je predvolená trasa s priateľom. Potrebuje dosť trás, aby sa každé vyhľadávanie vyriešilo vnútri nej, vrátane pripojenej trasy pre podsieti WAN, aby bol ďalší skok dosiahnuteľný. Pre pool 10.77.0.0/24 na tun1, adresu WAN 203.0.113.20/24 s ďalším skokom 203.0.113.1 a tabuľku 600:

ip -4 route replace 203.0.113.0/24 dev usb0 src 203.0.113.20 table 600
ip -4 route replace 10.77.0.0/24 dev tun1 table 600
ip -4 route replace default via 203.0.113.1 dev usb0 table 600
ip -4 rule add priority 1500 from 10.77.0.0/24 lookup 600

Pravidlo stojí na priorite pod každým existujúcim pravidlom zachytávajúcim všetko, takže zodpovedajúci klienti najprv trafia tabuľku 600 a všetko ostatné prepadne do hlavnej tabuľky. Referencia ip-rule úplne opisuje model usporiadaného vyhľadávania a syntax selektora.

Potom porozmýšľajte, čo tabuľka neobsahuje. Cieľ, ktorý má trasu len v hlavnej tabuľke, napríklad podsieti na správu dostupná cez eth0, sa v tabuľke 600 nenájde a nevráti sa do hlavnej, keď tam predvolená trasa existuje. Ak sú tieto cesty dôležité, pridajte ich do vybranej tabuľky výslovne, čo je zvyčajne správna odpoveď pre tabuľku výstupu VPN.

Držte vlastnú prevádzku počúvajúceho mimo politiky

Počúvajúci OpenVPN má vlastné vonkajšie spojenie, prenášané cez to spojenie nahor, ktorým sa k nemu klient dostal. Táto prevádzka si musí zachovať spiatočnú cestu, s ktorou prišla, a široké pravidlo pokrývajúce verejnú adresu servera alebo celé tunelové rozhranie ju môže stiahnuť do alternatívnej tabuľky. Obmedzte pravidlo na vnútorný pool a na nič iné.

Filtrovanie spiatočnej cesty si zaslúži pohľad z toho istého dôvodu. Keď odpovede klientom odchádzajú cez usb0, zatiaľ čo požiadavka prišla iným spojením, prísne nastavenie rp_filter môže zahodiť pakety, ktoré smerovacia politika považuje za platné. Skontrolujte platné hodnoty sysctl na oboch rozhraniach, než usúdite, že pravidlo zlyhalo.

Poradie je dôležité aj voči všetkému ostatnému na stroji. Mosty Docker, druhý VPN a akékoľvek predchádzajúce pravidlá z obrazu poskytovateľa pridávajú priority, takže prečítajte si celý zoznam pravidiel namiesto predpokladu, že priorita 100 je sama.

Zlaďte preposielanie a preklad s trasou

Smerovanie vyberá spojenie nahor; neudeľuje povolenie preposielať. Jadro musí mať zapnuté preposielanie IPv4 a firewall musí prijať smer od klienta k WAN aj spiatočnú prevádzku. Správna tabuľka s reťazou FORWARD, ktorá tok zahodí, dáva rovnaký príznak ako chýbajúca trasa, preto sa obe kontrolujú v jednom prechode.

Ak druhý WAN nebude smerovať súkromný pool späť k vám, preložte zdroj na tomto výstupe. Pre rozhranie s dynamickou adresou je zvyčajnou voľbou úzke pravidlo masquerade obmedzené na pool a rozhranie:

iptables -t nat -A POSTROUTING -s 10.77.0.0/24 -o usb0 -j MASQUERADE

Rozsah je tu dôležitejší než cieľ. Pravidlo masquerade zodpovedajúce akémukoľvek výstupnému rozhraniu prepíše aj prevádzku, ktorá správne odchádza cez eth0, a to skrýva chyby smerovania namiesto ich opravy. Preklad beží až po rozhodnutí o smerovaní, takže nikdy nemôže opraviť paket odoslaný na nesprávne spojenie nahor.

Réžia tunela si tiež žiada pozornosť, keď sa cesty líšia. Ak si klienti dohodnú veľké TCP MSS a alternatívny WAN má nižšie MTU alebo v sebe tunel, veľké segmenty sa zaseknú, zatiaľ čo malé fungujú. Obmedzenie MSS na ceste preposielania z toho robí predvídateľné správanie namiesto občasného zaseknutia.

Rozhodnite, čo sa stane, keď usb0 zmizne

Prázdna tabuľka nie je stav zatvorenia pri poruche. Ak zodpovedajúca trasa zmizne, vyhľadávanie pokračuje na ďalšie pravidlo, dostane sa do hlavnej tabuľky a vezme predvolenú trasu eth0. Prevádzka, ktorá mala odísť cez druhý WAN, ticho odíde cez prvý, čo je pri nasadení so smerovaním podľa politiky zvyčajne výsledok, ktorý chcete najmenej.

Kde je tento návrat neprijateľný, pridajte do tabuľky 600 výslovnú terminálnu trasu, napríklad predvolenú trasu blackhole, alebo zahoďte pool vo firewalle, kým je rozhranie vypnuté. Každá z týchto možností je rozhodnutie, ktoré môžete zapísať; mlčanie nie je.

Trvalosť je posledný bod. Kto vlastní obe spojenia, či už správca siete, skript dispečera alebo životný cyklus pripojenia, musí pri každom opätovnom pripojení znova vytvoriť trasy a pravidlo bez pridávania duplikátov. Overte požiadavkou z reálneho klienta a samostatnou požiadavkou z brány, potvrďte pozorovaný výstup pri oboch, potom vytiahnite druhý WAN a sledujte, ktorý z dvoch navrhnutých výsledkov skutočne nastane. IPv6 potrebuje vlastnú tabuľku, pravidlo a preklad; pravidlo pre IPv4 vyššie o tom nič nehovorí.

Súvisiace články