moziloCMS Logo
Spring Control Das Spring-Management System

Der neue Proxy

Ab der Client-Version 1.3 wird ein neuer Proxy benötigt. Es hat sich einiges geändert. So wird nicht mehr MongoDB als Datenbank verwendet, sondern die Simple-Database, eine von mir entwickelte Datenbank. Die Anmeldung wurde vereinfacht und die Installation auch.
Diese Anleitung ist im entstehen, sie ist also noch fehlerhaft und unvollständig.


Die Installation des neuen Proxy

Voraussetzung: Ein 64-Bit-Linux oder Windows. Da ich selbst kein Windows habe, kann ich nur die Linux-Installation genau beschreiben. Da der Prozess jedoch sehr einfach ist, sollte er unter Windows sehr ähnlich ablaufen.

Die Portweiterleitung

Damit die Kommunikation von außen (also aus dem Internet) zu Deinem Proxy-Server zu Hause funktioniert, muss Dein Router wissen, welches Gerät die Datenpakete erhalten soll. Das erreicht man mit einer Portweiterleitung.
Dein Router bekommt eine Anfrage für Port 6443. Mit der Weiterleitung sagst Du ihm: "Schicke alle Pakete für diesen Port bitte an den Computer mit der IP-Adresse 192.168.1.100 (wenn der Proxy auf dieser ip Installiert ist)".

Portweiterleitung am Beispiel einer Fritz!Box:

  • Gehe in das Webinterface deiner Fritz!Box (meist fritz.box oder 192.168.178.1).
  •   Navigiere zu Internet -> Freigaben -> Portfreigaben -> Gerät für Freigaben hinzufügen.
  • Wähle den Proxy-Server aus der Liste der Geräte aus oder trage seine IP-Adresse manuell ein.
  • Wähle bei Protokoll die Option TCP (und ggf. zusätzlich UDP).
  • Trage bei Von Port und Bis Port die benötigte Portnummer ein (z.B. 6443).
  • Speichere die Einstellung.

Wichtig für LetsEncrypt: Für die Einrichtung muß  vorübergehend auch Port 80 (HTTP) auf Deinen Server weitergeleitet werden. Diesen kannst du nach erfolgreicher Zertifikats-Einrichtung wieder schließen, wenn du möchtest.

Wie finde ich meine IP-Adresse?
Auf deinem Proxy-Server gibst du in der Konsole den Befehl ip address ein. Suche nach der Zeile, die mit inet beginnt und deine lokale IP (z.B. 192.168.xxx.xxx) anzeigt.

DynDNS - Deine Adresse im Internet

Die meisten Internet-Anschlüsse haben eine sich ändernde (dynamische) IP-Adresse. Damit du deinen Server trotzdem immer unter der gleichen Adresse erreichst, brauchst du einen DynDNS-Dienst.

Die einfache Lösung (für Fritz!Box-Nutzer):
Jede Fritz!Box hat einen kostenlosen DynDNS-Dienst integriert. Du findest deine Adresse unter:
Internet -> Freigaben -> FritzBox Dienste.
Dort steht der persönlicher Name der Box, z.B. wirreszeuch.myfritz.net. Diesen Namen kannst Du verwenden.

Alternative (für alle anderen Router):
Falls der Router keinen eigenen Dienst anbietet, musst man sich bei einem DynDNS-Anbieter (z.B. noip.com oder duckdns.org) registrieren. Dort bekommst man einen Domainnamen (z.B. meinserver.ddns.net). Diesen Namen und die Zugangsdaten kann man dann meist in Router eintragen, damit er die Änderungen deiner IP-Adresse automatisch an den Anbieter meldet. Bei mir hat das nie funktionirt. ich lasse alle 5min ein Script auf dem Proxy laufen, welches die Adresse abgleicht. Dies ist auch bei IPV6 die einzige Möglichkeit. Bei Fragen: Das Forum hilft gerne, und ich auch.

Installation und Einrichtung des Webservers nginx

Je nach der Linux-Distribution installierst wird nginx mit einem der folgenden Befehle installiert:
  • Ubuntu/Debian: sudo apt update && sudo apt install nginx
  • Arch Linux: sudo pacman -S nginx

