teret4242
Goto Top

SSH Port Forwarding

Hallo,

bin gerade am verstehen wie Protokolle durch SSH getunnelt werden können.
Dabei liest man immer wieder von dem Begriff "Port Forwarding".
Was ist darunter im Bezug auf SSH-Tunneling zu verstehen?

Grüße

Content-ID: 211865

Url: https://administrator.de/forum/ssh-port-forwarding-211865.html

Ausgedruckt am: 23.12.2024 um 13:12 Uhr

108012
108012 18.07.2013 aktualisiert um 18:45:32 Uhr
Goto Top
Hallo,

sehr schön in deutsch Portweiterleitung und mit einigen Beispielen
nebst Diagrammen und auch Routerscreenshots, quasi alles was das Herz begehrt im Bezug auf Portforward.com natürlich auch auf deutsch face-wink

Gruß
Dobby
colinardo
colinardo 18.07.2013 um 19:39:00 Uhr
Goto Top
Hallo Teret4242,
einfaches Beispiel:
Du möchtest auf der Remote-Seite den Port 80 des Servers erreichen können. Dazu richtest du in dem Tunnel eine Portweiterleitung z.B. vom lokalen Port 10000 auf den Port 80 des Servers ein.
Um den Server nun erreichen zu können gibst du dann in deinem Browser http://127.0.0.1:10000 ein. Dies wäre ein Client-to-Server Forwarding; das ganze geht natürlich auch in die andere Richtung dann wäre es ein Server-to-Client Forwarding.

Hoffe das war soweit verständlich

Grüße Uwe
orcape
orcape 18.07.2013 um 19:45:24 Uhr
Goto Top
@ teret4242

Sorry, wenn Du gleich die Suchfunktion im Internet benutzt hättest, wäre Dir und uns ein Thread hier und einer im Debianforum erspart geblieben. face-wink
Das soll nicht arrogant rüberkommen, was willst Du aber als Antworten erhalten, als ein oder zwei Verlinkungen auf entsprechend ausführliche Erläuterungen, das Thema betreffend.

Gruß orcape
teret4242
teret4242 19.07.2013 aktualisiert um 10:02:44 Uhr
Goto Top
Zitat von @colinardo:
Du möchtest auf der Remote-Seite den Port 80 des Servers erreichen können. Dazu richtest du in dem Tunnel eine
Portweiterleitung z.B. vom lokalen Port 10000 auf den Port 80 des Servers ein.
Um den Server nun erreichen zu können gibst du dann in deinem Browser http://127.0.0.1:10000 ein. Dies wäre ein
Client-to-Server Forwarding; das ganze geht natürlich auch in die andere Richtung dann wäre es ein Server-to-Client
Forwarding.

Hallo Uwe,

so ungefähr ist das für mich verständlich, allerdings einfach noch etwas schwammig.
Und zwar, wenn ich "Port Forwarding" lese, dann denke ich automatisch an ein NAT-Garät das Anfragen entgegennimmt und dann an den entsprechenden Serverdienst weiterleitet (IP-Adresse + Port).

Wie kann man das nun auf SSH-Tunneling übertragen?

Angenommen ich möchte einen HTTP-Proxy der auf einem entfernten Rechner A läuft, auf meinem lokalen Rechner B benützen, wie würde dann der Ablauf davon aussehen?

Zuerst baut wahrscheinlich Rechner B eine SSH-Verbindung zu Rechner A auf...
...und ab dem Punkt ist mir nicht ganz klar wie das dann mit der Portgeschichte abläuft?


Grüße
teret4242
teret4242 19.07.2013 aktualisiert um 10:14:27 Uhr
Goto Top
Zitat von @orcape:
Sorry, wenn Du gleich die Suchfunktion im Internet benutzt hättest, wäre Dir und uns ein Thread hier und einer im
Debianforum erspart geblieben. face-wink
Das soll nicht arrogant rüberkommen, was willst Du aber als Antworten erhalten, als ein oder zwei Verlinkungen auf
entsprechend ausführliche Erläuterungen, das Thema betreffend.

Hallo orcape,

