Mená sa prekladajú na adresy a tieto adresy môžu skončiť v množine firewallu, ktorá neskôr ovplyvňuje smerovanie, čo umožňuje smerovanie podľa mena bez proxy. Háčik je v tom, že štyri komponenty musia správne odovzdať: resolver, množina, klasifikátor, ktorý označí nový tok, a peer, ktorý ho nesie. Každé odovzdanie zlyháva inak a každé si drží svoj vlastný čas.

Berte návrh ako reťaz, nie ako konfiguráciu. Otázka v každom kroku je, ktorý komponent vlastní rozhodnutie a čo sa stane, keď chýba jeho vstup.

Čo odpoveď DNS dokáže a čo nie

dnsmasq dokáže kopírovať adresy z odpovedí do množiny nftables, čo je napájanie, nie rozhodnutie o smerovaní. Táto voľba, opísaná v manuáli dnsmasq, určuje rodinu, tabuľku a množinu a jej úvodný 4# vyberá len záznamy A, takže ciele v6 potrebujú vlastné usporiadanie. Množina už musí existovať, pretože resolver pridáva prvky do niečoho, čo vytvoril vlastník firewallu. Nič v tomto kroku nevyberá rozhranie, tabuľku ani peer.

Klient tiež musí pre meno použiť tento resolver. Aplikácia s vlastným šifrovaným DNS alebo odpoveď z vyrovnávacej pamäte z čias pred politikou sa pripojí bez vytvorenia akéhokoľvek záznamu v množine.

Množina je vstup, nie trasa

Prvok v množine je podmienka zhody. Niečo sa naň musí pozrieť, rozhodnúť, že tento paket začína nový tok, a uplatniť politiku, ktorá tok pošle tunelom. Na Linuxe to zvyčajne znamená výstupnú cestu schopnú smerovania, ktorá vie nastaviť značku, pravidlo posielajúce označené pakety do vyhradenej tabuľky a trasu v tejto tabuľke smerom k zariadeniu WireGuard. Samotné členstvo nič z toho nenainštaluje.

nft add set inet vpn_select office_v4 { type ipv4_addr\; }
ip rule add fwmark 0x40 table 200
ip route add default dev wg0 table 200
wg show wg0 allowed-ips

Peer uplatňuje druhú kontrolu pokrytia, na ktorú sa zabúda. WireGuard šifruje paket len pre peer, ktorého povolené adresy zahŕňajú cieľ, takže trasa politikou do rozhrania nestačí, keď zoznam peeru tento prefix vylučuje. Držte zoznam pod kontrolou vlastníka smerovania, namiesto spoliehania sa na to, aké trasy správca práve vytvorí.

Značky, tabuľky a pokrytie peeru

Značky sú zdieľaný menný priestor, takže hodnota aj maska musia byť zladené so všetkým ostatným, čo ich používa. Pravidlo posielajúce označenú prevádzku do vyhradenej tabuľky potrebuje definovaný výsledok, keď táto tabuľka nemá zodpovedajúcu trasu, pretože nezodpovedané hľadanie môže pokračovať ďalším pravidlom a poslať paket von fyzickým rozhraním. Predvolená trasa typu blackhole vo vyhradenej tabuľke mení ten tichý únik na viditeľné zahodenie. Čo návrh stále nevie, je zavrieť sa pri zlyhaní pre cieľ, ktorý sa nikdy nedostal do množiny.

Vlastné vonkajšie pakety tunela musia uniknúť klasifikátoru. Nástroje WireGuard poskytujú značku socketu práve na tento účel a jej použitie bráni tomu, aby sa zapuzdrenie smerovalo späť do rozhrania, ktoré buduje.

Testujte každú životnosť zvlášť

Tri úložiská starnú podľa troch plánov: vyrovnávacia pamäť resolvera, prvky množiny a sledované spojenie. Testujte ich v tomto poradí a sledujte, či sa každé pohne, keď má. Nižšie uvedené príkazy čítajú resolver, množinu, tabuľku spojení a pravidlá politiky bez toho, aby čokoľvek menili.

dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show

Čerstvé hľadanie, ktoré pridá prvok, dokazuje, že napájanie funguje, kým zastaraný prvok, ktorý prežije svoju odpoveď, je nesúlad životností, ktorý stojí za zapísanie. Nové spojenie v tabuľke spojení s očakávanou značkou ukazuje, že klasifikátor bežal, a staré spojenie držiace pôvodnú značku je správne správanie, nie chyba. Výpis pravidiel odpovedá, či hľadanie politiky vôbec existuje, čo je iná otázka než či sa zhodovalo. Prečítajte štyri výstupy v tomto poradí a zlyhávajúce odovzdanie sa prezradí samo.

Keď je požiadavkou, aby určité meno vždy používalo jednu cestu, množina napájaná z DNS to nedokáže, pretože zdieľané adresy nesú aj iné mená. Proxy alebo mechanizmus na úrovni aplikácie je nástrojom pre takú záruku.

Súvisiace články