Blackhole-rute mot VPN-kill-switch: hva hver av dem gjør
En blackhole-rute forkaster samsvarende trafikk og tvinger frem en lukket vei ved svikt. Sammenlign rekkevidden og blindsonene med en kill-switch basert på pakkefiltrering.
En pakke forlater en bærbar PC, når aldri VPN-gatewayen, og ingen brannmur-teller beveger seg. Rutetabellen har allerede avgjort pakkens skjebne: en blackhole-oppføring samsvarte med den, og kjernen forkastet den før noen grensesnitt så den. Den oppførselen er nyttig når en destinasjon skal feile lukket, men det er en rutehandling med snevert omfang. Å behandle den som en fullverdig kill-switch er der design går galt.
Hva forkastelseshandlingen egentlig treffer
Et ruteoppslag velger en tabell, deretter det lengste samsvarende prefikset i den. En blackhole-rute er en vanlig oppføring der handlingen er forkast, så den påvirker bare pakker som ville ha valgt den oppføringen etter hele beslutningen. Endre tabellen med en policyregel, eller legg til et mer spesifikt prefiks, og forkastelsen gjelder ikke lenger.
Derfor er omfanget til en blackhole presist og lett å beskrive: det dekker prefikset, i tabellen, for den adressefamilien. Det dekker ikke en destinasjon som en annen tabell ville vinne, og det dekker ikke IPv6 bare fordi IPv4-prefikset forkastes.
ip route get viser beslutningen før du ruller ut noe, inkludert tabellen og rutetypen. Å lese den utskriften er raskere enn å slutte fra en mislykket forespørsel hvilken regel eller hvilket prefiks som virket.
Blackhole er ikke det samme som unreachable eller prohibit
Linux tilbyr tre forkastelseslignende rutetyper, og de skiller seg i hva avsenderen observerer. En blackhole slipper pakken uten svar, så klienten ser en tidsavbrudd. En unreachable-rute returnerer en ICMP unreachable-melding, så forbindelsen feiler raskt med en verts- eller nettverksfeil. En prohibit-rute returnerer en administrativ sperrefeil, som er nærmere en bevisst policyavvisning.
Velg oppførselen du vil at applikasjonen skal se. En stille forkastelse passer når du ikke vil avsløre policyen, og en umiddelbar feil er bedre når brukerne må forstå hvorfor en destinasjon er utilgjengelig. Å blande typene i et nettverk gir støttebilletter som beskriver samme policy som tre ulike feil.
Ikke anta at hver forkastelsoppføring er utskiftbar når du diagnostiserer en forbindelse. Feilteksten, tidspunktet og pakkefangsten er forskjellige, og rutetypen i tabellen forteller deg hvilken du ser på. ip-route-håndboken lister typene og deres feiloppførsel.
Hvordan den sammenlignes med en kill-switch
En kill-switch er pakkefiltrering: en brannmurregel som forkaster utgående trafikk som ville forlate utenfor tunnelen. En blackhole-rute er en videresendingsbeslutning som tas tidligere i stakken. Begge kan stoppe trafikk, men de ser forskjellige ting og bommer på forskjellige tilfeller.
| Mechanism | What it blocks | What it misses | How failure looks |
|---|---|---|---|
| Blackhole route | Destinations matching the prefix and table | Other tables, other address families, traffic with a different route | Silent timeout |
| Firewall kill switch | Egress not bound to the tunnel interface | Rules that are too broad can break the endpoint or DHCP | Dropped packets with counters |
| WireGuard AllowedIPs | Destinations not routed into the interface | Traffic that never enters the interface at all | No tunnel route, direct egress |
Dekning er der sammenligningen betyr noe. En brannmur kan matche eier, port eller grensesnitt og blokkere en applikasjon mens endepunktet forblir nåbart; en rute kan ikke. Omvendt kan en rute sende et helt prefiks i forkastelse uten at noe pakkefilter lastes, noe som er nyttig på et minimalt system.
WireGuards AllowedIPs er kryptonøkkelrutin, ikke en brannmur. Den avgjør hvilke destinasjonsprefikser som godtas i grensesnittet, og en profil som bare lister tunnelens subnett overlater andre destinasjoner til den vanlige standardruten. Derfor bruker full-tunnel-profiler 0.0.0.0/0, og derfor installerer wg-quick også brannmurregler når den kan.
Hold tunnelens endepunkt utenfor forkastelsen
Endepunktets ytre adresse må forbli nåbar gjennom det fysiske grensesnittet. En forkastelse som også fanger den adressen hindrer håndtrykket i å komme ut, og tunnelen kommer aldri opp, noe som ser ut som en VPN-feil snarere enn en rutepolicy. Kontroller ruten til endepunktet før og etter endringen.
Administrasjonstilgang hører hjemme i samme gjennomgang. Hvis den eneste veien til ruteren eller klienten er tunnelen, kan en for bred forkastelse låse deg ute fra maskinen som ville la deg fjerne den. Hold en dokumentert out-of-band-rute, en konsoll eller en tidsbestemt tilbakerulling.
IPv6 trenger sin egen oppføring og sin egen gjennomgang. Et design som forkaster IPv4 i en blackhole mens IPv6 blir liggende på standardruten, lekker nettopp den trafikken policyen skulle stoppe, og feilen er usynlig i en test med bare IPv4.
Innfør det med en timer og en tilbakerulling
Bruk ruten med en kort automatisk fjerning slik at en feil ikke overlever en omstart. Kommandoene nedenfor bruker et dokumentasjonsområde; erstatt det med prefikset designet ditt faktisk forkaster:
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/8Den andre kommandoen skal rapportere blackhole-ruten og tabellen den kom fra. Den tredje planlegger fjerning om ett minutt, som er nok tid til å bekrefte policyen og kort nok til å komme seg etter en feil på en ekstern vert. Når oppførselen er bekreftet, gjør oppføringen varig gjennom den samme konfigurasjonsstyringen som eier de andre rutene.
Lukk endringen ved å registrere prefikset, tabellen, adressefamilien og tilbakerullingsmetoden. En forkastelse er et bevisst unntak i rutedesignet, og den neste ingeniøren må vite hvilken trafikk den skulle stoppe før hen avgjør om den fortsatt hører hjemme der.