Blackhole-itinero kontraŭ VPN-kill-switch: kion faras ĉiu el ili
Blackhole-itinero forĵetas kongruan trafikon kaj trudas vojon fermitan ĉe malsukceso. Komparu ĝian amplekson kaj blindajn punktojn kun kill-switch bazita sur paketa filtrado.
Pako forlasas tekkomputilon, neniam atingas la VPN-enirejon, kaj neniu fajroŝirma nombrilo moviĝas. La itinera tabelo jam decidis la sorton de la pako: blackhole-enskribo kongruis kun ĝi kaj la kerno forĵetis ĝin antaŭ ol ajna interfaco vidis ĝin. Tiu konduto utilas kiam celloko devas malsukcesi fermite, sed ĝi estas itinera ago kun mallarĝa amplekso. Trakti ĝin kiel plenan kill-switch estas la punkto, kie dezajnoj eraras.
Kion la forĵeta ago efektive kongruigas
Itinera serĉo elektas tabelon, poste la plej longan kongruan prefikson en ĝi. Blackhole-itinero estas ordinara enskribo kies ago estas forĵeti, do ĝi efikas nur al pakoj kiuj estus elektintaj tiun enskribon post la tuta decido. Ŝanĝu la tabelon per politika regulo aŭ aldonu pli specifan prefikson, kaj la forĵeto jam ne validas.
Tial la amplekso de blackhole estas preciza kaj facile esprimebla: ĝi kovras la prefikson, en la tabelo, por tiu adresa familio. Ĝi ne kovras cellokon kiun gajnus alia tabelo, kaj ĝi ne kovras IPv6 nur ĉar la IPv4-prefikso estas forĵetata.
ip route get montras la decidon antaŭ ol vi deplojos ion ajn, inkluzive la tabelon kaj la itinera tipo. Legi tiun eligon estas pli rapide ol dedukti el malsukcesa peto kiun regulon aŭ prefikson efikis.
Blackhole ne samas kiel unreachable aŭ prohibit
Linux proponas tri forĵet-similajn itinerojn, kaj ili diferencas laŭ tio, kion la sendinto observas. Blackhole faligas la pakon sen respondo, do la kliento vidas tempolimon. Unreachable-itinero redonas ICMP-unreachable-mesaĝon, do la konekto malsukcesas rapide kun gastiga aŭ reta eraro. Prohibit-itinero redonas eraron de administra malpermeso, kio pli proksimas al intenca rifuzo de politiko.
Elektu la konduton, kiun vi volas ke la aplikaĵo vidu. Silenta forĵeto taŭgas kiam vi ne volas malkaŝi la politikon, kaj tuja eraro pli bonas kiam uzantoj devas kompreni kial celloko ne disponeblas. Miksi la tipojn tra reto produktas subtenajn biletojn, kiuj priskribas la saman politikon kiel tri malsamajn paneojn.
Ne supozu ke ĉiu forĵeta enskribo estas anstataŭigebla kiam vi diagnozas konekton. La erarteksto, la tempo kaj la paketa kaptaĵo diferencas, kaj la itinera tipo en la tabelo diras al vi kiun vi rigardas. La manlibro de ip-route listigas la tipojn kaj ilian eraran konduton.
Kiel ĝi kompariĝas kun kill-switch
Kill-switch estas paketa filtrado: fajroŝirma regulo, kiu forĵetas elirantan trafikon kiu forlasus ekster la tunelo. Blackhole-itinero estas plusenda decido farita pli frue en la stako. Ambaŭ povas haltigi trafikon, sed ili vidas malsamajn aferojn kaj maltrafas malsamajn kazojn.
| 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 |
Kovrado estas kie la komparo gravas. Fajroŝirmo povas kongruigi posedanton, pordon aŭ interfacon kaj povas bloki aplikaĵon dum la finpunkto restas atingebla; itinero ne povas. Male, itinero povas sendi tutan prefikson en forĵeton sen ke ajna paketa filtro estas ŝargita, kio utilas sur minimuma sistemo.
AllowedIPs de WireGuard estas kriptoŝlosila itinerado, ne fajroŝirmo. Ĝi decidas kiujn celajn prefiksojn oni akceptas en la interfacon, kaj profilo kiu listigas nur la tunelan subreton simple lasas aliajn celojn al la ordinara defaŭlta itinero. Tial plen-tunelaj profiloj uzas 0.0.0.0/0 kaj tial wg-quick ankaŭ instalas fajroŝirmajn regulojn kiam ĝi povas.
Tenu la tunelan finpunkton ekster la forĵeto
La ekstera adreso de la finpunkto devas resti atingebla tra la fizika interfaco. Forĵeto kiu kaptas ankaŭ tiun adreson malhelpas la manpremon eliri, kaj la tunelo neniam leviĝas, kio aspektas kiel VPN-paneo anstataŭ itinera politiko. Kontrolu la itineron al la finpunkto antaŭ kaj post la ŝanĝo.
Administra aliro apartenas al la sama revizio. Se la sola vojo al la enkursigilo aŭ la kliento estas la tunelo, tro larĝa forĵeto povas ŝlosi vin ekster la maŝino kiu permesus al vi forigi ĝin. Tenu dokumentitan eksterbendan itineron, konzolon aŭ tempigitan malfaron.
IPv6 bezonas propran enskribon kaj propran revizion. Dezajno kiu forĵetas IPv4 en blackhole dum lasas IPv6 sur la defaŭlta itinero likas ĝuste la trafikon kiun la politiko celis haltigi, kaj la eraro estas nevidebla en testado nur por IPv4.
Enkonduku ĝin per tempigilo kaj malfaro
Apliku la itineron kun mallonga aŭtomata forigo por ke eraro ne daŭru post restartigo. La subaj komandoj uzas dokumentan gamon; anstataŭigu ĝin per la prefikso kiun via dezajno efektive forĵetas:
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/8La dua komando devus raporti la blackhole-itinero kaj la tabelon el kiu ĝi venis. La tria planas forigon post unu minuto, kio estas sufiĉe da tempo por konfirmi la politikon kaj sufiĉe mallonge por resaniĝi de eraro sur fora gastiganto. Post kiam la konduto estas konfirmita, faru la enskribon daŭra per la sama agordo-administrado kiu posedas la aliajn itinerojn.
Fermu la ŝanĝon registrante la prefikson, la tabelon, la adresan familion kaj la malfaran metodon. Forĵeto estas intenca escepto en la itinera dezajno, kaj la sekva inĝeniero devas scii kiun trafikon ĝi celis haltigi antaŭ ol decidi ĉu ĝi ankoraŭ apartenas.