Sie öffnen nach dem Verbinden die Routing-Tabelle und finden eine einzelne Adresse, die durch den Tunnel geroutet wird, während das umgebende Subnetz weiterhin zum lokalen Gateway geht. Dieser Eintrag ist eine Hostroute: eine Adresse, abgeglichen durch ein Präfix aus lauter Einsen. Er zählt, weil Routing-Entscheidungen das längste passende Präfix verwenden, sodass ein /32 ein /24 oder eine Standardroute überschreiben kann, ohne eines der beiden zu ändern. Ob das eine sorgfältige Ausnahme oder ein künftiger Ausfall ist, hängt davon ab, welche Adresse er benennt und wer ihn pflegt.

Eine Adresse, ein Eintrag in der Tabelle

Eine IPv4-Hostroute trägt ein /32-Präfix, eine IPv6-Hostroute /128, was bedeutet, dass der Eintrag genau eine Zieladresse treffen kann. Sonst bewegt sich nichts in der Tabelle: Das abdeckende Subnetz und die Standardroute bleiben, wo sie waren. Der enge Eintrag gewinnt für diese Adresse, weil sein Präfix länger ist, nicht weil er später hinzugefügt wurde.

Diese Eigenschaft macht eine Hostroute zu einer guten Ausnahme und einer schlechten Gewohnheit. Zwei /32-Einträge, die die Haustür eines Dienstes benennen, decken weder seine zweite Adresse noch seine IPv6-Adresse noch die Adresse ab, zu der er nächsten Monat umzieht. Eine Tabelle voller unerklärter Einzeladress-Einträge bedeutet meist, dass jemand weiter um eine Subnetz-Entscheidung herumgeflickt hat, statt sie zu treffen. Lesen Sie zuerst die Präfixlänge und fragen Sie dann, wovor der Eintrag schützen soll.

Den Eintrag vom Client nach außen lesen

Beginnen Sie an der Maschine mit dem Problem, denn dieselbe Adresse kann auf einem Laptop anders geroutet werden als auf dem Gateway davor. Fragen Sie den Kernel, welchen Pfad er für die genaue Adresse wählen würde, die die Anwendung nutzt, statt die Tabelle von oben zu lesen. Die Antwort enthält die Schnittstelle und den nächsten Hop, die zusammen die Entscheidung sind.

ip route get 203.0.113.25
ip -6 route get 2001:db8:4::25
ip route show | grep -F 203.0.113.25
Find-NetRoute -RemoteIPAddress 203.0.113.25

Wiederholen Sie die Abfrage für die Adressfamilie, die die Anwendung tatsächlich wählt, denn ein Client kann IPv6 bevorzugen und eine IPv4-Ausnahme still umgehen. Vergleichen Sie das Ergebnis vor und nach dem Aufbau des Tunnels und behalten Sie beide Ausgaben. Dieser Vergleich zeigt, ob der Client den Eintrag beim Verbinden hinzugefügt hat oder ob er schon vorhanden war.

Ein dauerhafter Eintrag und ein Laufzeiteintrag scheitern unterschiedlich. Der Laufzeiteintrag verschwindet mit der Sitzung, während der dauerhafte einen Neustart überlebt und weiter Verkehr an ein Gateway schickt, das nicht mehr existiert.

Die Endpunkt-Ausnahme und die Rekursionsfalle

VPN-Clients installieren üblicherweise eine Hostroute zur äußeren Adresse des Servers über das ursprüngliche Gateway, bevor sie die Standardroute umleiten. Ohne diesen Eintrag würden die verschlüsselten Pakete in den Tunnel geschickt, den sie gerade aufbauen wollen, und die Verbindung würde schleifen, bis sie abläuft.

Die Falle entsteht, wenn die akzeptierten Subnetze des Tunnels zufällig diese Endpunktadresse einschließen oder wenn ein zweites Profil später eine breitere Route hinzufügt. Dann verliert der Endpunkteintrag gegen ein längeres Präfix, und die Sitzung bricht zusammen, sobald sie Verkehr durchlässt. Die Endpunktadresse neben den akzeptierten Subnetzen zu notieren ist der billigste Weg, die Kollision vor den Nutzern zu bemerken. Es erklärt auch, warum dasselbe Profil aus einem Netz funktioniert und aus einem anderen scheitert.

Den Pfad prüfen, den die Anwendung wirklich nutzt

Ein erfolgreicher Ping auf den Hostnamen ist ein schwacher Beweis, wenn die Anwendung eine andere Adresse oder eine andere Familie verbindet. Prüfen Sie das genaue Tupel aus Adresse, Familie, Port und Schnittstelle, und zwar auf der Maschine, die den Client ausführt.

ip route get 203.0.113.25
sudo nft list ruleset | grep -A 4 'chain output'
curl -sS --max-time 8 -o /dev/null -w '%{remote_ip}
' https://app.example.net

Ist der Pfad falsch, entscheiden Sie vor jeder Änderung, ob die Anforderung ein Netz oder eine Adresse ist. Eine Einzeladress-Anforderung rechtfertigt eine Hostroute mit Kommentar und Verantwortlichem; ein Dienst mit wechselnden Adressen braucht domänenbasiertes Routing oder eine ehrliche Subnetz-Entscheidung.

Entfernen Sie Einträge, die keine reale Destination mehr abbilden, und notieren Sie die, die Sie behalten. Ein unerklärter /32 ist drei Monate später nicht von einem Fehler zu unterscheiden, und die nächste Person löscht ihn, ohne zu wissen, was davon abhing.

Ähnliche Artikel