Blackhole-rute mot VPN-kill-switch: kva kvar av dei gjer
Ei blackhole-rute kastar samsvarande trafikk og tvingar fram ein lukka veg ved svikt. Samanlikn rekkevidda og blindsonene med ein kill-switch basert på pakkefiltrering.
Ei pakke forlèt ein berbar PC, når aldri VPN-gatewayen, og ingen brannmur-teljar flyttar seg. Rutetabellen har alt avgjort lagnaden til pakka: ein blackhole-oppføring samsvara med ho, og kjernen kasta ho før noko grensesnitt såg ho. Den åtferda er nyttig når ein destinasjon skal feile lukka, men det er ei rutehandling med smalt omfang. Å handsame ho som ein fullverdig kill-switch er der design går gale.
Kva kastehandlinga eigentleg treff
Eit ruteoppslag vel ein tabell, deretter det lengste samsvarande prefikset i han. Ei blackhole-rute er ein vanleg oppføring der handlinga er kast, så ho påverkar berre pakker som ville ha valt den oppføringa etter heile avgjerda. Endre tabellen med ein policyregel, eller legg til eit meir spesifikt prefiks, og kastinga gjeld ikkje lenger.
Difor er omfanget til ein blackhole presist og lett å skildre: det dekkjer prefikset, i tabellen, for den adressefamilien. Det dekkjer ikkje ein destinasjon som ein annan tabell ville vinne, og det dekkjer ikkje IPv6 berre fordi IPv4-prefikset blir kasta.
ip route get viser avgjerda før du rullar ut noko, inkludert tabellen og rutetypen. Å lese den utskrifta er raskare enn å slutte frå ein mislukka førespurnad kva regel eller prefiks som verka.
Blackhole er ikkje det same som unreachable eller prohibit
Linux tilbyr tre kasteliknande rutetypar, og dei skil seg i kva avsendaren observerer. Ein blackhole slepp pakka utan svar, så klienten ser ein tidsavbrot. Ei unreachable-rute returnerer ei ICMP unreachable-melding, så sambandet feilar raskt med ein verts- eller nettverksfeil. Ei prohibit-rute returnerer ein administrativ sperrefeil, som er nærare ei medvite policyavvising.
Vel åtferda du vil at applikasjonen skal sjå. Ei stille kasting passar når du ikkje vil avsløre policyen, og ein umiddelbar feil er betre når brukarane må forstå kvifor ein destinasjon er utilgjengeleg. Å blande typane i eit nettverk gjev støttebillettar som skildrar same policy som tre ulike feil.
Ikkje gå ut frå at kvar kasteoppføring er utskiftbar når du diagnostiserer eit samband. Feilteksten, tidspunktet og pakkefangsten er ulike, og rutetypen i tabellen fortel deg kva du ser på. ip-route-handboka listar typane og feilåtferda deira.
Korleis ho samanliknar med ein kill-switch
Ein kill-switch er pakkefiltrering: ein brannmurregel som kastar utgåande trafikk som ville forlate utanfor tunnelen. Ei blackhole-rute er ei vidaresendingavgjerd som blir teken tidlegare i stakken. Begge kan stoppe trafikk, men dei ser ulike ting og bommar på ulike tilfelle.
| 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 |
Dekking er der samanlikninga betyr noko. Ein brannmur kan matche eigar, port eller grensesnitt og blokkere ein applikasjon medan endepunktet blir verande nåbart; ei rute kan ikkje. Omvendt kan ei rute sende eit heilt prefiks i kasting utan at noko pakkefilter blir lasta, noko som er nyttig på eit minimalt system.
WireGuards AllowedIPs er kryptonøkkelrutin, ikkje ein brannmur. Ho avgjer kva destinasjonsprefiks som blir godtekne i grensesnittet, og ein profil som berre listar subnettet til tunnelen overlèt andre destinasjonar til den vanlege standardruta. Difor brukar full-tunnel-profilane 0.0.0.0/0, og difor installerer wg-quick også brannmurreglar når det kan.
Hald endepunktet til tunnelen utanfor kastinga
Den ytre adressa til endepunktet må halde fram med å vere nåbar gjennom det fysiske grensesnittet. Ei kasting som også fangar den adressa hindrar handtrykket i å kome ut, og tunnelen kjem aldri opp, noko som ser ut som ein VPN-feil snarare enn ein rutepolicy. Kontroller ruta til endepunktet før og etter endringa.
Administrasjonstilgang høyrer heime i same gjennomgang. Viss den einaste vegen til rutaren eller klienten er tunnelen, kan ei for brei kasting låse deg ute frå maskina som ville la deg fjerne ho. Hald ei dokumentert out-of-band-rute, ein konsoll eller ei tidsbestemt tilbakerulling.
IPv6 treng si eiga oppføring og sin eigen gjennomgang. Eit design som kastar IPv4 i ein blackhole medan IPv6 blir liggande på standardruta, lekkjer nett den trafikken policyen skulle stoppe, og feilen er usynleg i ein test med berre IPv4.
Innfør det med ein timer og ei tilbakerulling
Bruk ruta med ei kort automatisk fjerning slik at ein feil ikkje overlever ein omstart. Kommandoane nedanfor brukar eit dokumentasjonsområde; byt det ut med prefikset designet ditt faktisk kastar:
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-ruta og tabellen ho kom frå. Den tredje planlegg fjerning om eitt minutt, som er nok tid til å stadfeste policyen og kort nok til å kome seg etter ein feil på ein ekstern vert. Når åtferda er stadfesta, gjer oppføringa varig gjennom den same konfigurasjonsstyringa som eig dei andre rutene.
Lukk endringa ved å registrere prefikset, tabellen, adressefamilien og tilbakerullingsmetoden. Ei kasting er eit medvite unntak i rutedesignet, og den neste ingeniøren må vite kva trafikk ho skulle stoppe før hen avgjer om ho framleis høyrer heime der.