Grundkonfiguration prüfen:
  • Wechsle in das Konfigurationsverzeichnis: cd /etc/nginx
  • Prüfe, ob der Ordner sites-avaiable und sites-enabled existiert: ls -l
  • Falls nicht, lege ihn an: sudo mkdir sites-enabled und /oder sudo mkdir sites-avaiable

Die wichtigste Konfiguration: nginx als Reverse-Proxy
Jetzt musst Du nginx beibringen, dass er den Datenverkehr für deine Domain an deine Proxy-Api weiterleiten soll. Das nennt man "Reverse-Proxy".

Erstelle eine neue Konfigurationsdatei (z.B. sudo nano /etc/nginx/sites-available/mein_proxy). Ersetze meinedomain.dyn.dns überall mit deinem eigenen DynDNS-Namen und 6443 mit dem Port, auf dem deine Proxy-Api läuft.

Hier nun eine Konfiguratinsdatei für nginx

server {

    listen 6443 ssl;
    listen [::]:6443 ssl;
    server_name springcontrol.ydns.eu; # Ersetze dies durch deinen Domainnamen
    
    #Das ist die Komprimierung beim Senden. Wenn nicht komprimiert werden soll einfach weglassen
     gzip on;
    gzip_types application/json text/plain text/css application/javascript;
    gzip_comp_level 5;
    gzip_min_length 1024;
    gzip_vary on;


    #Diese Zeilen nicht einfügen. Sie werden automatsich von ertbot eingefügt
    ssl_certificate /etc/letsencrypt/live/springcontrol.ydns.eu/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/springcontrol.ydns.eu/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    #hier ende der eingefügten Zeilen

    ssl_session_cache shared:SSL:10m;

    # Proxy-Einstellungen für den Dart-Server
    location / {
        proxy_pass http://127.0.0.1:8080; # Leitet alle Anfragen an deinen Dart-Server auf Port 8080 weiter
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off; # Wichtig, um relative Weiterleitungen korrekt zu handhaben

        # Optional: Timeout-Einstellungen für den Proxy
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

}

    Konfiguration aktivieren:
    Erstelle einen symbolischen Link, um die Konfiguration zu aktivieren:
    sudo ln -s /etc/nginx/sites-available/mein_proxy /etc/nginx/sites-enabled/

    Testen und Neustarten:
    Teste zunächst, ob die Konfiguration in Ordnung ist: sudo nginx -t
    Wenn alles ok ist, starte nginx neu: sudo systemctl restart nginx


Es muß auch noch was in die nginx.conf eingetragen werden, ich weiß im moment nur nicht was. Das folgt noch.

Das LetsEncrypt-Zertifikat mit Certbot

Jetzt holen wir uns das kostenlose SSL-Zertifikat für eine verschlüsselte Verbindung.

    Certbot installieren:
    Der einfachste Weg ist die Installation mit snapd.
  
    sudo apt update
    sudo apt install snapd
    sudo snap install --classic certbot
    sudo ln -s /snap/bin/certbot /usr/bin/certbot

    sudo apt update
    sudo apt install snapd
    sudo snap install --classic certbot
    sudo ln -s /snap/bin/certbot /usr/bin/certbot

Zertifikat automatisch beziehen und konfigurieren:
Stelle sicher, dass die Portweiterleitung für Port 80 aktiv ist und dein DynDNS-Name von außen erreichbar ist!
Nun muß erstmal der nginx wieder gestoppt werden:

    sudo systemctl stop nginx
    
Führe dann diesenBefehl aus (vergiss nicht, deinen Domainnamen einzutragen):

    sudo certbot certonly --standalone -d meinedomain.dyn.dns

Certbot führt Dich durch den Prozess, fragt nach deiner E-Mail (für Warnungen und Erinnerungen) und akzeptiert die Nutzungsbedingungen. Danach wird automatisch ein Zertifikat erstellt und deine nginx-Konfiguration angepasst, um es zu verwenden.

Automatische Verlängerung einrichten:
LetsEncrypt-Zertifikate laufen nach 90 Tagen ab. Certbot kümmert sich automatisch um die Verlängerung. Teste die automatische Verlängerung mit:

sudo certbot renew --dry-run

Wenn dieser Befehl fehlerfrei durchläuft, ist alles eingerichtet.