kein Problem, einerseits hab ich dafür vollstes Verständnis, dass nicht wegen jeder "googlebaren" Frage ein Therad in einem Forum eröffnet werden sollte, andererseit benütze ich aber auch generell Suchmaschinen bevor ich ein Thread in einem Forum eröffne. Da ich allerdings keine passende bzw. unausreichende Antwort auf auf meine Frage finden konnte, hielt ich es persönlich für richtig diesen Thread für mich zu erstellen face-wink


Grüße
colinardo
colinardo 19.07.2013 um 10:21:57 Uhr
Goto Top
Also der Tunnelaufbau ist ja klar ... Rechner B verbindet sich mit Rechner A via SSH
Das Forwarding der Ports wird schon beim Verbindungungsaufbau mit übergeben.
Da du ja mit dem Rechner A nun via SSH verbunden bist kannst du ohne irgendein Forwarding mit diesem ja nur über den SSH-Port(22) kommunizieren. Um nun andere Dienste auf dem Rechner A zu erreichen musst du einen lokalen Port an den entfernten Rechner weiterleiten (durch den SSH-Tunnel schicken).
Bei einem Proxy der auf Rechner A auf Port 8080 läuft sähe das z.B. für Putty so aus
L10000     RemoteHost:8080
Auf Rechner B trägst du dann localhost:10000 ein um deinen Proxy zu erreichen. Der lokale Port ist frei wählbar solange dieser nicht schon belegt ist.

An einem Beispiel mit dem SSH-Client Putty sollte das klarer werden:
http://www.cs.uu.nl/technical/services/ssh/putty/puttyfw.html

Grüße Uwe
gelöste Beitrage bitte auch als solche markieren.Danke
108012
108012 19.07.2013 um 10:27:48 Uhr
Goto Top
.....als ein oder zwei Verlinkungen auf entsprechend ausführliche Erläuterungen, das Thema betreffend.
Und wenn dann noch Fragen offen sind, werde diese meist auch viel präziser gestellt oder eben direkt zu einem Punkt
SSH Verbindungen betreffend, zumindest meine Meinung.

Und zwar, wenn ich "Port Forwarding" lese, dann denke ich automatisch an ein NAT-Garät das Anfragen entgegennimmt und dann an den entsprechenden Serverdienst weiterleitet (IP-Adresse + Port).
Das Thema ist so umpfangreich das es eben wirklich immer besser ist wenn man direkt nach etwas bestimmten fragt.
Wenn Du einen weiteren Router in Deinem LAN hast, also einen zweiten Router der nicht mit SPI und NAT arbeitet
weil zum Beispiel Dein LAN Switch nicht Layer3 ist oder der Router ein Produktivnetz von einem Test- oder Labornetz
trennt bzw. verbindet, Du als Admin aber Deine Switche und Geräte auch warten und Administrieren musst und das soll
halt sicher ablaufen, (der Switch bietet keine VLAN Option an) dann ist SSH auch ein probates Mittel und man kann auch dort mitunter nur mit Portweiterleitungen arbeiten, ohne das NAT vorhanden sein muss.

Wie kann man das nun auf SSH-Tunneling übertragen?
SSH ist eine, wenn auch ältere Variante, des Bildens eines VPN, nicht mehr und nicht weniger.

Angenommen ich möchte einen HTTP-Proxy der auf einem entfernten Rechner A läuft, auf meinem lokalen Rechner B benützen, wie würde dann der Ablauf davon aussehen?
Wenn Du uns sagst ob der Rechner hinter einem Router oder einer Firewall steht oder direkt im Internet steht wäre das schon schick.

Zuerst baut wahrscheinlich Rechner B eine SSH-Verbindung zu Rechner A auf...
Wenn da nichts vor "steht" ja, wenn ein Router oder eine Firewall davorstehen, kann man sich ja auch einmal versuchen an dem Router oder der Firewall via SSH anzumelden (VPN) und hat dann (un)eingeschränkten Zugriff auf alles was dahinter im Netzwerk vorhanden ist.

