Rotta blackhole contro kill switch VPN: cosa fa ciascuno
Una rotta blackhole scarta il traffico corrispondente e impone un percorso chiuso in caso di guasto. Confronta la sua portata e i suoi punti ciechi con un kill switch basato sul filtraggio dei pacchetti.
Un pacchetto lascia un portatile, non raggiunge mai il gateway VPN e nessun contatore del firewall si muove. La tabella di routing ha già deciso il destino del pacchetto: una voce blackhole vi corrispondeva e il kernel l'ha scartato prima che qualsiasi interfaccia lo vedesse. Quel comportamento è utile quando una destinazione deve fallire in modo chiuso, ma è un'azione di routing con una portata ristretta. Trattarlo come un kill switch completo è il punto in cui i progetti sbagliano.
Cosa intercetta davvero l'azione di scarto
Una ricerca di rotta sceglie una tabella, poi il prefisso corrispondente più lungo al suo interno. Una rotta blackhole è una voce normale la cui azione è scartare, quindi influisce solo sui pacchetti che avrebbero scelto quella voce dopo l'intera decisione. Cambia la tabella con una regola di policy, o aggiungi un prefisso più specifico, e lo scarto non si applica più.
Per questo la portata di un blackhole è precisa e facile da enunciare: copre il prefisso, nella tabella, per quella famiglia di indirizzi. Non copre una destinazione che vincerebbe un'altra tabella, e non copre IPv6 solo perché il prefisso IPv4 viene scartato.
ip route get mostra la decisione prima di distribuire qualsiasi cosa, inclusi la tabella e il tipo di rotta. Leggere quell'output è più rapido che dedurre da una richiesta fallita quale regola o prefisso abbia agito.
Blackhole non è lo stesso di unreachable o prohibit
Linux offre tre tipi di rotta simili allo scarto, e differiscono in ciò che osserva il mittente. Un blackhole scarta il pacchetto senza risposta, quindi il client vede un timeout. Una rotta unreachable restituisce un messaggio ICMP unreachable, quindi la connessione fallisce rapidamente con un errore di host o di rete. Una rotta prohibit restituisce un errore di proibizione amministrativa, più vicino a un rifiuto deliberato della policy.
Scegli il comportamento che vuoi mostrare all'applicazione. Uno scarto silenzioso è adatto quando non vuoi rivelare la policy, e un errore immediato è meglio quando gli utenti devono capire perché una destinazione non è disponibile. Mescolare i tipi su una rete produce ticket di supporto che descrivono la stessa policy come tre guasti diversi.
Non dare per scontato che ogni voce di scarto sia intercambiabile quando diagnostichi una connessione. Il testo dell'errore, i tempi e la cattura dei pacchetti differiscono, e il tipo di rotta nella tabella ti dice quale stai guardando. Il manuale di ip-route elenca i tipi e il loro comportamento in caso di errore.
Come si confronta con un kill switch
Un kill switch è filtraggio dei pacchetti: una regola del firewall che scarta il traffico in uscita che uscirebbe fuori dal tunnel. Una rotta blackhole è una decisione di inoltro presa prima nello stack. Entrambi possono fermare il traffico, ma vedono cose diverse e mancano casi diversi.
| 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 |
La copertura è dove il confronto conta. Un firewall può corrispondere a proprietario, porta o interfaccia e bloccare un'applicazione lasciando raggiungibile l'endpoint; una rotta non può. Al contrario, una rotta può mandare un intero prefisso nello scarto senza che sia caricato alcun filtro di pacchetti, cosa utile su un sistema minimale.
AllowedIPs di WireGuard è routing a chiave crittografica, non un firewall. Decide quali prefissi di destinazione sono accettati nell'interfaccia, e un profilo che elenca solo la sottorete del tunnel lascia semplicemente le altre destinazioni alla normale rotta predefinita. Per questo i profili a tunnel completo usano 0.0.0.0/0 e per questo wg-quick installa anche regole del firewall quando può.
Tieni l'endpoint del tunnel fuori dallo scarto
L'indirizzo esterno dell'endpoint deve restare raggiungibile tramite l'interfaccia fisica. Uno scarto che cattura anche quell'indirizzo impedisce all'handshake di uscire, e il tunnel non sale mai, cosa che sembra un guasto VPN invece di una policy di routing. Controlla la rotta verso l'endpoint prima e dopo la modifica.
L'accesso di gestione rientra nella stessa revisione. Se l'unico percorso verso il router o il client è il tunnel, uno scarto troppo ampio può chiuderti fuori dalla macchina che ti permetterebbe di rimuoverlo. Mantieni una rotta fuori banda documentata, una console o un rollback temporizzato.
IPv6 ha bisogno della propria voce e della propria revisione. Un progetto che scarta IPv4 in un blackhole lasciando IPv6 sulla rotta predefinita perde esattamente il traffico che la policy doveva fermare, e l'errore è invisibile in un test solo IPv4.
Introducilo con un timer e un rollback
Applica la rotta con una rimozione automatica breve, così un errore non sopravvive a un riavvio. I comandi seguenti usano un intervallo di documentazione; sostituiscilo con il prefisso che il tuo progetto scarta davvero:
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/8Il secondo comando dovrebbe riportare la rotta blackhole e la tabella da cui proviene. Il terzo programma la rimozione tra un minuto, che è tempo sufficiente per confermare la policy e abbastanza breve per riprendersi da un errore su un host remoto. Una volta confermato il comportamento, rendi la voce persistente tramite la stessa gestione della configurazione che possiede le altre rotte.
Chiudi la modifica registrando il prefisso, la tabella, la famiglia di indirizzi e il metodo di rollback. Uno scarto è un'eccezione deliberata nel progetto di routing, e l'ingegnere successivo deve sapere quale traffico doveva fermare prima di decidere se appartiene ancora lì.