|
| 1 | +--- |
| 2 | +title: Ports mit socat als Proxy weiterleiten |
| 3 | +author: |
| 4 | + name: Peter Müller |
| 5 | + link: https://crycode.de |
| 6 | +banner: banner.webp |
| 7 | +date: 2025-07-21 |
| 8 | +categories: |
| 9 | + - [Linux] |
| 10 | + - [Software] |
| 11 | +tags: |
| 12 | + - Portweiterleitung |
| 13 | + - socat |
| 14 | + - Proxy |
| 15 | +--- |
| 16 | + |
| 17 | +Mit dem Tool `socat` ("SOcket CAT") lassen sich Netzwerkverbindungen flexibel weiterleiten und als Proxy nutzen. Das ist besonders praktisch, wenn Dienste auf anderen Hosts oder Ports erreichbar gemacht werden sollen, ohne die eigentliche Anwendung zu verändern. |
| 18 | + |
| 19 | +<!-- more --> |
| 20 | +<!-- toc --> |
| 21 | + |
| 22 | +## Warum braucht man das? |
| 23 | + |
| 24 | +* **Netzwerkdienste zugänglich machen:** Dienste, die nur lokal oder in einem privaten Netz laufen, können so einfach erreichbar gemacht werden. |
| 25 | +* **Port-Konflikte umgehen:** Wenn ein Port bereits belegt ist, kann ein anderer Port als Proxy genutzt werden. |
| 26 | +* **Protokoll- oder Port-Übersetzung:** Ermöglicht die Weiterleitung zwischen verschiedenen Protokollen oder Ports. |
| 27 | + |
| 28 | +`socat` ist ein sehr mächtiges Werkzeug für Netzwerkadministratoren und Entwickler, um flexibel mit Ports und Verbindungen zu arbeiten. |
| 29 | + |
| 30 | +> [!NOTE] |
| 31 | +> Für einen produktiven Einsatz sollte sofern möglich immer auf eine dedizierte Proxy-Lösung wie `nginx` oder `haproxy` zurückgegriffen werden. `socat` ist eher für einfache, temporäre Lösungen gedacht. |
| 32 | +
|
| 33 | +## TCP-Port weiterleiten |
| 34 | + |
| 35 | +Um beispielsweise alle eingehenden Verbindungen auf Port 8080 lokal an einen anderen Server (z.B. 192.168.1.100:80) weiterzuleiten: |
| 36 | + |
| 37 | +```sh TCP-Portweiterleitung mit socat |
| 38 | +socat TCP-LISTEN:8080,reuseaddr,fork TCP:192.168.1.100:80 |
| 39 | +``` |
| 40 | + |
| 41 | +* `TCP-LISTEN:8080`: Lauscht auf Port 8080 (lokal) |
| 42 | +* `reuseaddr,fork`: Erlaubt mehrfaches Binden an den Port und parallele Verbindungen |
| 43 | +* `TCP:192.168.1.100:80`: Zieladresse und -port |
| 44 | + |
| 45 | +Im Normalfall wird `socat` weiterlaufen, bis es manuell gestoppt wird. Ausgaben sind dabei in der Regel nicht zu sehen. |
| 46 | + |
| 47 | +Mit `Strg+C` kann der Prozess beendet werden. |
| 48 | + |
| 49 | +## UDP-Port weiterleiten |
| 50 | + |
| 51 | +Für UDP funktioniert es ähnlich, z.B. um Port 5353 weiterzuleiten: |
| 52 | + |
| 53 | +```sh UDP-Portweiterleitung mit socat |
| 54 | +socat UDP-LISTEN:5353,reuseaddr,fork UDP:192.168.1.100:5353 |
| 55 | +``` |
| 56 | + |
| 57 | +* `UDP-LISTEN:5353`: Lauscht auf Port 5353 (lokal) |
| 58 | +* `UDP:192.168.1.100:5353`: Zieladresse und -port |
| 59 | + |
| 60 | +## Permanenter Betrieb als SystemD-Service |
| 61 | + |
| 62 | +Möchte man `socat` dauerhaft im Hintergrund laufen lassen, kann man es als SystemD-Service einrichten. |
| 63 | + |
| 64 | +Dazu wird eine neue Service-Datei mit folgendem Inhalt erstellt: |
| 65 | + |
| 66 | +```sh SystemD Service für socat erstellen |
| 67 | +sudo nano /etc/systemd/system/socat-port-forward-8080.service |
| 68 | +``` |
| 69 | + |
| 70 | +```ini /etc/systemd/system/socat-port-forward-8080.service |
| 71 | +[Unit] |
| 72 | +Description=Socat Port Forwarding Service Port 8080 |
| 73 | +After=network.target |
| 74 | + |
| 75 | +[Service] |
| 76 | +ExecStart=/usr/bin/socat TCP-LISTEN:8080,reuseaddr,fork TCP:192.168.1.100:80 |
| 77 | +Restart=always |
| 78 | +RestartSec=3s |
| 79 | +User=nobody |
| 80 | +Group=nogroup |
| 81 | + |
| 82 | +[Install] |
| 83 | +WantedBy=multi-user.target |
| 84 | +``` |
| 85 | + |
| 86 | +Anschließend den Service aktivieren und starten: |
| 87 | + |
| 88 | +```sh Aktivieren und Starten des Services |
| 89 | +sudo systemctl daemon-reload |
| 90 | +sudo systemctl enable socat-port-forward-8080.service |
| 91 | +sudo systemctl start socat-port-forward-8080.service |
| 92 | +``` |
| 93 | + |
| 94 | +Nun läuft `socat` als Hintergrunddienst und leitet Port 8080 permanent weiter. |
| 95 | + |
| 96 | +## Alternativen |
| 97 | + |
| 98 | +Neben `socat` gibt es weitere Tools, die für Portweiterleitungen und Proxy-Funktionalitäten genutzt werden können: |
| 99 | + |
| 100 | +* **iptables / nftables** |
| 101 | + Ermöglichen auf Systemebene das Weiterleiten von Ports (Port-Forwarding) und Netzwerkpaketen. Besonders geeignet für permanente und performante Weiterleitungen. |
| 102 | +* **ssh (Port-Forwarding)** |
| 103 | + Mit `ssh -L` (lokal) oder `ssh -R` (remote) lassen sich Ports sicher über SSH-Tunnel weiterleiten. Praktisch für verschlüsselte Verbindungen und temporäre Weiterleitungen. |
| 104 | +* **nginx / haproxy** |
| 105 | + Leistungsfähige Proxy-Server, die für komplexe Weiterleitungen, Lastverteilung und Protokollumwandlung eingesetzt werden können. Besonders für produktive Umgebungen geeignet. |
| 106 | +* **rinetd** |
| 107 | + Einfache und ressourcensparende Lösung für TCP-Portweiterleitungen, ideal für minimalistische Setups. |
0 commit comments