Linux, lokale Portumleitung erstellen

Auf der Portweiterleitung öffnet sich die Fritz-Box Oberfläche.

Folgende Situation: Auf meinem Home-Server läuft Nextcloud bzw. ein Apache-Webserver. Portweiterleitung ist eingerichtet. Die externe Domain zeigt mit einem CNAME auf die Adresse der Fritzbox bzw. des Routers.

Das Problem: Portweiterleitung, Fritzbox meldet sich

Unterwegs klappt alles. Von extern kann ich mit „subdomain.domain.de“ drauf zugreifen. Nur im Heimnetzwerk erscheint die Benutzeroberfläche der Fritzbox. Natürlich kann ich die IP-Adresse im internen Netzwerk verwenden, aber z.B. für den Nextcloud-Client auf dem Notebook ist es blöd, weil ich dann intern eine andere Server-Adresse habe als extern.

Eine Möglichkeit ist den Apache-Server umzukonfigurieren, dass er nicht auf dem gleichen Port läuft, wie die Fritzbox. Wollte ich aber nicht, daher habe ich nach einer Möglichkeit gesucht einen lokalen Port umzuleiten. D.h. ich gebe im Beispiel Port 8443 über die Fritzbox frei und leite dies auf den Server weiter. Allerdings arbeitet der Server auf Port 443 (https).

Lokalen Port umleiten

Die Lösung ist „socat“, die Software erlaubt es einen lokalen Port auf einen anderen lokalen Port umzuleiten. Zuerst installieren wir die Software:

sudo apt update
sudo apt install socat

Anschließend leiten wir den Port 8443 auf 443 um:

socat tcp-listen:8443,reuseaddr,fork tcp:localhost:443

Soweit so gut, allerdings ist die Weiterleitung wieder weg, sobald der Befehl beendet wird. Wir können ein & am Ende notieren, dann wird ein Prozess gestartet, aber nur solange der Rechner nicht neu startet.

Systemd-Service erstellen

Um das Script nun zum Systemstart auszuführen, legen wir ein Script an. Es hat den folgenden Inhalt, wichtig, dass & am Ende.

#!/bin/bash
socat tcp-listen:8443,reuseaddr,fork tcp:localhost:443 &

Das Script können wir z.B. unter /root/socat.sh anlegen und anschließend ausführbar machen:

sudo vim /root/socat.sh
sudo chmod +x /root/socat.sh

Nun erstellen wir einen Service. Da legen wir eine neue Textdatei an:

sudo vim /etc/systemd/system/socat.service

Der Inhalt sieht so aus, ggf. anpassen:

[Unit]
Description=socat script

[Service]
ExecStart=/root/socat.sh
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Anschließend können wir den Service aktivieren:

sudo systemctl daemon-reload
sudo systemctl enable socat.service

Fertig! Nach dem Neustart steht der Dienst nun zur Verfügung. Falls nicht, dann können wir dies mit folgendem Befehl prüfen:

sudo systemctl status socat.service

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert