Een pakket verlaat een laptop, bereikt nooit de VPN-gateway, en geen enkele firewalleller beweegt. De routetabel heeft het lot van het pakket al bepaald: een blackhole-vermelding kwam ermee overeen en de kernel gooide het weg voordat een interface het zag. Dat gedrag is nuttig wanneer een bestemming gesloten moet falen, maar het is een routingactie met een smalle reikwijdte. Het als een volledige killswitch behandelen is waar ontwerpen misgaan.

Wat de weggooiactie werkelijk raakt

Een routeopzoeking kiest een tabel en daarin het langste overeenkomende prefix. Een blackhole-route is een normale vermelding waarvan de actie weggooien is, dus het beïnvloedt alleen pakketten die die vermelding na de hele beslissing zouden hebben gekozen. Wijzig de tabel met een policyregel, of voeg een specifieker prefix toe, en het weggooien geldt niet meer.

Daarom is de reikwijdte van een blackhole precies en makkelijk te benoemen: het dekt het prefix, in de tabel, voor die adresfamilie. Het dekt geen bestemming die een andere tabel zou winnen, en het dekt IPv6 niet alleen omdat het IPv4-prefix wordt weggegooid.

ip route get toont de beslissing voordat je iets uitrolt, inclusief de tabel en het routetype. Die uitvoer lezen is sneller dan uit een mislukte aanvraag afleiden welke regel of welk prefix werkte.

Blackhole is niet hetzelfde als unreachable of prohibit

Linux biedt drie weggooi-achtige routetypen, en ze verschillen in wat de afzender waarneemt. Een blackhole laat het pakket zonder antwoord vallen, dus de client ziet een time-out. Een unreachable-route retourneert een ICMP unreachable-bericht, dus de verbinding faalt snel met een host- of netwerkfout. Een prohibit-route retourneert een administratieve blokkadefout, wat dichter bij een bewuste policyweigering ligt.

Kies het gedrag dat je de toepassing wilt laten zien. Stil weggooien is passend wanneer je het beleid niet wilt onthullen, en een onmiddellijke fout is beter wanneer gebruikers moeten begrijpen waarom een bestemming niet beschikbaar is. Het mixen van de typen in een netwerk levert supporttickets op die hetzelfde beleid als drie verschillende storingen beschrijven.

Ga er niet van uit dat elke weggooivermelding uitwisselbaar is wanneer je een verbinding diagnosticeert. De fouttekst, het tijdstip en de packetcapture verschillen, en het routetype in de tabel vertelt je welke je bekijkt. De ip-route-handleiding somt de typen en hun foutgedrag op.

Hoe het zich verhoudt tot een killswitch

Een killswitch is packetfiltering: een firewallregel die uitgaand verkeer weggooit dat buiten de tunnel zou vertrekken. Een blackhole-route is een doorstuurdecision die eerder in de stack wordt genomen. Beide kunnen verkeer stoppen, maar ze zien verschillende dingen en missen verschillende gevallen.

MechanismWhat it blocksWhat it missesHow failure looks
Blackhole routeDestinations matching the prefix and tableOther tables, other address families, traffic with a different routeSilent timeout
Firewall kill switchEgress not bound to the tunnel interfaceRules that are too broad can break the endpoint or DHCPDropped packets with counters
WireGuard AllowedIPsDestinations not routed into the interfaceTraffic that never enters the interface at allNo tunnel route, direct egress

Dekking is waar de vergelijking telt. Een firewall kan eigenaar, poort of interface matchen en een toepassing blokkeren terwijl het eindpunt bereikbaar blijft; een route kan dat niet. Omgekeerd kan een route een heel prefix naar het weggooien sturen zonder dat er een packetfilter is geladen, wat nuttig is op een minimaal systeem.

AllowedIPs van WireGuard is cryptosleutel-routing, geen firewall. Het bepaalt welke bestemmingsprefixen in de interface worden geaccepteerd, en een profiel dat alleen het tunnelsubnet vermeldt, laat andere bestemmingen gewoon aan de normale standaardroute. Daarom gebruiken full-tunnelprofielen 0.0.0.0/0 en daarom installeert wg-quick ook firewallregels wanneer het kan.

Houd het tunneleindpunt buiten het weggooien

Het buitenadres van het eindpunt moet bereikbaar blijven via de fysieke interface. Een weggooi die dat adres ook vangt, verhindert dat de handshake naar buiten gaat, en de tunnel komt nooit op, wat op een VPN-storing lijkt in plaats van een routingbeleid. Controleer de route naar het eindpunt voor en na de wijziging.

Beheerstoegang hoort in dezelfde beoordeling. Als de enige weg naar de router of de client de tunnel is, kan een te brede weggooi je buitensluiten van de machine die je het zou laten verwijderen. Houd een gedocumenteerde out-of-band-route, een console of een getimede terugdraaiing aan.

IPv6 heeft een eigen vermelding en een eigen beoordeling nodig. Een ontwerp dat IPv4 in een blackhole gooit en IPv6 op de standaardroute laat, lekt precies het verkeer dat het beleid moest stoppen, en de fout is onzichtbaar in een test met alleen IPv4.

Voer het gefaseerd in met een timer en een terugdraaiing

Pas de route toe met een korte automatische verwijdering zodat een fout een herstart niet overleeft. De onderstaande opdrachten gebruiken een documentatiebereik; vervang het door het prefix dat jouw ontwerp werkelijk weggooit:

sudo ip route replace blackhole 10.0.0.0/8
ip route get 10.1.2.3
sudo systemd-run --on-active=60 /sbin/ip route del blackhole 10.0.0.0/8

De tweede opdracht zou de blackhole-route en de tabel waaruit die kwam moeten melden. De derde plant verwijdering over een minuut, wat genoeg tijd is om het beleid te bevestigen en kort genoeg om van een fout op een externe host te herstellen. Zodra het gedrag is bevestigd, maak je de vermelding permanent via hetzelfde configuratiebeheer dat de andere routes bezit.

Sluit de wijziging af door het prefix, de tabel, de adresfamilie en de terugdraaimethode vast te leggen. Een weggooi is een bewuste uitzondering in het routingontwerp, en de volgende ingenieur moet weten welk verkeer het moest stoppen voordat hij beslist of het er nog hoort.

Gerelateerde artikelen