...und ab dem Punkt ist mir nicht ganz klar wie das dann mit der Portgeschichte abläuft?
Dazwischen (wenn "etwas" vor dem Rechner B steht) oder gar nicht (wenn der Rechner direkt im Internet steht)

Gruß
Dobby
teret4242
teret4242 19.07.2013 aktualisiert um 13:38:45 Uhr
Goto Top
@ All:

Ich glaube, ich beschreib das ganze jetzt mal anhand von einem konkreten Beispiel, dann ist es wahrscheinlich besser zu verstehen face-wink


Netzwerk 1:
Es gibt ein Netzwerk 1, in dem ein Rechner A steht, der einen SSH-Server auf dem Port 22 zur Verfügung stellt.
Da sich Rechner A hinter einem NAT-Router befindet, werden Zugriffe von außen auf Port 22 via Portweiterleitung vom Router an Rechner A weitergeleitet damit der SSH-Server auch von außen zur Verfügung steht.

Netzwerk 2:
Des Weiteren gibt es ein Netzwerk 2, in dem ein Rechner B steht, der sich hinter einem Proxy befindet. Nun würde ich gerne mit Rechner B eine Verbindung zum SSH-Server auf Rechner A aufbauen und den ganzen HTTP-Verkehr von Rechner B durch den SSH-Tunnel leiten und dann über Rechner A die Verbindung zum Internet aufbauen lassen.

Erstmal soweit, wie ist das zu realisieren?
Reicht dazu auf Rechner A der SSH-Server aus, oder muss dafür zusätzlich noch ein anderer Serverdienst zur Verfügung stehen über den man dann die HTTP-Verbindung zum Internet von Rechner B aus aufbauen kann?


Grüße
colinardo
colinardo 19.07.2013 aktualisiert um 13:42:43 Uhr
Goto Top
Euer Proxy muss das SSH-Protokoll (bzw. Port 22) zulassen, wenn dieser das nicht tut wird dein Vorhaben nicht funktionieren.
Was du aber als Trick probieren könntest, wäre auf dem Router in Netzwerk B den externen Port 80 oder 443 auf den SSH-Port des Servers umzuleiten. Manche Proxy-Server überprüfen nur den Port und machen kein DeepPacketInspection. Port 80 und 443 müssen Proxyserver aber zulassen damit du Internetseiten aufrufen kannst. Du baust dann halt mit dem SSH-Client eine Verbindung zu Server B mit ServerB:80 auf und täuschst damit dem Proxy eine HTTP-Verbindung vor.
teret4242
teret4242 19.07.2013 aktualisiert um 14:06:14 Uhr
Goto Top
Zitat von @colinardo:
Euer Proxy muss das SSH-Protokoll (bzw. Port 22) zulassen, wenn dieser das nicht tut wird dein Vorhaben nicht funktionieren.
Was du aber als Trick probieren könntest, wäre auf dem Router in Netzwerk B den externen Port 80 oder 443 auf den
SSH-Port des Servers umzuleiten. Manche Proxy-Server überprüfen nur den Port und machen kein DeepPacketInspection. Port
80 und 443 müssen Proxyserver aber zulassen damit du Internetseiten aufrufen kannst. Du baust dann halt mit dem SSH-Client
eine Verbindung zu Server B mit ServerB:80 auf und täuschst damit dem Proxy eine HTTP-Verbindung vor.

Das ist kein Problem, das passt alles soweit. Die SSH-Verbindung von Rechner B zum SSH-Server auf Rechner A ist auch schon erfolgreich aufgebaut.

Jetzt würde ich aber gerne noch von Rechner B auf das Internet über den SSH-Tunnel zugreifen.

Und ab da kommt ja eben dann wieder die Portgeschichte ins Spiel, die mir noch nicht so richtig klar ist...
Zumal ich mir auch nicht sicher bin, ob auf Rechner A der SSH-Server ausreicht, der quasi den Internetzugangspunkt für Rechner B darstellt???
colinardo
colinardo 19.07.2013 aktualisiert um 14:12:46 Uhr
Goto Top
Zitat von @teret4242:
Jetzt würde ich aber gerne noch von Rechner B auf das Internet über den SSH-Tunnel zugreifen.

