WireGuard: dvě poloviční trasy versus 0.0.0.0/0 ve wg-quick
Dva rozsahy /1 pokrývají stejné adresy jako /0, ale wg-quick je směruje jinak. Před úpravou zkontrolujte pravidla zásad, značky a cestu ke koncovému bodu.
Dva prefixy /1 pokrývají přesně stejné adresy IPv4 jako jediný /0 a tato rovnost platí jen uvnitř seznamu povolených prefixů protějšku. Přestává platit ve chvíli, kdy se nástroj pro nastavení rozhodne, jak směrovat, protože Linux wg-quick zpracovává výchozí prefix jako zvláštní případ, nikoli jako aritmetiku. Zvláštní větev nainstaluje vyhrazenou tabulku, dvě pravidla zásad, značku socketu a nastavení zpětné cesty, které dvojice polovičních tras nikdy nedostane. Když tedy proxy nebo prohlížeč po úpravě přestane fungovat, prefixy jsou nejméně zajímavou částí změny.
Seznam prefixů není celá konfigurace
AllowedIPs dělá dvě věci najednou a jen jedna z nich se týká pokrytí. Pro samotný WireGuard je seznam kryptoklíčové směrování: rozhoduje, které cíle se šifrují směrem k protějšku a které zdrojové adresy smí tento protějšek použít. Pro wg-quick slouží stejný seznam i jako specifikace tras a trasa, kterou vytvoří, závisí na tom, které větvi se seznam náhodou shodne. Identické pokrytí u dvou různých tvarů seznamu tedy nic neříká o identickém stavu hostitele.
Výchozí konfigurace vám toto rozhodnutí bere z rukou, protože Table je ve výchozím stavu automatické a nástroj sám vybírá, kam trasy dopadnou. Jiný správce sítě, obal distribuce nebo vlastní hodnota Table výsledek znovu mění, a proto rada napsaná pro jednoho hostitele může na dalším vypadat špatně.
Co výchozí větev přidává nad rámec trasy
Záznam /0 pošle wg-quick do cesty výchozí trasy: samostatná směrovací tabulka přijme výchozí trasu, jedno pravidlo zásad tam posílá neoznačený provoz, druhé pravidlo udržuje konkrétnější trasy hlavní tabulky jako autoritativní a rozhraní dostane značku firewallu na svůj vlastní socket. Touto značkou je strážce smyčky. Šifrované datagramy nesoucí provoz tunelu odcházejí s nastavenou značkou, takže pravidlo, které vše ostatní posílá do tunelu, nespolkne vlastní transportní pakety tunelu.
Dvojice záznamů /1 místo toho jde běžnou cestou trasy. Do nakonfigurované tabulky dopadnou dvě trasy a žádný z okolních mechanismů se neobjeví, ne proto, že by byl zbytečný, ale proto, že touto kódovou cestou se nikdy nešlo.
Kde se obě uspořádání rozcházejí
Rozchod se nejprve projeví jako rekurze. Když jsou poloviční trasy v hlavní tabulce, vlastní transportní adresa protějšku spadá do prefixu tunelu, takže paket, který má tunel nést, odpovídá trase mířící dovnitř tunelu. Něco ho musí vyjmout: trasa hostitele pro aktuální koncový bod, ručně aplikovaná značka nebo pravidlo specifické pro rozhraní. Trasa hostitele funguje, dokud se adresa koncového bodu nezmění, což se děje u koncových bodů založených na DNS, roamingových klientů a konfigurací s více protějšky.
Za druhé, vše, co uvažuje o značkách, mění chování. Transparentní proxy, která přesměrovává spojení lokálně, vytváří nové sockety, jejichž značky a zdroje se liší od původního toku klienta, a pravidla zásad generovaná výchozí větví byla součástí toho, co tyto toky roztřídilo. Čtení vlastního odchozího spojení proxy je jiné cvičení než testování, zda je původní cíl dosažitelný.
Přečtěte si pravidla a značky před úpravou
Zachyťte aktuální stav, dokud je tunel zdravý, pak znovu po změně, a porovnejte oba výpisy místo uvažování z konfiguračního souboru. Zahrňte pravidla zásad, každou tabulku, značku rozhraní 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
Pokud první řádek výstupu ztratil pravidlo pro neoznačený provoz a vyhrazená tabulka je prázdná, výchozí větev neběží a žádná aritmetika prefixů její účinky neobnoví. Značka nula na rozhraní, které dříve nějakou neslo, je stejný signál, viditelný v jediné hodnotě.
Před nasazením si vyzkoušejte ztrátu tunelu
Pokud je uspořádání s polovičními trasami záměrnou volbou, musí chybějící části dodat výslovně: cestu koncového bodu, která přežije změny adresy, zamýšlené chování při výpadku tunelu a odpovídající ošetření pro IPv6. Zapište je jako požadavky, místo abyste je objevovali během výpadku. Potom si výpadek vyzkoušejte, protože plný tunel, který tiše přepadne na fyzický uplink, je horší než ten, který přestane fungovat.
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
Vyhledání trasy by mělo vyřešit koncový bod z fyzického rozhraní bez průchodu tunelem a shození rozhraní by mělo ponechat hostitele ve stavu, který design sliboval. Proxy, která po výměně funguje, dokazuje, že vygenerovaný stav hostitele měl význam; nedokazuje, že prevence smyček a chování ve vypnutém stavu úpravu přežily.