Wie leitet man bestimmte Adressen durch einen Tunnel?

Wie leitet man bestimmte Adressen durch einen Tunnel?

Auf bestimmte Websites/Dienste kann ich nur von dem Subnetz aus zugreifen, in dem sich mein Server befindet (denken Sie an das typische Intranet-Szenario). Gibt es eine Möglichkeit, den Datenverkehr, der an diese Adressen geht, transparent durch einen SSH-Tunnel zu leiten?

Stellen Sie sich folgende Konfiguration vor:

Mein Laptop ist mit dem Heimnetzwerk verbunden. Er kann nicht direkt auf die Dienste auf den IPs X und Y zugreifen. Ich habe einen SSH-Tunnel zu einem Server, der sich in einem Subnetz befindet, das tatsächlich auf diese Dienste zugreifen kann.

Kann ich den gesamten Datenverkehr zu den Subnetzen X und Y irgendwie automatisch kapseln, sodass er durch diesen Tunnel läuft, ohne die gesamte VPN-Lösung ausführen zu müssen, die meinen gesamten Datenverkehr über den Server senden würde? Mit anderen Worten: Der gesamte Datenverkehr zu einem anderen Subnetz sollte weiterhin direkt vom Laptop kommen, ohne über den Server zu laufen (unter Verwendung des Tunnels).

Antwort1

Sie können in der Routing-Tabelle die Schnittstelle angeben, über die der Datenverkehr geleitet werden soll:

sudo route add <host.com> -interface <ppp0>

Dabei ist host.com der Hostname oder die IP, auf die Sie über die Schnittstelle zugreifen möchten, und ppp0 ist die Linkkennung für Ihr VPN, die mit dem ifconfigBefehl angezeigt wird.

Antwort2

Neuere Versionen von OpenSSH unterstützen tun/tap Netzwerkgeräte für echte VPN-Unterstützung. Siehehttps://help.ubuntu.com/community/SSH_VPNfür einige grundlegende Dokumentationen (offensichtlich für Ubuntu gedacht, aber das Grundprinzip gilt auch anderswo.)

Antwort3

Haftungsausschluss: Ich habe das, was ich beschreiben werde, nicht wirklich getestet und es kann tatsächlich völlig falsch sein, aber Ihre Frage ist so faszinierend, dass ich der Versuchung nicht widerstehen kann, einen Antwortentwurf zu verfassen. :-) Außerdem hängt die Konfiguration hier von einigen iptablesFunktionen ab, die möglicherweise nur unter Linux vorhanden sind.

Angenommen, Sie möchten von Ihrem Laptop aus eine Verbindung zu einem bestimmten Port P1 auf Server X1, zu Port P2 auf Server X2 usw. herstellen – ich werde beschreiben, wie TCP-Verkehr über einen SSH-Tunnel zu diesen bestimmten Server-Port-Paaren geleitet wird. Notiz:Die IP-Adressen X1, X2 usw. sind die IP-Adressen des Servers aus der Sicht des Gateway-Hosts (dem, bei dem Sie sich per SSH anmelden).

  1. Wählen Sie einige unbenutzte lokale Ports L1 (z. B. 10000), L2 (z. B. 10001) usw. aus. Die Ports L1, L2 usw. müssen alle unterschiedlich sein und ihre Anzahl sollte der Anzahl der unterschiedlichen (Xn,Pn) Server+Port-Paare entsprechen.

  2. Wird verwendet iptables, um Pakete, die an Xn:Pn gerichtet sind, auf localhost:Ln umzuleiten.

    iptables -t nat -A AUSGABE -p tcp -d X1 --dport P1 -j DNAT --zum-Ziel localhost:L1 iptables -t nat -A AUSGABE -p tcp -d X2 --dport P2 -j DNAT --zum-Ziel localhost:L2

  3. Stellen Sie nun per SSH eine Verbindung zum Gateway her und verwenden Sie dabei die -LOption, den Datenverkehr von localhost:Ln nach (Xn, Pn) zu tunneln:

    ssh gateway.server -L localhost:L1:X1:P1 -L localhost:L2:X2:P2 …

Beispiel:

# access webserver.intranet (port 80) through localhost:10080
iptables -t nat -A OUTPUT -p tcp -d webserver.intranet --dport 80 -j DNAT --to-destination localhost:10080
ssh gateway.server -L locahost:10080:webserver.intranet:80

Vorbehalte:

  • es funktioniert nur für TCP, wenn es überhaupt funktioniert ...

  • Wenn Sie auf mehr als einen Server zugreifen möchten, ist die Einrichtung eines VPN wahrscheinlich weniger aufwändig

  • Es ist möglicherweise immer noch einfacher, die SSH-Option zu verwenden, -Dum einen SOCKS-Proxy zu simulieren und Ihren gesamten Datenverkehr darüber zu tunneln.

Antwort4

Kann ich den gesamten Datenverkehr zu den Subnetzen von X und Y irgendwie automatisch kapseln, sodass er durch diesen Tunnel läuft, ohne die gesamte VPN-Lösung ausführen zu müssen, die meinen gesamten Datenverkehr über den Server senden würde?

Das ist auf den ersten Blick etwas seltsam, denn genau das macht ein VPN für Sie. SSH ist in der Regel eine Punkt-zu-Punkt-Verbindung. Die Idee besteht darin, dass Sie einen Port auf Ihrem lokalen Computer mit dem Port eines Remotecomputers an einem anderen Ort verbinden. Es wurde nicht wirklich für die Art von Datenverkehr entwickelt, die Sie sich vorstellen.

Mit anderen Worten: Der gesamte Datenverkehr zu einem anderen Subnetz sollte weiterhin direkt vom Laptop kommen und nicht über den Server laufen (unter Verwendung des Tunnels).

Auch hier würde ein VPN Abhilfe schaffen.

Wenn Sie sich über eine "schwere" Lösung für den sicheren VPN-Verkehr Gedanken machen (d. h. Sie wollen nicht damit herumspielen, weil es zu kompliziert wäre), sollten Sie sich wirklich ansehenOpenVPN, das genau das tut, was Sie beschreiben. Es würde nicht nur den gesamten Datenverkehr kapseln, sondern es kann auch so erfolgen, dass nur der für diese Subnetze bestimmte Datenverkehr die Reise über die VPN-Leitung antritt. Ich warne Sie, dass Sie noch immer eine Textdatei auf dem/den lokalen und Remote-Computer(n) bearbeiten müssen, aber es ist ziemlich einfach, es zum Laufen zu bringen.

Da Sie nicht möchten, dass die Partei in der Mitte (ein Server) Ihren Datenverkehr sieht, würden Sie das VPN so einrichten, dass eine direkte Verbindung von Ihrem Computer zum Remote-Computer hergestellt wird. Alle weitergeleiteten Pakete würden verschlüsselt, bevor sie Ihren Laptop verlassen, sodass Sie eine 100-prozentige End-to-End-Abdeckung hätten.

verwandte Informationen