Wie leite ich bestimmte Adressen durch einen Tunnel?


14

Es gibt bestimmte Websites / Dienste, auf die ich nur von dem Subnetz aus zugreifen kann, in dem sich mein Server befindet (denken Sie an das typische Intranetszenario). Gibt es eine Möglichkeit, Datenverkehr, der durch einen SSH-Tunnel zu diesen Adressen geleitet wird, transparent weiterzuleiten?

Betrachten Sie das folgende Setup:

Mein Laptop ist mit dem Heimnetzwerk verbunden. Es kann nicht direkt auf Dienste auf 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 in den Subnetzen von X und Y irgendwie automatisch kapseln, um diesen Tunnel zu durchlaufen, ohne die gesamte VPN-Lösung ausführen zu müssen, die den gesamten Datenverkehr über den Server senden würde? Mit anderen Worten: Der gesamte Datenverkehr, der in ein anderes Subnetz geleitet wird, sollte immer noch direkt vom Laptop ausgehen, ohne den Server zu passieren (über den Tunnel).

Antworten:


6

Sie können die Schnittstelle angeben, über die der Datenverkehr in der Routingtabelle weitergeleitet werden soll:

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

Dabei ist host.com der Hostname oder die IP-Adresse, auf die Sie über die Schnittstelle zugreifen möchten, und ppp0 die mit dem ifconfigBefehl angezeigte Link-ID für Ihren VPN .


2
Hinweis: Zumindest auf Ubuntu -interfaceist dies keine Option, routesodass der obige Vorschlag einen Verwendungsfehler ergibt. Wie wird dies auch zum Routing über den SSH-Tunnel führen, wenn das OP danach fragt?
Arielf

3

Aktuelle Versionen von OpenSSH unterstützen Tun / Tap-Netzwerkgeräte für echte VPN-Unterstützung. Unter https://help.ubuntu.com/community/SSH_VPN finden Sie einige grundlegende Dokumentationen (natürlich für Ubuntu gedacht, aber das Grundprinzip gilt an anderer Stelle.)


Beachten Sie, dass hierfür Root-Rechte sowohl auf dem Laptop als auch auf dem Gateway-Host erforderlich sind.
Riccardo Murri

1

Haftungsausschluss: Ich habe nicht wirklich getestet, was ich beschreiben werde, und es kann in der Tat völlig falsch sein, aber Ihre Frage ist so faszinierend, dass ich der Versuchung, eine Antwort zu formulieren, nicht widerstehen kann. :-) Außerdem hängt das Setup hier von einigen iptablesFunktionen ab, die möglicherweise nur unter Linux verfügbar sind.

Angenommen, Sie möchten eine Verbindung von Ihrem Laptop zu einem bestimmten Port P1 auf Server X1, zu Port P2 auf Server X2 usw. herstellen. - Ich beschreibe, wie der TCP-Verkehr über einen SSH-Tunnel zu diesen bestimmten Server-Port-Paaren geleitet wird. Hinweis: Die IP-Adressen X1, X2 usw. sind die IP-Adressen des Servers, wie sie vom Gateway-Host (demjenigen, in den Sie SSH ausführen) aus gesehen werden.

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

  2. Verwenden Sie iptablesdiese Option, um an Xn: Pn gerichtete Pakete auf localhost: Ln umzuleiten

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

  3. Jetzt SSH zum Gateway mit der -LOption zum Tunneln des Datenverkehrs von localhost: Ln nach (Xn, Pn):

    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

Vorsichtsmaßnahmen:

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

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

  • Es ist möglicherweise immer noch einfacher, die SSH- -DOption zu verwenden, um einen SOCKS-Proxy zu simulieren und den gesamten Datenverkehr durch diesen zu tunneln.


