# SoCat - Fast start

## 1. Was ist socat?

**Socat** (*SOcket CAT*) ist ein sehr flexibles Kommandozeilen-Tool zum Weiterleiten von Datenströmen zwischen Netzwerk-Ports, Dateien, Pipes, UNIX Sockets oder SSL/TLS-Verbindungen.

- Temporäres Port-Forwarding zwischen unterschiedlichen Netzen oder Interfaces
- Debugging &amp; Überbrückung von Netzwerkrestriktionen
- Brücke zwischen alten und neuen Protokollen (z.B. altes TLS zu modernem TLS)

**Tipp:** Für produktiven Dauerbetrieb sind Reverse-Proxys, VPNs oder Firewalls die bessere Wahl – socat ist ideal als temporärer Workaround!

## 2. Installation unter Debian/Linux

```
apt-get update
apt-get install socat
```

- `apt-get update`: Paketquellen aktualisieren.
- `apt-get install socat`: Socat installieren.

## 3. Einfaches Port-Forwarding: 192.168.0.1 → localhost

Beispiel: Du möchtest einen Dienst auf `192.168.0.1:8080` lokal als `localhost:8000` bereitstellen.

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

- **TCP-LISTEN:8000,bind=localhost**: Lauscht lokal auf Port 8000 (**nur** auf localhost).
- **reuseaddr,fork**: Mehrere/kurze Verbindungen, sofortige Wiederverwendung.
- **TCP:192.168.0.1:8080**: Weiterleitung zum Dienst auf `192.168.0.1:8080`.

## 4. Mehrere Ports/Services von 192.168.0.1 zu localhost weiterleiten

```
socat TCP-LISTEN:8001,bind=localhost,reuseaddr,fork TCP:192.168.0.1:8081
```

## 5. Optionen erklärt

- **fork**: Parallele Verbindungen möglich
- **reuseaddr**: Port sofort wieder benutzbar
- **bind=localhost**: Lauscht nur auf localhost (kein LAN-Zugriff möglich)

## 6. Verbindung nach Abbruch automatisch wiederherstellen (persist)

```
socat -d -d TCP:192.168.0.1:8080,persist STDOUT
```

- **persist**: Baut Verbindung bei Abbruch erneut auf
- **-d -d**: Debug-Ausgabe
- **STDOUT**: Gibt Daten im Terminal aus (Beispiel)

## 7. SSL/TLS: Verbindung von altem 192.168.0.1-SSL auf lokalen Dienst

Beispiel: Dienst auf `192.168.0.1:8443` nutzt nur TLS 1.0, du möchtest lokal `localhost:8000` bereitstellen.

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

```
socat openssl-connect:192.168.0.1:8443,method=TLS1 TCP-LISTEN:8000,bind=localhost,reuseaddr,fork
```

## 8. Umgekehrter Weg: Lokaler Dienst auf localhost nach 192.168.0.1 im anderen Netz bereitstellen

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

## 9. Hinweise &amp; Tipps

- Der Rechner mit socat braucht Zugriff auf beide IPs/Netze.
- Temporärer Einsatz: Nach Nutzung `Strg+C` oder Terminal schließen.
- Für längere Nutzung: Reverse-Proxy, VPN oder Firewall bevorzugen.
- Mit `-d -d` bekommst du hilfreiche Debug-Ausgaben.

## 10. Ressourcen

- [Offizielle Socat-Dokumentation](https://www.dest-unreach.org/socat/doc/socat.html)
- [Ubuntuusers Socat-Artikel (deutsch)](https://wiki.ubuntuusers.de/socat/)