To /1-præfikser dækker præcis de samme IPv4-adresser som et enkelt /0, og denne lighed gælder kun inde i peerens liste over tilladte præfikser. Den holder op med at gælde i det øjeblik, opsætningsværktøjet beslutter, hvordan der skal rutes, fordi Linux wg-quick behandler et standardpræfiks som et særligt tilfælde og ikke som aritmetik. Den særlige gren installerer en dedikeret tabel, to politikregler, et socketmærke og indstillinger for omvendt sti, som et par halve ruter aldrig får. Når en proxy eller browser derfor holder op med at virke efter ændringen, er præfikserne den mindst interessante del af ændringen.

Præfikslisten er ikke hele konfigurationen

AllowedIPs udfører to opgaver på én gang, og kun den ene handler om dækning. For WireGuard selv er listen kryptonøgle-rutning: den afgør, hvilke destinationer der krypteres mod en peer, og hvilke kildeadresser den peer må bruge. For wg-quick fungerer den samme liste også som en rutningsspecifikation, og den rute, den frembringer, afhænger af, hvilken gren listen tilfældigvis matcher. Identisk dækning på tværs af to forskellige listefacon siger derfor intet om identisk værtsstatus.

Standardkonfigurationen fjerner den beslutning fra dine hænder, fordi Table som standard er automatisk, og værktøjet vælger, hvor ruterne lander. En anden netværksadministrator, en distributionsindpakning eller en tilpasset Table-værdi ændrer resultatet igen, og derfor kan råd skrevet til én vært se forkerte ud på den næste.

Hvad standardgrenen tilføjer ud over en rute

En /0-post sender wg-quick ind i sin standardrutesti: en separat rutningstabel modtager standardruten, én politikregel sender umarkeret trafik derhen, en anden regel holder mere specifikke ruter i hovedtabellen autoritative, og grænsefladen får et firewallmærke på sin egen socket. Det mærke er loop-vagten. De krypterede datagrammer, der bærer tunnelens trafik, forlader med mærket sat, så reglen, der sender alt andet ind i tunnelen, ikke sluger tunnelens egne transportpakker.

Et par /1-poster tager i stedet den almindelige rutesti. To ruter lander i den konfigurerede tabel, og intet af det omkringliggende maskineri vises, ikke fordi det er unødvendigt, men fordi den kodevej aldrig blev betrådt.

Hvor de to arrangementer forgrener sig

Forgreningen viser sig først som rekursion. Med de halve ruter i hovedtabellen falder peerens egen transportadresse inden for et tunnelpræfiks, så pakken, der skulle bære tunnelen, matcher en rute, der peger ind i tunnelen. Noget skal fritage den: en værtsrute til det aktuelle endepunkt, et mærke sat i hånden eller en grænsefladespecifik regel. En værtsrute virker, indtil endepunktets adresse ændres, hvilket sker med DNS-baserede endepunkter, roamingklienter og konfigurationer med flere peers.

For det andet ændrer alt, der ræsonnerer om mærker, adfærd. En transparent proxy, der omdirigerer forbindelser lokalt, opretter nye sockets, hvis mærker og kilder afviger fra klientens oprindelige flow, og de politikregler, standardgrenen genererer, var en del af det, der sorterede disse flows. At læse proxyens egen udgående forbindelse er en anden øvelse end at teste, om den oprindelige destination kan nås.

Læs reglerne og mærkerne, før du redigerer

Optag den aktuelle tilstand, mens tunnelen er sund, og igen efter ændringen, og sammenlign de to dumps i stedet for at ræsonnere ud fra konfigurationsfilen. Medtag politikreglerne, hver tabel, grænsefladens mærke og de registrerede endepunkter.

ip rule show
ip -4 route show table all | grep -E 'default|wg1'
wg show wg1 fwmark
wg show wg1 endpoints

Hvis den første outputlinje har mistet reglen for umarkeret trafik, og den dedikerede tabel er tom, kører standardgrenen ikke, og ingen mængde præfiksaritmetik genskaber dens virkninger. Et mærke på nul på en grænseflade, der tidligere havde et, er samme signal, synligt i en enkelt værdi.

Øv tab af tunnelen, før du udruller

Hvis halvruteopsætningen er det bevidste valg, skal den udtrykkeligt levere de manglende dele: en endepunktssti, der overlever adresseændringer, den tilsigtede adfærd, når tunnelen falder, og den tilsvarende håndtering for IPv6. Skriv dem ned som krav i stedet for at opdage dem under et udfald. Øv derefter fejlen, for en fuld tunnel, der stille falder tilbage til den fysiske uplink, er værre end en, der holder op med at virke.

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

Ruteopslaget bør opløse endepunktet ud af den fysiske grænseflade uden at passere tunnelen, og at tage grænsefladen ned bør efterlade værten i den tilstand, designet lovede. En proxy, der virker efter udskiftningen, beviser, at den genererede værtsstatus betød noget; det beviser ikke, at loopforebyggelse og adfærd i nedlukket tilstand overlevede ændringen.

Relaterede artikler