Blackhole-roete teenoor VPN-kill switch: wat elkeen doen
’n Blackhole-roete gooi passende verkeer weg en dwing ’n geslote-faal-pad af. Vergelyk die omvang en blindekolle daarvan met ’n pakketfilter-kill switch.
’n Pakket verlaat ’n skootrekenaar, bereik nooit die VPN-gateway nie, en geen vuurmuurteller beweeg nie. Die roettabel het reeds die pakket se lot beslis: ’n blackhole-inskrywing het dit gepas en die kernel het dit weggegooi voordat enige koppelvlak dit gesien het. Daardie gedrag is nuttig wanneer ’n bestemming gesluit moet faal, maar dit is ’n roeteringsaksie met ’n smal omvang. Om dit as ’n volledige kill switch te behandel, is waar ontwerpe verkeerd gaan.
Wat die wegdoen-aksie werklik tref
’n Roetesoektog kies ’n tabel, dan die langste passende voorvoegsel daarin. ’n Blackhole-roete is ’n normale inskrywing met wegdoen as aksie, so dit raak net pakkette wat daardie inskrywing sou kies nadat die hele besluit geneem is. Verander die tabel met ’n beleidsreël, of voeg ’n meer spesifieke voorvoegsel by, en die wegdoening geld nie meer nie.
Daarom is die omvang van ’n blackhole presies en maklik om te beskryf: dit dek die voorvoegsel, in die tabel, vir daardie adresfamilie. Dit dek nie ’n bestemming waarvoor ’n ander tabel sou wen nie, en dit dek nie IPv6 net omdat die IPv4-voorvoegsel weggegooi word nie.
ip route get wys die besluit voordat jy iets ontplooi, insluitend die tabel en die roetesoort. Om daardie uitset te lees is vinniger as om uit ’n mislukte versoek af te lei watter reël of voorvoegsel ingewerk het.
Blackhole is nie dieselfde as unreachable of prohibit nie
Linux bied drie wegdoen-agtige roetesoorte, en hulle verskil in wat die sender waarneem. ’n Blackhole laat die pakket val sonder ’n antwoord, so die kliënt sien ’n tydverloop. ’n Unreachable-roete stuur ’n ICMP unreachable-boodskap terug, so die verbinding misluk vinnig met ’n gasheer- of netwerkfout. ’n Prohibit-roete gee ’n administratiewe verbodsfout terug, wat nader aan ’n doelbewuste beleidsweiering is.
Kies die gedrag wat jy wil hê die toepassing moet sien. ’n Stille val is gepas wanneer jy nie die beleid wil openbaar nie, en ’n onmiddellike fout is beter wanneer gebruikers moet verstaan waarom ’n bestemming onbeskikbaar is. Om die soorte oor ’n netwerk te meng, lewer ondersteuningskaartjies op wat dieselfde beleid as drie verskillende foute beskryf.
Moenie aanvaar dat elke wegdoen-inskrywing uitruilbaar is wanneer jy ’n verbinding diagnoseer nie. Die foutteks, die tydsberekening en die pakketopname verskil, en die roetesoort in die tabel sê vir jou na watter een jy kyk. Die ip-route-handleiding lys die soorte en hul foutgedrag.
Hoe dit met ’n kill switch vergelyk
’n Kill switch is pakketfiltering: ’n vuurmuurreël wat uitgaande verkeer laat val wat buite die tonnel sou verlaat. ’n Blackhole-roete is ’n aanstuur-besluit wat vroeër in die stapel geneem word. Albei kan verkeer stop, maar hulle sien verskillende dinge en mis verskillende gevalle.
| 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 is waar die vergelyking saak maak. ’n Vuurmuur kan eienaar, poort of koppelvlak pas en ’n toepassing blokkeer terwyl die eindpunt bereikbaar bly; ’n roete kan dit nie. Omgekeerd kan ’n roete ’n hele voorvoegsel in ’n wegdoening stuur sonder dat enige pakketfilter gelaai is, wat nuttig is op ’n minimale stelsel.
WireGuard se AllowedIPs is kriptosleutelroetering, nie ’n vuurmuur nie. Dit besluit watter bestemmingsvoorvoegsels in die koppelvlak aanvaar word, en ’n profiel wat net die tonnel-subnet lys, laat ander bestemmings bloot aan die gewone verstekroete oor. Dit is waarom voltonnelprofiele 0.0.0.0/0 gebruik en waarom wg-quick ook vuurmuurreëls installeer wanneer dit kan.
Hou die tonnel-eindpunt buite die wegdoening
Die eindpunt se buitenste adres moet deur die fisiese koppelvlak bereikbaar bly. ’n Wegdoening wat daardie adres ook vasvang, verhoed dat die handdruk uitgaan, en die tonnel kom nooit op nie, wat soos ’n VPN-fout lyk eerder as ’n roeteringsbeleid. Kontroleer die roete na die eindpunt voor en ná die verandering.
Bestuurstoegang hoort in dieselfde oorsig. As die enigste pad na die router of die kliënt die tonnel is, kan ’n te breë wegdoening jou uitsluit uit die masjien wat jou sou laat om dit te verwyder. Hou ’n gedokumenteerde buiteband-roete, ’n konsole of ’n tydbeperkte terugrol byderhand.
IPv6 het sy eie inskrywing en sy eie oorsig nodig. ’n Ontwerp wat IPv4 in ’n blackhole stuur terwyl IPv6 op die verstekroete gelaat word, lek presies die verkeer wat die beleid moes stop, en die fout is onsigbaar in ’n toets wat net IPv4 dek.
Voer dit gefaseerd in met ’n tydhouer en ’n terugrol
Pas die roete toe met ’n kort outomatiese verwydering sodat ’n fout nie oor ’n herlaai heen kan voortduur nie. Die opdragte hieronder gebruik ’n dokumentasie-reeks; vervang dit met die voorvoegsel wat jou ontwerp werklik wegdoen:
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/8Die tweede opdrag behoort die blackhole-roete en die tabel waar dit vandaan kom, te rapporteer. Die derde skeduleer verwydering oor een minuut, wat genoeg tyd is om die beleid te bevestig en kort genoeg om van ’n fout op ’n afgeleë gasheer te herstel. Sodra die gedrag bevestig is, maak die inskrywing permanent deur dieselfde konfigurasiebestuur wat die ander roetes besit.
Sluit die verandering af deur die voorvoegsel, die tabel, die adresfamilie en die terugrolmetode te dokumenteer. ’n Wegdoening is ’n doelbewuste uitsondering in die roeteringsontwerp, en die volgende ingenieur moet weet watter verkeer dit moes stop voordat hy besluit of dit nog hoort.