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