Skip to main content

SoCat - Fast start

1. Was ist socat?

Socat steht für (SOcket CAT und) ist ein extremsehr vielseitigesflexibles Kommandozeilen-Tool fürzum dieWeiterleiten Datenübertragungvon Datenströmen zwischen zweiNetzwerk-Ports, Endpunkten.
EsDateien, funktioniertPipes, ähnlichUNIX wieSockets netcatoder ("nc"), ist aber deutlich mächtiger und flexibler.
Typische Anwendungsfälle:SSL/TLS-Verbindungen.

  • PortweiterleitungTemporäres (lokalPort-Forwarding zwischen unterschiedlichen Netzen oder übers Netzwerk)Interfaces
  • ProtokollübersetzungDebugging & Überbrückung von Netzwerkrestriktionen
  • Brücke zwischen alten und neuen Protokollen (z.B. vonaltes TCPTLS zu UDPmodernem 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)TLS)

Socat sollte wegen seiner Flexibilität aber nicht als Dauerlösung genutzt werden!Tipp: Für produktiveproduktiven SetupsDauerbetrieb sind spezialisierteReverse-Proxys, Reverse-Proxys wie nginx, stunnelVPNs oder HAProxyFirewalls oftdie besserbessere geeignet.Wahl – socat ist ideal als temporärer Workaround!

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: AktualisiertPaketquellen die Paketlisten.aktualisieren.
  • apt-get install socat: InstalliertSocat das socat-Paket.installieren.

3. GrundlegendeEinfaches Nutzung:Port-Forwarding: Ports192.168.0.1 und Daten weiterleitenlocalhost

MitBeispiel: socatDu lassen sich Daten von einem Port anmöchtest einen anderenDienst weiterleitenauf 192.168.0.1:8080 entwederlokal lokal,als überlocalhost:8000 das Netzwerk oder zwischen verschiedenen Protokollen.bereitstellen.

socat TCP-LISTEN:12348000,bind=localhost,reuseaddr,fork TCP:localhost:192.168.0.1:8080

  • TCP-LISTEN:12348000,bind=localhost: WartetLauscht auf eingehende Verbindungenlokal auf Port 12348000 (nur auf allen lokalen Interfaces)localhost).
  • reuseaddr,fork: Mehrere/kurze Verbindungen, sofortige Wiederverwendung.
  • TCP:localhost:192.168.0.1:8080: LeitetWeiterleitung diezum eingehenden Daten an Port 8080Dienst auf localhost192.168.0.1:8080 weiter..

Nutze

4. diesMehrere z.B.,Ports/Services umvon 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 zu localhost weiterleiten

socat TCP-LISTEN:8001,bind=localhost,reuseaddr,fork TCP:localhost:8080

192.168.0.1:8081

4.5. Optionen erklärt

  • fork: Parallele 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:

      möglich
    • reuseaddr: Port kann sofort neuwieder genutzt werden, auch wenn vorher noch eine Verbindung offen war.benutzbar
    • forkbind=localhost: JederLauscht eingehendenur Clientauf bekommt einen eigenen socat-Subprozesslocalhost (erlaubtkein paralleleLAN-Zugriff 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.möglich)

    5.6. VerbindungenVerbindung nach Abbruch automatisch neuwiederherstellen aufbauen(persist)

    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,8080,persist STDOUT
    
    
    • persist: Baut Verbindung bei Abbruch erneut auf
    • -d -d: Debug-Ausgabe
    • STDOUT: Gibt ausführliche Debug-Ausgaben (optional für Fehlersuche).
    • persist: Baut nach Verbindungsverlust immer wieder automatisch neu auf.
    • STDOUT: Gibt empfangene Daten aufim der KonsoleTerminal aus (nur als Beispiel, du kannst auch an einen Port oder eine Datei weiterleiten).Beispiel)

    Tipp:

    7. FürSSL/TLS: Server-SeiteVerbindung (z.B.von Port-Weiterleitungaltem im192.168.0.1-SSL LAN)auf reichtlokalen meist fork und reuseaddr.

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

    ManchmalBeispiel: mussDienst einauf Client192.168.0.1:8443 odernutzt Server noch altes SSL/TLS (z.B.nur 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 keinmöchtest Zertifikatlokal zurlocalhost:8000 Hand hast, kannst du mit openssl schnell ein selbstsigniertes Zertifikat erstellen:bereitstellen.

    openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost"
    
    
      socat 
    • key.pem:openssl-connect:192.168.0.1:8443,method=TLS1 PrivaterTCP-LISTEN:8000,bind=localhost,reuseaddr,fork
    • Schlüssel

      8.
    • cert.pem:Umgekehrter ÖffentlichesWeg: Zertifikat
    • Lokaler
    • -nodes:Dienst Ohneauf Passwortlocalhost (praktischnach für temporäre Tests)
    • -subj: Setzt den Common Name192.168.0.1 im Zertifikatanderen (z.B.Netz 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.

    bereitstellen

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

    9. Hinweise & Tipps

    • openssl-listen:443:Der 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 lokalRechner mit socat verbinden,braucht dieserZugriff übernimmtauf diebeide (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!IPs/Netze.
    • Fehlerquellen: Achte auf Zertifikate, Port-Freigaben und ggf. Firewalleinstellungen.
    • Temporärer Einsatz: SocatNach eignet sich ideal als Schnellhilfe, für Produktivbetrieb aber unbedingt professionelle Tools verwenden!
    • Beende socat nach dem Einsatz mitNutzung Strg+C oder durchTerminal Schließenschließen.
    • des
    • Für Terminalfensters.längere Nutzung: Reverse-Proxy, VPN oder Firewall bevorzugen.
    • Mit -d -d bekommst du hilfreiche Debug-Ausgaben.

    8. Weitere Beispiele &10. Ressourcen