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 yes

Mit 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.

  1. 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“.
  2. 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.
  3. 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.com

Liefert 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 wirdssh -D (SOCKS)Mosh
Transport und StandardportTCP, Port 22UDP, Ports 60000-61000
Port-Forwarding oder SOCKS-ProxyJa, dynamisches ForwardingNicht unterstützt
Wie die Verbindung aufgebaut wirdDirekte SSH-VerbindungStartet mosh-server über eine anfängliche SSH-Verbindung
Bester EinsatzzweckSurfen oder Werkzeuge über den Server ausführenInteraktive 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

  1. Erwarten, dass Mosh den Proxy weiterleitet: das tut es nicht; der Tunnel muss reines SSH sein.
  2. DNS-Lecks: ohne „Proxy DNS“ in Firefox oder mit --socks5 in curl werden Namen in deinem lokalen Netzwerk aufgelöst.
  3. Forwarding auf dem Server deaktiviert: setzt sshd_config AllowTcpForwarding no oder DisableForwarding yes, wird der Kanal abgelehnt, obwohl die Anmeldung funktioniert.
  4. Auf allen Schnittstellen lauschen: -D 0.0.0.0:1080 macht deinen Rechner zu einem offenen Proxy für alle in deinem Netzwerk. Binde ihn an 127.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_config

Bitte 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.