WireGuard: dve polovičné trasy proti 0.0.0.0/0 vo wg-quick
Dva rozsahy /1 pokrývajú rovnaké adresy ako /0, ale wg-quick ich smeruje inak. Pred úpravou skontrolujte pravidlá politiky, značky a cestu ku koncovému bodu.
Dva prefixy /1 pokrývajú presne tie isté adresy IPv4 ako jeden /0 a táto rovnosť platí len vnútri zoznamu povolených prefixov partnera. Prestáva platiť v okamihu, keď sa nástroj na nastavenie rozhodne, ako smerovať, pretože Linux wg-quick spracúva predvolený prefix ako špeciálny prípad a nie ako aritmetiku. Špeciálna vetva nainštaluje vyhradenú tabuľku, dve pravidlá politiky, značku socketu a nastavenia spätnej cesty, ktoré dvojica polovičných trás nikdy nedostane. Keď teda po úprave prestane fungovať proxy alebo prehliadač, prefixy sú najmenej zaujímavou časťou zmeny.
Zoznam prefixov nie je celá konfigurácia
AllowedIPs robí dve veci naraz a iba jedna z nich sa týka pokrytia. Pre samotný WireGuard je zoznam kryptokľúčové smerovanie: rozhoduje, ktoré ciele sa šifrujú smerom k partnerovi a ktoré zdrojové adresy smie tento partner používať. Pre wg-quick slúži ten istý zoznam aj ako špecifikácia trás a trasa, ktorú vytvorí, závisí od toho, do ktorej vetvy zoznam náhodou zapadne. Identické pokrytie pri dvoch rôznych tvaroch zoznamu teda nehovorí nič o identickom stave hostiteľa.
Predvolená konfigurácia vám toto rozhodnutie berie z rúk, pretože Table je predvolene automatické a nástroj sám vyberá, kam trasy dopadnú. Iný správca siete, obal distribúcie alebo vlastná hodnota Table menia výsledok znova, a preto rada napísaná pre jedného hostiteľa môže na ďalšom vyzerať nesprávne.
Čo predvolená vetva pridáva nad rámec trasy
Záznam /0 pošle wg-quick do cesty predvolenej trasy: samostatná smerovacia tabuľka prijme predvolenú trasu, jedno pravidlo politiky tam posiela neoznačenú prevádzku, druhé pravidlo udržiava konkrétnejšie trasy hlavnej tabuľky ako autoritatívne a rozhranie dostane značku firewallu na svoj vlastný socket. Touto značkou je strážca slučky. Šifrované datagramy nesúce prevádzku tunela odchádzajú s nastavenou značkou, aby pravidlo, ktoré všetko ostatné posiela do tunela, neprehltlo vlastné transportné pakety tunela.
Dvojica záznamov /1 ide namiesto toho obvyklou cestou trasy. Do nakonfigurovanej tabuľky dopadnú dve trasy a žiadny z okolitých mechanizmov sa neobjaví, nie preto, že by bol zbytočný, ale preto, že touto kódovou cestou sa nikdy nešlo.
Kde sa obe usporiadania rozchádzajú
Rozchod sa najprv prejaví ako rekurzia. Keď sú polovičné trasy v hlavnej tabuľke, vlastná transportná adresa partnera spadá do prefixu tunela, takže paket, ktorý má tunel niesť, zodpovedá trase smerujúcej dovnútra tunela. Niečo ho musí vyňať: trasa hostiteľa pre aktuálny koncový bod, ručne aplikovaná značka alebo pravidlo špecifické pre rozhranie. Trasa hostiteľa funguje, kým sa adresa koncového bodu nezmení, čo sa deje pri koncových bodoch založených na DNS, roamingových klientoch a konfiguráciách s viacerými partnermi.
Druhé, všetko, čo uvažuje o značkách, mení správanie. Transparentný proxy, ktorý presmerúva spojenia lokálne, vytvára nové sockety, ktorých značky a zdroje sa líšia od pôvodného toku klienta, a pravidlá politiky generované predvolenou vetvou boli súčasťou toho, čo tieto toky roztriedilo. Čítať vlastné odchádzajúce spojenie proxy je iné cvičenie než testovať, či je pôvodný cieľ dosiahnuteľný.
Pred úpravou si prečítajte pravidlá a značky
Zachyťte aktuálny stav, kým je tunel zdravý, potom znova po zmene, a porovnajte oba výpisy namiesto uvažovania z konfiguračného súboru. Zahrňte pravidlá politiky, každú tabuľku, značku rozhrania a zaznamenané koncové body.
ip rule show
ip -4 route show table all | grep -E 'default|wg1'
wg show wg1 fwmark
wg show wg1 endpoints
Ak prvý riadok výstupu stratil pravidlo pre neoznačenú prevádzku a vyhradená tabuľka je prázdna, predvolená vetva nebeží a žiadna aritmetika prefixov jej účinky neobnoví. Značka nula na rozhraní, ktoré predtým nejakú nosilo, je rovnaký signál, viditeľný v jedinej hodnote.
Pred nasadením si vyskúšajte stratu tunela
Ak je usporiadanie s polovičnými trasami úmyselnou voľbou, musí chýbajúce časti dodať výslovne: cestu koncového bodu, ktorá prežije zmeny adresy, zamýšľané správanie pri výpadku tunela a zodpovedajúce ošetrenie pre IPv6. Zapíšte ich ako požiadavky, namiesto toho, aby ste ich objavili počas výpadku. Potom si výpadok vyskúšajte, pretože plný tunel, ktorý ticho prepadne na fyzický uplink, je horší než ten, ktorý prestane fungovať.
sudo ip -4 route add 198.51.100.20/32 via 192.0.2.1 dev eth0
ip -4 route get 198.51.100.20
sudo wg-quick down wg1
Vyhľadanie trasy by malo vyriešiť koncový bod z fyzického rozhrania bez prechodu tunelom a vypnutie rozhrania by malo ponechať hostiteľa v stave, ktorý dizajn sľúbil. Proxy, ktorý po výmene funguje, dokazuje, že vygenerovaný stav hostiteľa mal význam; nedokazuje, že prevencia slučiek a správanie vo vypnutom stave prežili úpravu.