Skip to main content

SoCat - Fast start

1. Was ist socat?

Socat steht für SOcket CAT und ist ein extrem vielseitiges Kommandozeilen-Tool für die Datenübertragung zwischen zwei Endpunkten.
Es funktioniert ähnlich wie netcat ("nc"), ist aber deutlich mächtiger und flexibler.
Typische Anwendungsfälle:

  • Portweiterleitung (lokal oder übers Netzwerk)
  • Protokollübersetzung (z.B. von TCP zu UDP oder von alten zu neuen SSL/TLS-Protokollen)
  • Debugging von Netzwerkverbindungen
  • Temporäre Ersatzlösung, wenn keine Firewallregel angepasst werden kann
  • SSL/TLS-"Terminator": Alte Verbindungen mit modernen Zertifikaten sichern (oder andersrum)

Socat sollte wegen seiner Flexibilität aber nicht als Dauerlösung genutzt werden! Für produktive Setups sind spezialisierte Reverse-Proxys wie nginx, stunnel oder HAProxy oft besser geeignet.

2. Installation unter Debian/Linux

Die Installation ist sehr einfach – alle benötigten Pakete sind in den Debian-Repositories enthalten.

apt-get update
apt-get install socat

  • apt-get update: Aktualisiert die Paketlisten.
  • apt-get install socat: Installiert das socat-Paket.

3. Grundlegende Nutzung: Ports und Daten weiterleiten

Mit socat lassen sich Daten von einem Port an einen anderen weiterleiten – entweder lokal, über das Netzwerk oder zwischen verschiedenen Protokollen.

socat TCP-LISTEN:1234 TCP:localhost:8080

  • TCP-LISTEN:1234: Wartet auf eingehende Verbindungen auf Port 1234 (auf allen lokalen Interfaces).
  • TCP:localhost:8080: Leitet die eingehenden Daten an Port 8080 auf localhost weiter.

Nutze dies z.B., um eine Verbindung zwischen zwei Ports auf demselben Rechner oder zwischen verschiedenen Rechnern im Netzwerk herzustellen.

Tipp: Wenn du nur auf einer bestimmten IP (z.B. 192.168.0.1) lauschen möchtest, ergänze bind=192.168.0.1:

socat TCP-LISTEN:1234,bind=192.168.0.1 TCP:localhost:8080

4. Verbindungen stabil halten & mehrere Clients unterstützen

Standardmäßig beendet socat den Prozess nach einer einzelnen Verbindung. Möchtest du mehrere Clients gleichzeitig bedienen oder nach Verbindungsabbruch einen neuen Versuch ermöglichen, sind folgende Optionen wichtig:

  • reuseaddr: Port kann sofort neu genutzt werden, auch wenn vorher noch eine Verbindung offen war.
  • fork: Jeder eingehende Client bekommt einen eigenen socat-Subprozess (erlaubt parallele Verbindungen).
socat TCP-LISTEN:1234,bind=192.168.0.1,reuseaddr,fork TCP:localhost:8080

  • fork: Besonders wichtig, wenn du im Testbetrieb mehrere Zugriffe brauchst (z.B. Browser-Reloads oder mehrere Nutzer im LAN).
  • reuseaddr: Hilft, wenn Verbindungen "hängen" und der Port sonst blockiert bleibt.

5. Verbindungen nach Abbruch automatisch neu aufbauen

Mit der Option persist kann socat als Client nach einem Verbindungsabbruch immer wieder neue Versuche starten.
Achtung: persist macht nur auf der Client-Seite Sinn (also dort, wo socat aktiv eine Verbindung aufbaut).

socat -d -d TCP:192.168.0.1:443,persist STDOUT

  • -d -d: Gibt ausführliche Debug-Ausgaben (optional für Fehlersuche).
  • persist: Baut nach Verbindungsverlust immer wieder automatisch neu auf.
  • STDOUT: Gibt empfangene Daten auf der Konsole aus (nur als Beispiel, du kannst auch an einen Port oder eine Datei weiterleiten).

