Ein Paket verlässt einen Laptop, erreicht nie das VPN-Gateway, und kein Firewall-Zähler bewegt sich. Die Routingtabelle hat das Schicksal des Pakets bereits entschieden: Ein Blackhole-Eintrag passte darauf, und der Kernel verwarf es, bevor irgendeine Schnittstelle es sah. Dieses Verhalten ist nützlich, wenn ein Ziel geschlossen scheitern soll, aber es ist eine Routing-Aktion mit engem Umfang. Sie als vollständigen Kill-Switch zu behandeln, ist der Punkt, an dem Entwürfe schiefgehen.

Was die Verwerfungsaktion tatsächlich trifft

Eine Routensuche wählt eine Tabelle und darin dann das längste passende Präfix. Eine Blackhole-Route ist ein normaler Eintrag, dessen Aktion Verwerfen ist, sie betrifft also nur Pakete, die diesen Eintrag nach der gesamten Entscheidung gewählt hätten. Ändern Sie die Tabelle mit einer Policy-Regel oder fügen Sie ein spezifischeres Präfix hinzu, und das Verwerfen gilt nicht mehr.

Deshalb ist der Umfang eines Blackholes exakt und leicht zu beschreiben: Er deckt das Präfix in der Tabelle für diese Adressfamilie ab. Er deckt kein Ziel ab, das eine andere Tabelle gewinnen würde, und er deckt IPv6 nicht ab, nur weil das IPv4-Präfix verworfen wird.

ip route get zeigt die Entscheidung, bevor Sie irgendetwas ausrollen, einschließlich der Tabelle und des Routentyps. Diese Ausgabe zu lesen ist schneller, als aus einer fehlgeschlagenen Anfrage zu schließen, welche Regel oder welches Präfix gegriffen hat.

Blackhole ist nicht dasselbe wie unreachable oder prohibit

Linux bietet drei verwerfungsähnliche Routentypen, und sie unterscheiden sich darin, was der Absender beobachtet. Ein Blackhole verwirft das Paket ohne Antwort, der Client sieht also eine Zeitüberschreitung. Eine unreachable-Route gibt eine ICMP-unreachable-Nachricht zurück, die Verbindung scheitert also schnell mit einem Host- oder Netzwerkfehler. Eine prohibit-Route gibt einen Fehler der administrativen Sperre zurück, was einer bewussten Verweigerung durch die Richtlinie näher kommt.

Wählen Sie das Verhalten, das die Anwendung sehen soll. Ein stilles Verwerfen ist angebracht, wenn Sie die Richtlinie nicht offenlegen wollen, und ein sofortiger Fehler ist besser, wenn Nutzer verstehen müssen, warum ein Ziel nicht erreichbar ist. Das Mischen der Typen in einem Netz erzeugt Support-Tickets, die dieselbe Richtlinie als drei verschiedene Störungen beschreiben.

Gehen Sie nicht davon aus, dass jeder Verwerfungseintrag austauschbar ist, wenn Sie eine Verbindung diagnostizieren. Fehlertext, Zeitpunkt und Paketmitschnitt unterscheiden sich, und der Routentyp in der Tabelle sagt Ihnen, welchen Sie gerade ansehen. Das ip-route-Handbuch listet die Typen und ihr Fehlerverhalten auf.

Wie sie sich mit einem Kill-Switch vergleicht

Ein Kill-Switch ist Paketfilterung: eine Firewall-Regel, die ausgehenden Verkehr verwirft, der außerhalb des Tunnels das Gerät verlassen würde. Eine Blackhole-Route ist eine Weiterleitungsentscheidung, die früher im Stack fällt. Beide können Verkehr stoppen, aber sie sehen unterschiedliche Dinge und verfehlen unterschiedliche Fälle.

MechanismWhat it blocksWhat it missesHow failure looks
Blackhole routeDestinations matching the prefix and tableOther tables, other address families, traffic with a different routeSilent timeout
Firewall kill switchEgress not bound to the tunnel interfaceRules that are too broad can break the endpoint or DHCPDropped packets with counters
WireGuard AllowedIPsDestinations not routed into the interfaceTraffic that never enters the interface at allNo tunnel route, direct egress

Die Abdeckung ist der Punkt, an dem der Vergleich zählt. Eine Firewall kann Eigentümer, Port oder Schnittstelle abgleichen und eine Anwendung blockieren, während der Endpunkt erreichbar bleibt; eine Route kann das nicht. Umgekehrt kann eine Route ein ganzes Präfix ins Verwerfen schicken, ohne dass irgendein Paketfilter geladen ist, was auf einem minimalen System nützlich ist.

WireGuards AllowedIPs ist Kryptoschlüssel-Routing, keine Firewall. Es entscheidet, welche Zielpräfixe in die Schnittstelle angenommen werden, und ein Profil, das nur das Tunnel-Subnetz auflistet, überlässt andere Ziele einfach der gewöhnlichen Standardroute. Deshalb verwenden Full-Tunnel-Profile 0.0.0.0/0, und deshalb installiert wg-quick auch Firewall-Regeln, wenn es kann.

Halten Sie den Tunnel-Endpunkt außerhalb der Verwerfung

Die äußere Adresse des Endpunkts muss über die physische Schnittstelle erreichbar bleiben. Eine Verwerfung, die diese Adresse ebenfalls erfasst, verhindert, dass der Handshake hinausgeht, und der Tunnel kommt nie hoch, was wie ein VPN-Fehler aussieht und nicht wie eine Routing-Richtlinie. Prüfen Sie die Route zum Endpunkt vor und nach der Änderung.

Der Verwaltungszugang gehört in dieselbe Prüfung. Ist der Tunnel der einzige Weg zum Router oder zum Client, kann eine zu breite Verwerfung Sie von der Maschine aussperren, die Ihnen das Entfernen ermöglichen würde. Halten Sie eine dokumentierte Out-of-Band-Route, eine Konsole oder ein zeitgesteuertes Zurückrollen bereit.

IPv6 braucht einen eigenen Eintrag und eine eigene Prüfung. Ein Entwurf, der IPv4 in ein Blackhole schickt und IPv6 auf der Standardroute lässt, leckt genau den Verkehr, den die Richtlinie stoppen sollte, und der Fehler bleibt in einem reinen IPv4-Test unsichtbar.

Führen Sie es mit einem Timer und einem Rollback ein

Wenden Sie die Route mit einer kurzen automatischen Entfernung an, damit ein Fehler einen Neustart nicht überlebt. Die folgenden Befehle verwenden einen Dokumentationsbereich; ersetzen Sie ihn durch das Präfix, das Ihr Entwurf tatsächlich verwirft:

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/8

Der zweite Befehl sollte die Blackhole-Route und die Tabelle melden, aus der sie stammt. Der dritte plant die Entfernung in einer Minute, was genug Zeit ist, die Richtlinie zu bestätigen, und kurz genug, um sich von einem Fehler auf einem entfernten Host zu erholen. Sobald das Verhalten bestätigt ist, machen Sie den Eintrag über dieselbe Konfigurationsverwaltung dauerhaft, der die anderen Routen gehören.

Schließen Sie die Änderung ab, indem Sie Präfix, Tabelle, Adressfamilie und Rollback-Methode festhalten. Eine Verwerfung ist eine bewusste Ausnahme im Routing-Entwurf, und der nächste Ingenieur muss wissen, welchen Verkehr sie stoppen sollte, bevor er entscheidet, ob sie noch dorthin gehört.

Ähnliche Artikel