Ich glaube du verwechselst hier A und B
auf Rechner B läuft doch schon der Proxy wie du weiter oben gesagt hast, da musst du doch nicht den Tunnel nutzen.

nochmal zum Verständnis : der SSH-Server steht in NETZ B und du willst von NETZ A aus über den Tunnel die Internetverbindung von NETZ B benutzen.

weiter oben habe ich schon erläutert wie die Portweiterleitung im SSH-Client einzurichten ist, weiß nicht mehr was du daran nicht verstehst ...
teret4242
teret4242 19.07.2013 aktualisiert um 14:20:27 Uhr
Goto Top
Zitat von @colinardo:
Ich glaube du verwechselst hier A und B
auf Rechner B läuft doch schon der Proxy wie du weiter oben gesagt hast, da musst du doch nicht den Tunnel nutzen.

nochmal zum Verständnis : der SSH-Server steht in NETZ B und du willst von NETZ A aus über den Tunnel die
Internetverbindung von NETZ B benutzen.


Nein, Rechner B steht hinter einem Proxy. Auf Rechner A befindet sich der SSH-Server über den die Verbindung zum Internet aufgebaut werden soll.

Das heißt im Klartext:

Rechner B baut eine SSH-Verbindung zum SSH-Server der sich auf Rechner A befindet auf.
Rechner B soll seinen kompletten HTTP-Traffic durch den SSH-Tunnel zu Rechner A tunnenln
und dann anschließend die Verbindung zum Internet über Rechner A aufbauen. Verständlich face-smile ?
colinardo
colinardo 19.07.2013 um 14:26:56 Uhr
Goto Top
OK dann ist ja alles gesagt ...
ich verweise nochmal auf: http://www.cs.uu.nl/technical/services/ssh/putty/puttyfw.html
auf Rechner B z.B. lokalen Port 8000 auf den Proxy-Port des Servers weiterleiten und auf Rechner B im Browser oder in den IE-Einstellungen den Proxy localhost:8000 eintragen. Dann surfst du über den Tunnel bzw. Proxy von Rechner A.
Was gibt es daran nicht zu verstehen.
teret4242
teret4242 19.07.2013 um 14:34:20 Uhr
Goto Top
Zitat von @colinardo:
OK dann ist ja alles gesagt ...
ich verweise nochmal auf: http://www.cs.uu.nl/technical/services/ssh/putty/puttyfw.html
auf Rechner B z.B. lokalen Port 8000 auf den Proxy-Port des Servers weiterleiten und auf Rechner B im Browser oder in den
IE-Einstellungen den Proxy localhost:8000 eintragen. Dann surfst du über den Tunnel bzw. Proxy von Rechner A.
Was gibt es daran nicht zu verstehen.

Das auf Rechner A der den Internetzugangspunkt darstellen soll kein Proxy läuft, sondern nur ein SSH-Server?!
Und die Frage ist, ob das ausreicht...
colinardo
colinardo 19.07.2013 um 14:40:38 Uhr
Goto Top
Ach so, schau dir mal den SSH-Client Tunnelier an der bietet einen integrierten Proxy den du dafür nutzen kannst. Anleitung dazu hier: http://www.bitvise.com/ssh-web-browsing

Funktioniert wunderbar ...schon mal aus einem Uni-Netzwerk erfolgreich getestet.
teret4242
teret4242 19.07.2013 um 14:58:58 Uhr
Goto Top
Also ist dafür ein Proxy auf Rechner A erforderlich?

Und genau solche Fragen würde ich mir gerne selber beantworten können...
Aber dafür müsste ich eben genau wissen bzw. verstehen wie da ganze von statten geht...
colinardo
colinardo 19.07.2013 aktualisiert um 15:14:20 Uhr
Goto Top
Zitat von @teret4242:
Also ist dafür ein Proxy auf Rechner A erforderlich?
Ja.
Der Grund:
Alle HTTP-Daten gehen ohne Angabe eines Proxies immer über das Gateway des lokalen Netzes.