Dienste über SSH-Tunnel weiterleiten

SSH-Tunneling (Port-Forwarding) ermöglicht es, einen Netzwerkport von einem entfernten Server sicher auf eine andere Maschine weiterzuleiten — der gesamte Datenverkehr wird verschlüsselt und es wird keine zusätzliche Software außer einem Standard-SSH-Client benötigt.

Das Konzept

SSH-Tunneling funktioniert als dreiteilige Kette. Stellen Sie es sich wie eine Weiterleitung über einen Relay-Server vor — Sie verbinden sich mit dem mittleren Server, der den Datenverkehr transparent an das Ziel weiterleitet:

TeilRolleBeispiel
NearIhr lokaler Rechner — baut den Tunnel aufIhr Laptop / Workstation
MiddleEin Zwischenserver, zu dem Sie per SSH verbinden können — er stellt den weitergeleiteten Port bereit209.239.112.134
FarDas eigentliche Ziel — der Server, auf dem der gewünschte Dienst läuftserver935
Terminal
Near <--> Middle <--> Far

Der entscheidende Vorteil: Far muss nicht öffentlich erreichbar sein. Solange Middle zu Far und Sie zu Middle eine Verbindung aufbauen können, schlägt der Tunnel die Brücke.

SSH-Flags erklärt

Der Tunnel-Befehl nutzt folgende SSH-Flags:

FlagBedeutung
-NKein Remote-Befehl ausführen — die Verbindung bleibt ausschließlich für das Port-Forwarding offen, ohne in eine Shell zu wechseln.
-LLokales Port-Forwarding — bindet einen Port auf dem mittleren Server und leitet den Datenverkehr zum Zielserver weiter. Format: bind-address/lokaler-port/ziel-server/ziel-port
-fOptional — startet SSH im Hintergrund. In Kombination mit -N läuft der Tunnel als Hintergrundprozess.
-vOptional — ausführliche Ausgabe, hilfreich bei der Fehlersuche.

Der Befehl

Allgemeine Syntax

Ersetzen Sie die Platzhalter durch Ihre tatsächlichen Server-Adressen, IP-Adressen und Portnummern:

Terminal
ssh -N root@middle-server -L middle-IP/middle-port/far-server/far-port

Konkretes Beispiel

Dieses Beispiel öffnet Port 110 auf dem mittleren Server (209.239.112.134) und leitet alle Verbindungen zu Port 22 (SSH) auf dem Zielserver (server935) weiter:

Terminal
ssh -N root@server935 -L 209.239.112.134/110/server935/22

Jede Verbindung zu 209.239.112.134:110 wird transparent zu server935:22 weitergeleitet — der SSH-Dienst des Zielservers ist damit über den mittleren Server erreichbar.

Tunnel im Hintergrund starten

Mit dem Flag -f wird der Tunnel im Hintergrund gestartet, sodass das Terminal frei bleibt:

Terminal
ssh -fN root@server935 -L 209.239.112.134/110/server935/22

Um einen Hintergrund-Tunnel zu beenden, suchen Sie die Prozess-ID und beenden ihn:

Terminal
ps aux | grep ssh kill <PID>

Der Tunnel bleibt aktiv, solange die SSH-Verbindung aufrechterhalten wird. Bricht die Verbindung ab, muss der Befehl erneut ausgeführt werden. Für persistente Tunnel mit automatischem Reconnect empfiehlt sich das Tool autossh.

Typische Anwendungsfälle

Zugriff auf einen gesperrten Dienst
Einen Datenbank- oder Admin-Port, der nicht öffentlich zugänglich ist, über einen Server weiterleiten, der internen Netzwerkzugriff hat.
Temporären Zugriff gewähren
Einen Dienst auf einem bestimmten Port für Dritte zugänglich machen, ohne Firewall-Regeln dauerhaft zu ändern — Tunnel einfach schließen wenn nicht mehr benötigt.
Verschlüsselte Weiterleitung
Alle Daten durch den Tunnel werden von SSH verschlüsselt — ideal für Dienste ohne eigene TLS-Verschlüsselung.
Jump-Host-Muster
Einen öffentlich erreichbaren Server als Relay nutzen, um interne Server zu erreichen, die nicht direkt aus dem Internet zugänglich sind.

Fehlerbehebung

ProblemUrsache & Lösung
Verbindung zum weitergeleiteten Port wird abgelehntDie Firewall des mittleren Servers blockiert den Port. Port in iptables oder nftables auf dem mittleren Server öffnen.
Tunnel verbindet sich, bricht aber sofort abSSH-Keepalive ist möglicherweise nicht konfiguriert. ServerAliveInterval 30 in ~/.ssh/config hinzufügen.
Port-Forwarding wird vom Server abgelehntDer mittlere Server hat möglicherweise AllowTcpForwarding no in seiner /etc/ssh/sshd_config. Auf yes setzen und den SSH-Dienst neu starten.
Binding an die IP des mittleren Servers schlägt fehlSSH bindet standardmäßig nur an localhost. GatewayPorts yes in der /etc/ssh/sshd_config des mittleren Servers setzen, damit Binding an die öffentliche IP möglich ist.

Weiterführende Dokumentation

Die vollständige Referenz aller SSH-Port-Forwarding-Optionen finden Sie im offiziellen OpenSSH-Handbuch.