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).
quelle
-interface
ist dies keine Option,route
sodass der obige Vorschlag einen Verwendungsfehler ergibt. Wie wird dies auch zum Routing über den SSH-Tunnel führen, wenn das OP danach fragt?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.)
quelle
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
iptables
Funktionen 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.
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.
Verwenden Sie
iptables
diese Option, um an Xn: Pn gerichtete Pakete auf localhost: Ln umzuleiteniptables -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
Jetzt SSH zum Gateway mit der
-L
Option zum Tunneln des Datenverkehrs von localhost: Ln nach (Xn, Pn):ssh gateway.server -L localhost: L1: X1: P1 -L localhost: L2: X2: P2 ...
Beispiel:
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-
-D
Option zu verwenden, um einen SOCKS-Proxy zu simulieren und den gesamten Datenverkehr durch diesen zu tunneln.quelle
Was Sie wollen, ist die Definition eines VPN.
Ein VPN sollte das nicht
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.
quelle
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.
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.
quelle
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):
Wenn Sie dann eine Verbindung zu herstellen
localhost:2222
, entspricht dies genau der Verbindung zulocalhost:2222
vonjump_box
. Sie können mehrere -L-Optionen gleichzeitig verwenden und eine Verbindung zu Diensten auf anderen Hosts herstellen, wenn die Option ssd_config on diesjump_box
zulässt.Sie können
autossh
mitsystemd
oder ähnlichem verwenden, um die Tunnel in Betrieb zu halten.quelle