Sie möchten, dass der Verkehr des SOCKS-Proxys über das VPN hinausgeht, während der Rest des Hosts seinen normalen Weg behält. Zwei Entwürfe tun das, und sie unterscheiden sich darin, was bricht, wenn etwas schiefgeht. Der eine schiebt eine Standardroute in den Tunnel und umgeht sie dann; der andere lässt die Haupttabelle in Ruhe und schickt eine einzelne Quelladresse in eine zweite Tabelle. Der zweite ist sauberer, und er hat seine eigenen Fallen.

Zwei Entwürfe, zwei unterschiedlich große Schadensradien

Der Volltunnel-Entwurf ist das, was die meisten VPN-Clients standardmäßig tun: die Standardroute ersetzen, damit alles dem Tunnel folgt, und dann ausschließen, was nicht folgen soll. Er ist leicht zu durchdenken und schwer eng zu halten, weil jeder lokale Dienst, den Sie hinzufügen, den Tunnel erbt, bis Sie ihn ausschließen. Das Fehlerbild ist breit, denn eine falsche Route nimmt die Konnektivität des Hosts selbst mit.

Der quellenbasierte Entwurf geht den umgekehrten Weg. Die Haupttabelle bleibt, wie sie war, und eine einzige Regel schickt Pakete von einer bestimmten lokalen Adresse in eine Tabelle mit einer Tunnel-Standardroute. Sonst ändert sich nichts, was bedeutet, dass der Schadensradius eine Adresse ist.

Diese Enge ist zugleich die Einschränkung: Der Entwurf funktioniert nur, wenn die ausgehenden Pakete des Proxys wirklich diese Adresse tragen.

Was Dantes external-Einstellung bewirkt

Die external-Einstellung wählt die Adressen, die der Proxy für ausgehende Verbindungen verwendet; sie berührt die Routing-Richtlinie des Kernels nicht. Genau diese Trennung macht den zweiten Entwurf möglich, und hier lesen viele die Dokumentation falsch. external auf eine Tunneladresse zu richten, bewirkt, dass der Proxy seine Verbindungen von dieser Adresse ausgehen lässt, und die Routing-Tabelle entscheidet dann, wohin diese Pakete gehen.

Der Listener ist eine eigene Angelegenheit. Halten Sie internal auf die Clients beschränkt, die den Proxy nutzen sollen, verlangen Sie Authentifizierung und sperren Sie den Port per Firewall, denn ein offener Listener ist kein Merkmal eines VPN-Ausgangs.

Bestätigen Sie, dass die konfigurierte Adresse tatsächlich zum Tunnel im Netzwerk-Namensraum des Proxys gehört.

Die quellenbasierte Tabelle aufbauen

Für eine TUN-Adresse 10.90.0.2/24 mit einem erreichbaren Peer unter 10.90.0.1 und einer Tabellennummer, die nichts anderes verwendet, sieht die Anordnung so aus:

ip -4 route add table 100 10.90.0.0/24 dev tun0 src 10.90.0.2
ip -4 route add table 100 default via 10.90.0.1 dev tun0 metric 10
ip -4 route add table 100 unreachable default metric 32760
ip -4 rule add priority 1000 from 10.90.0.2/32 lookup 100

Die unerreichbare Route ist der Teil, den viele überspringen. Ohne sie fällt eine Tabelle, deren Tunnelroute verschwindet, auf die gewöhnliche Standardroute zurück, und der Proxy verlässt das Netz still über das WAN. Mit ihr schlägt die Suche fehl, was ein sichtbarer Fehler statt eines stillen Lecks ist. Die Priorität der Regel muss außerdem vor allem anderen stehen, was auf diese Quelle passt.

Diese Werte beschreiben eine Topologie. Punkt-zu-Punkt-Peers, net30-Adressierung und Clients, die ein anderes Präfix vergeben, brauchen jeweils eigene Routen, also kopieren Sie die Form, nicht die Adressen.

Wo die Quellenregel leckt

Eine Regel, die auf eine Quelladresse passt, betrifft jeden Prozess, der sie verwendet, nicht nur den Proxy. Bindet ein anderer Daemon dieselbe Adresse, nimmt sein Verkehr ebenfalls den Tunnel, und der Fehler sieht nach einem unzusammenhängenden Dienstproblem aus. Geben Sie dem Proxy eine Adresse, die nichts anderes verwendet, oder akzeptieren Sie, dass der Geltungsbereich die Adresse und nicht der Prozess ist.

DNS ist das andere Leck. Ein Resolver-Socket nutzt nicht unbedingt die external-Datenquellenadresse des Proxys, also können Namensauflösungen weiterhin über das WAN hinausgehen. Testen Sie die Auflösung getrennt vom Verbindungsaufbau und entscheiden Sie, ob dieses Ergebnis akzeptabel ist.

IPv6 braucht eigene Regeln und Routen, denn eine IPv4-Anordnung beweist nichts über es.

Wählen Sie nach dem Fehler, den Sie vertragen können

Wählen Sie den Volltunnel, wenn der Host als Ganzes geschützt sein soll und Sie die Ausschlussliste pflegen können. Wählen Sie quellenbasiertes Routing, wenn der Host seinen eigenen Weg behalten muss und nur ein Dienst umgeleitet werden soll. Beides ist legitim; der Fehler ist, das eine zu wählen und es dann zu testen, als wäre es das andere.

Was auch immer Sie wählen, prüfen Sie von beiden Seiten: eine Anfrage über den Proxy und eine direkte Anfrage vom Host, mit der jeweils beobachteten Ausgangsadresse.

Wenn der Tunnel ausfällt, entscheiden Sie vorab, ob der Proxy scheitern oder zurückfallen soll, und lassen Sie die Routing-Tabelle diese Entscheidung ausdrücken.

Ähnliche Artikel