Es funktioniert tatsächlich! (Leider passt es nicht zu meiner spezifischen Situation, in der ich Datenverkehr
weiterleiten

1

Subnetze von X und Y durchlaufen diesen Tunnel, ohne die gesamte VPN-Lösung ausführen zu müssen, die meinen gesamten Datenverkehr über den Server senden würde?

Was Sie wollen, ist die Definition eines VPN.

Ein VPN sollte das nicht

Sende deinen gesamten Datenverkehr über den Server?

Ist dies der Fall, ist das Setup nicht ordnungsgemäß.

Es wird davon ausgegangen, dass alle Maschinen, auf die Sie per Definition über einen Tunnel oder ein VPN zugreifen möchten, nicht über das Internet erreichbar sind. Daher sollte nur die erforderliche, nicht über das Internet routbare Adresse über das VPN geroutet werden.

Wenn Sie eine kompliziertere Situation haben, wie nur Maschine X und Y und sonst nichts. Ihre IT-Mitarbeiter können diese für Sie in ein Subnetz stellen. Leiten Sie dann auf Ihrem Client-Computer nur dieses Subnetz über das VPN weiter.


0

Kann ich den gesamten Datenverkehr in den Subnetzen von X und Y irgendwie automatisch kapseln, um diesen Tunnel zu durchlaufen, ohne die gesamte VPN-Lösung ausführen zu müssen, die den gesamten Datenverkehr über den Server senden würde?

Das ist auf den ersten Blick etwas seltsam, denn genau das kann ein VPN für Sie tun. SSH ist in der Regel eine Punkt-zu-Punkt-Angelegenheit. Die Idee ist, dass Sie einen Port auf Ihrem lokalen Computer mit dem Port eines Remotecomputers an einer anderen Stelle verbinden. Es war wirklich nicht für die Art von Verkehr ausgelegt, die Sie sich vorstellen.

Mit anderen Worten: Der gesamte Datenverkehr, der in ein anderes Subnetz geleitet wird, sollte immer noch direkt vom Laptop ausgehen, ohne den Server zu passieren (über den Tunnel).

Auch dafür würde ein VPN sorgen.

Wenn Sie sich Gedanken über eine "schwergewichtige" Lösung für sicheren VPN-Verkehr machen (dh, Sie möchten nicht damit herumalbern, weil dies zu kompliziert wäre), sollten Sie sich OpenVPN genau anschauen , das genau das tut, was Sie beschreiben. Es würde nicht nur den gesamten Datenverkehr kapseln, sondern es kann auch so vorgegangen werden, dass nur der für diese Subnetze bestimmte Datenverkehr über die VPN-Pipe übertragen wird. Ich werde Sie warnen, dass Sie immer noch eine Textdatei auf den lokalen und entfernten Rechnern bearbeiten müssen, aber es ist ziemlich einfach, sie zum Laufen zu bringen.

Da Sie nicht möchten, dass der Teilnehmer in der Mitte (ein Server) Ihren Datenverkehr sieht, richten Sie das VPN so ein, dass eine direkte Verbindung von Ihrem Computer zum Remotecomputer hergestellt wird. Alle weitergeleiteten Pakete werden vor dem Verlassen Ihres Laptops verschlüsselt, sodass Sie eine 100-prozentige End-to-End-Abdeckung haben.


0

Wie andere bereits gesagt haben, möchten Sie wahrscheinlich VPN verwenden, wenn Sie "den gesamten Datenverkehr in die Subnetze einkapseln" müssen.

Um jedoch nur auf wenige Dienste zuzugreifen, empfiehlt es sich, die sehr einfache Funktion zur lokalen Portweiterleitung von SSH zu verwenden. Wenn Sie beispielsweise Folgendes eingeben (von Ihrem Laptop aus):

ssh -N -L 3333:localhost:2222 jump_box

Wenn Sie dann eine Verbindung zu herstellen localhost:2222, entspricht dies genau der Verbindung zu localhost:2222von jump_box. Sie können mehrere -L-Optionen gleichzeitig verwenden und eine Verbindung zu Diensten auf anderen Hosts herstellen, wenn die Option ssd_config on dies jump_boxzulässt.

Sie können autosshmit systemdoder ähnlichem verwenden, um die Tunnel in Betrieb zu halten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.