ssh -D 1080 startet einen SOCKS-Proxy auf Port 1080 deines Rechners und leitet jede Verbindung über den SSH-Server weiter, der dann das Internet oder sein internes Netzwerk erreicht. Stell deinen Browser auf SOCKS5 unter 127.0.0.1:1080 ein, und du surfst, als säßest du direkt am Server, wobei die Strecke dorthin innerhalb von SSH verschlüsselt ist.
Wie ssh -D 1080 als SOCKS-Proxy funktioniert
Die OpenSSH-Option -D [bind_address:]port richtet dynamisches Forwarding ein. Der Client lauscht auf diesem lokalen Port und spricht SOCKS4 oder SOCKS5. Wenn der Browser eine Seite anfordert, läuft die Anfrage über die SSH-Verbindung, meist zu TCP-Port 22, und der Server baut die endgültige Verbindung auf. Das Ziel sieht die IP des Servers, nicht deine.
Der minimale Befehl, ohne Remote-Shell:
ssh -D 1080 -N -C [email protected]-D 1080: SOCKS-Proxy auf dem lokalen Port 1080.-N: führt keinen Remote-Befehl aus; hält nur die Weiterleitungen aufrecht.-C: komprimiert den Datenverkehr, praktisch bei langsamen Verbindungen.-f(optional): schickt ssh nach der Authentifizierung in den Hintergrund.
Nur der Superuser darf Ports unter 1024 weiterleiten, weshalb üblicherweise 1080 gewählt wird. Alle Flags sind in der offiziellen ssh-Manpage beschrieben.
DynamicForward in ~/.ssh/config für den SOCKS-Proxy einrichten
DynamicForward ist das Gegenstück zu -D in der Konfigurationsdatei und verwendet dieselbe Syntax [bind_address:]port. So musst du die Flags nicht jedes Mal neu eintippen:
Host office-proxy
HostName server.example.com
User user
Port 22
IdentityFile ~/.ssh/id_ed25519
DynamicForward 127.0.0.1:1080
ExitOnForwardFailure yes
ServerAliveInterval 30
Compression yesMit diesem Block baut ssh -N office-proxy den Tunnel auf. ExitOnForwardFailure yes sorgt dafür, dass ssh beendet wird, wenn Port 1080 nicht gebunden werden kann, statt dir eine Sitzung ohne Proxy zu hinterlassen. Prüfe die Berechtigungen: ~/.ssh auf 700 und den privaten Schlüssel auf 600. Falls du noch auf RSA setzt: OpenSSH 8.8 hat ssh-rsa-Signaturen mit SHA-1 standardmäßig deaktiviert; ein Ed25519-Schlüssel, unterstützt seit OpenSSH 6.5, umgeht das.
Browser-Einrichtung für den ssh -D SOCKS-Proxy
Der Browser muss SOCKS5 auf 127.0.0.1, Port 1080, verwenden und Hostnamen über den Proxy auflösen. Wird DNS lokal aufgelöst, schlagen die internen Namen des Servers fehl, und deine Anfragen gehen über dein eigenes Netzwerk hinaus.
- Firefox: Einstellungen → Netzwerk-Einstellungen → Manuelle Proxy-Konfiguration. SOCKS-Host 127.0.0.1, Port 1080, SOCKS v5, und aktiviere „Proxy DNS when using SOCKS v5“.
- Chrome oder Chromium: starte den Browser mit
--proxy-server=socks5://127.0.0.1:1080, idealerweise mit einem separaten Profil, damit sich der Datenverkehr nicht vermischt. - curl: verwende
--socks5-hostname, nicht--socks5, damit der Server den Namen auflöst.
google-chrome --user-data-dir=/tmp/socks-profile --proxy-server=socks5://127.0.0.1:1080
curl -I --socks5-hostname 127.0.0.1:1080 https://intranet.example.comLiefert curl Header von einem Host, der nur im Netzwerk des Servers existiert, funktioniert der Tunnel.
ssh -D gegenüber Mosh: Vergleichstabelle für den SOCKS-Proxy
Mosh beherrscht weder Port-Forwarding noch X11-Forwarding und kann daher keinen SOCKS-Proxy transportieren. Jedes Werkzeug erfüllt eine andere Aufgabe:
| Was verglichen wird | ssh -D (SOCKS) | Mosh |
|---|---|---|
| Transport und Standardport | TCP, Port 22 | UDP, Ports 60000-61000 |
| Port-Forwarding oder SOCKS-Proxy | Ja, dynamisches Forwarding | Nicht unterstützt |
| Wie die Verbindung aufgebaut wird | Direkte SSH-Verbindung | Startet mosh-server über eine anfängliche SSH-Verbindung |
| Bester Einsatzzweck | Surfen oder Werkzeuge über den Server ausführen | Interaktive Shell in wechselnden Mobilfunknetzen |
In der Praxis kombinierst du beide: Mosh für die Shell vom Smartphone aus und eine separate SSH-Verbindung mit -D oder DynamicForward, wenn du den Proxy brauchst.
4 Fehler beim Aufbau eines SOCKS-Proxys mit ssh -D
- Erwarten, dass Mosh den Proxy weiterleitet: das tut es nicht; der Tunnel muss reines SSH sein.
- DNS-Lecks: ohne „Proxy DNS“ in Firefox oder mit
--socks5in curl werden Namen in deinem lokalen Netzwerk aufgelöst. - Forwarding auf dem Server deaktiviert: setzt
sshd_configAllowTcpForwarding nooderDisableForwarding yes, wird der Kanal abgelehnt, obwohl die Anmeldung funktioniert. - Auf allen Schnittstellen lauschen:
-D 0.0.0.0:1080macht deinen Rechner zu einem offenen Proxy für alle in deinem Netzwerk. Binde ihn an127.0.0.1, sofern du keinen Grund für etwas anderes hast.
Den SOCKS-Proxy-Server mit termi1 vom Smartphone aus verwalten
Der ssh -D-Tunnel läuft meist von einem Laptop aus, doch den Server dahinter kannst du vom Smartphone aus prüfen. Mit dem SSH-Terminal termi1 öffnest du /etc/ssh/sshd_config in deinem bevorzugten Editor über die eigene Tastatur der App, die Esc, Ctrl, Tab und Pfeiltasten enthält, oder lädst die Datei per SFTP herunter, ohne die Sitzung zu verlassen.
Bevor du den Dienst neu startest, prüfe die Syntax:
sudo sshd -t
grep -Ei 'allowtcpforwarding|disableforwarding' /etc/ssh/sshd_configBitte die KI, „die sshd-Konfiguration zu prüfen“, und sie tippt den Befehl in den Prompt, ohne Enter zu drücken. Bei Verbindungen, die als Produktion markiert sind, hält Production Guard alles zurück, was etwas stoppt oder verändert, etwa einen Neustart von sshd, bevor es den Prompt erreicht. Auf dem Smartphone erzeugte Schlüssel liegen im sicheren Speicher des Systems, und der private Schlüssel verlässt das Gerät nie. Hat der Server keine öffentliche IP, erreicht ihn ein privates Mesh-Netzwerk wie Prialo oder Tailscale, ohne Ports zu öffnen. termi1 gibt es im App Store für das iPhone und bei Google Play.
Häufig gestellte Fragen
Was macht ssh -D 1080 eigentlich?
ssh -D 1080 öffnet einen SOCKS4/SOCKS5-Proxy auf dem lokalen Port 1080 und leitet jede eingehende Verbindung über den SSH-Server. Der Server baut die endgültige Verbindung auf, sodass die besuchten Websites die IP-Adresse des Servers sehen und nicht die des Client-Rechners.
Was ist der Unterschied zwischen ssh -D und DynamicForward?
ssh -D und DynamicForward bewirken dasselbe: Das eine ist die Kommandozeilenoption, das andere die Direktive in ~/.ssh/config. Beide akzeptieren die Syntax [bind_address:]port, und mit DynamicForward musst du das Flag nicht bei jeder Verbindung zu diesem Host wiederholen.
Kann ich mit Mosh einen SOCKS-Proxy erstellen?
Mosh kann keinen SOCKS-Proxy erstellen, weil es weder Port-Forwarding noch X11-Forwarding beherrscht. Es nutzt UDP auf den Ports 60000-61000 ausschließlich für die interaktive Shell. Für den Proxy brauchst du eine normale SSH-Verbindung mit -D oder DynamicForward in deiner Konfigurationsdatei.
Wie verhindere ich DNS-Lecks beim ssh-SOCKS-Proxy?
DNS-Lecks beim ssh-SOCKS-Proxy verhinderst du, indem die Namen auf dem Server aufgelöst werden: In Firefox aktivierst du „Proxy DNS when using SOCKS v5“, in curl nutzt du --socks5-hostname, und Chrome startest du mit --proxy-server=socks5://127.0.0.1:1080 und einem separaten Profil.
Warum verweigert der Server den ssh -D-Tunnel?
Der Server verweigert den ssh -D-Tunnel, wenn sshd_config AllowTcpForwarding no oder DisableForwarding yes enthält. Die Anmeldung klappt trotzdem, aber Forwarding-Kanäle werden abgelehnt. Ändere die Direktive, prüfe sie mit sudo sshd -t und starte anschließend den SSH-Dienst neu.