Tipp: Für Server-Seite (z.B. Port-Weiterleitung im LAN) reicht meist fork und reuseaddr.

6. Socat als temporärer SSL-"Proxy": Alte und neue Zertifikate kombinieren

Manchmal muss ein Client oder Server noch altes SSL/TLS (z.B. TLS 1.0, TLS 1.1) sprechen, während moderne Browser das nicht mehr unterstützen.
Hier kann socat als temporärer "SSL-Terminator" genutzt werden, der alte Verbindungen entgegennimmt und an einen Zielport mit neuem Zertifikat (oder unverschlüsselt) weiterleitet – oder umgekehrt.

6.1. Selbsterstelltes Zertifikat für socat (schnell & einfach)

Falls du kein Zertifikat zur Hand hast, kannst du mit openssl schnell ein selbstsigniertes Zertifikat erstellen:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost"

  • key.pem: Privater Schlüssel
  • cert.pem: Öffentliches Zertifikat
  • -nodes: Ohne Passwort (praktisch für temporäre Tests)
  • -subj: Setzt den Common Name im Zertifikat (z.B. für "localhost")

6.2. Beispiel: Altes SSL abfangen & intern als Klartext oder modernes SSL weiterleiten

Fall: Alter Client (z.B. ein Embedded-Gerät oder Legacy-Software) kann nur TLS 1.0, aber dein Server oder Browser will mindestens TLS 1.2.
socat nimmt die alte Verbindung entgegen und gibt sie intern weiter.

socat openssl-listen:443,bind=192.168.0.1,reuseaddr,cert=cert.pem,key=key.pem,method=TLS1 TCP:localhost:8080

  • openssl-listen:443: Lauscht mit SSL/TLS auf Port 443
  • bind=192.168.0.1: Hört nur auf dieser IP
  • cert/key: Das eigene (Test-)Zertifikat
  • method=TLS1: Akzeptiert explizit TLS 1.0 (je nach Bedarf auch SSLv3 etc.)
  • TCP:localhost:8080: Gibt Daten an einen lokalen Server weiter (z.B. moderner Webserver auf Port 8080)

Ergebnis: Alte Geräte können sich mit veraltetem Protokoll verbinden, socat "übersetzt" und dein moderner Server/Browser bleibt sicher.

Achtung: Diese Methode ist unsicher und sollte nur im Ausnahme-/Testfall oder als kurzfristiger Workaround genutzt werden!

6.3. Beispiel: Verbindung zu altem Zielserver erzwingen (Client-Seite downgraden)

Fall: Dein System unterstützt nur noch moderne SSL/TLS-Versionen, aber der Zielserver ist alt.
Mit socat kannst du von Klartext oder modernem SSL auf alte Protokolle "downgraden".

socat TCP-LISTEN:1234,reuseaddr openssl-connect:192.168.0.10:443,method=TLS1

  • TCP-LISTEN:1234: Lauscht auf Port 1234 (beliebiger lokaler Port)
  • openssl-connect:192.168.0.10:443: Baut eine verschlüsselte Verbindung zum Zielserver auf (mit altem Protokoll TLS 1.0)
  • method=TLS1: Erzwingt altes Protokoll

Ergebnis: Neue Clients können sich lokal mit socat verbinden, dieser übernimmt die (unsichere) Verbindung zum alten Server.

7. Wichtige Hinweise und Grenzen

  • Sicherheit: Altes SSL/TLS ist unsicher. Nutze das wirklich nur, wenn es keine Alternative gibt!
  • Fehlerquellen: Achte auf Zertifikate, Port-Freigaben und ggf. Firewalleinstellungen.
  • Temporärer Einsatz: Socat eignet sich ideal als Schnellhilfe, für Produktivbetrieb aber unbedingt professionelle Tools verwenden!
  • Beende socat nach dem Einsatz mit Strg+C oder durch Schließen des Terminalfensters.

8. Weitere Beispiele & Ressourcen