Kategorien
How To

Nightscout ins Internet bringen

Achtung: Diese Anleitung ist (bisher) nur für MyFritz von AVM (für Fritz!Boxen) gedacht, einige Schritte sind jedoch analog zur Einrichtung von DynDNS.

Voraussetzungen

  • Du hast Nightscout auf Port 1337 auf einem Ubuntu Server laufen (Siehe zum Beispiel: Nightscout auf einem RasPi installieren)
  • Du hast einen Router (Fritz!Box ist ganz cool fürs erste notwendig, andere gehen i.d.R auch)
  • Du hast eine Verbindung zum Internet

Plan und gewünschtes Ergebnis

Unser Ergebnis ist folgendes: wir haben 2 Freigaben zu unserem Raspberry Pi bzw. Nightscout Server via MyFritz: Port 80 und 443. Die Freigaben brauchen wir, damit wir von außerhalb unseres Netzwerkes Zugriff auf die Nightscout-Instanz bekommen. Mit Nightscouts Authentifizierung via Token bekommen auch nur wir Zugang zu unseren Daten, denn maximale Sicherheit ist beim Serverbetrieb im Internet Prio 0

Auf dem RasPi läuft ein Reverse Proxy (nginx) der auf Port 80 und 443 hört und sich zusammen mit dem Certbot um SSL kümmert. Der Reverse Proxy leitet dann die Requests von außen intern an Port 1337 (Port unserer Nightscout Instanz) weiter

Port 443 brauchen wir deswegen, weil wir natürlich SSL für die Verbindung zum Nightscout-Server aus dem Internet nutzen wollen. SSL ist aus gutem Grund (Edward Snowden sei Dank) inzwischen bei allen professionellen Webservern der Standard und sorgt dafür, dass unsere Daten immer verschlüsselt übertragen werden und damit nicht auf dem Transportweg durch das Internetz mitgelesen werden können.

Was ist ein Reverse Proxy?

Ein Reverse Proxy ist ein stück Software, welches Anfragen empfängt, je nach Konfiguration anpasst und dann an einen Server weiterleitet.

Dieses Anpassen ist bei uns wichtig, damit das SSL Gewusel funktioniert

Schritt 1: MyFritz einrichten

Da ich das Rad nicht neu erfinden will und muss kann für den ersten Schritt folgende Anleitung von AVM verwendet werden:

https://avm.de/service/myfritz/faqs/myfritz-konto-erstellen-und-in-fritzbox-einrichten/

Am Ende sollte deine Fritz!Box den MyFritz Account “installiert” haben

Unter Internet/MyFritz-Konto sieht man dann ein grünes Licht Ihre Fritzbox ist bei MyFritz angemeldet und es erscheint die MyFritz-Adresse im Format xxxxxxxxxxxxx.myfritz.net. Die lange Zeichenkette wird individuell von AVM ausgewürfelt und kann leider nicht geändert werden. Wem das nicht passt, der muss auf einen anderen DynDNS Dienst ausweichen. Diese Dienstleistung war früher hinter jeder Ecke kostenlos zu bekommen heutzutage muss man ein wenig im Internet graben, damit man sowas kostenlos findet. Gibt man ein paar Euros kann man sich den Dienstleister sogar aussuchen. Die Anbindung des RasPi und mit dem Nightscout-Server und DynDNS-Services beschreiben wir hier demnächst vielleicht noch genauer aber als erste Anlaufstelle dient der DynDNS-Dienstleister deines Vertrauens – der hat nämlich dafür immer eine Anleitung parat

Schritt 2: Freigaben erstellen

Zunächst gehst du bei deiner Fritz!Box Oberfläche zu Internet > Freigaben > Portfreigaben

Danach klickst du den Button „Gerät für Freigaben hinzufügen“ (meist ganz rechts unten). Es sollte sich jetzt ein Fenster öffnen

Unter Gerät suchst du nun deinen Server heraus, dieser heißt im Normalfall ubuntu oder raspberry

Relativ weit unten rechts kommt dann ein Knopf auf dem „Neue Freigabe“ steht, diesen würde ich an deiner Stelle jetzt klicken.

Jetzt sollte sich ein kleines aber feines Fenster geöffnet haben, dort aktivierst du die Option „MyFRITZ!-Freigabe“ (nicht „Portfreigabe“) und wählst als Anwendung „HTTP-Server“ aus, „Verzeichnis (optional)“ musst du leer lassen

Dann kannst du auch schon auf „OK“ klicken (das kleine Fenster schließt sich jetzt (hoffentlich)

Zur Feier des Tages machen wir jetzt fast das gleiche nochmal (ab “Relativ weit unten rechts …”) nur wählen wir anstatt “HTTP-Server” “HTTPS-Server” aus

Jetzt solltest du in der “Freigaben”-Tabelle 2 Freigaben mit grüner Ampel sehen – mit HTTP auf Port 80 und HTTPS auf Port 443 (falls das 4 sind ist das auch okay, liegt an IPv6). Es dauert ein paar Sekunden bis die Ampeln grün sind – einfach kurz warten und auf Aktualisieren klicken, und dann haben wir wieder freie Fahrt voraus

Zuletzt klickst du auf “OK” rechts unten, danach öffnet sich eine andere Seite, dort klickst du auf “Übernehmen” (so wie immer rechts unten)

Schritt 3: Wie ist meine Domain??

Das ist eine gute Frage, die du dir da gerade stellst

Diese Information brauchen wir nämlich im nächsten Schritt

Um das herauszufinden, gehst du wieder unter Internet > Freigaben > Portfreigaben neben deinem Raspberry Pi auf den kleinen Stift. Jetzt siehst du in der “Freigaben” Tabelle ganz unten die zwei (oder vier) Freigaben, bei einer der beiden (oder der vier) klickst du auf den Stift. In dem geöffneten Fenster siehst du ein Feld in das du nicht tippen kannst mit der Beschriftung “MyFRITZ!-Adresse”. Dort drinnen siehst du nun eine Zeichenkette im Format http<s oder kein s>://<raspiname>.<irgendein-kryptischer-code>.myfritz.net:<443 oder 80>

Deine Domain (die du bald brauchst und daher rauskopierst, oder du bist ein Genie und kannst es Dir im Kopf merken) ist dann <raspiname>.<irgendein-kryptischer-code>.myfritz.net

So schaut ein konkretes Beispiel aus: http://ubuntu-server-superraspi[.](<http://raspi3b-ubuntu-server.rgw4a44gkaoqp4el.myfritz.net/>)123xyz123xyz123x.myfritz.net:80

… und die alles entscheidende Domain wir wir daraus brauchen ist in diesem Beispiel: ubuntu-server-superraspi.123xyz123xyz123x.myfritz.net

Schritt 4: Reverse Proxy!!!

So weit sind wir schon? Krass!

Zunächst installieren wir den im Internet-Kampfalltag bewährten Reverse Proxy  nginx auf dem mit SSH eingeloggten RasPi mit dem Befehl: (Passwort eingeben nicht vergessen)

sudo apt install nginx -y

Die Aktion dauert locker viele Minuten in denen keine Windows-Sanduhren sondern viel spannendere Text-Ausgaben den Fortschritt vermelden. In der Wartezeit sagen die Genies unter uns die oben gemerkte Domain noch ein paarmal laut auf damit sie gleich zum Einsatz kommen kann.

Denn danach öffnen wir die Datei /etc/nginx/sites-available/default mit (z.B.) nano:

sudo nano /etc/nginx/sites-available/default

Hier löschst du erstmal (mit mehrfachem Druck auf Ctrl+K) alles was du siehst und fügst folgendes ein: (example.commit deiner erwähnten Domain ersetzen, das Semikolon am Ende bleibt)

server {
    listen 80;

    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:1337;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Den Spaß speicherst du dann wie gewohnt mit ctrl+O, Enter und ctrl+X

Danach starten wir nginx mit sudo service nginx restart neu (Falls das funktioniert hat wird absolut gar nichts ausgegeben)

Schritt 5: Kurzer Test

Zum testen kannst du jetzt mal in deinem Browser http://<meine-domain>/ eingeben. Du solltest jetzt Nightscout sehen. Wenn das klappt, dann hast Du bis hier alles richtig gemacht und Deine Nightscout-Instanz ist jetzt von überall aus dem Internet erreichbar und dank MyFritz auch immer unter der gleichen (wenn auch etwas kryptischen) Adresse, egal ob heute oder morgen mit anderer IP-Adresse. Du siehst auch, dass der Nightscout-Server jetzt ohne den Port 1337 in der Adresse erreichbar ist – das hat der Reverse Proxy nginx hingezaubert, denn der lauscht auf Port 80 (der Standard-Port) und reicht dann die Anfrage an den Nightscout-Server der lokal auf dem Raspi immer noch auf Port 1337 (und nicht 80) hört weiter. Der Proxy reicht also durch – und zwar in beide Richtungen und sorgt nebenbei dafür, dass keine bösen Pakete Deinen Nightscout-Instanz oder sonstige Dienste auf dem Raspi-Ubuntu-Server erreichen. Jetzt fehlt nur noch der aller-letzte Schritt: Der Datenaustausch muss noch verschlüsselt werden damit weder Mark Zuckerberg noch KimJongUn beim Durchreichen der Daten durch deren Server mitlesen können. Wer damit kein Problem hat der kann sich das auch sparen aber muss sich dann auch ein Schild mit der Aufschrift «Mit ist alles egal» auf die Stirn kleben. Wer was auf sich hält, der macht hier weiter

Schritt 6: Reverse Proxy (nochmal): Certbot & Let’s Encrypt

Für die administration von den SSL-Zertifikaten verwenden wir den Certbot – der holt nämlich die kostenlosen und bewährten SSL-Zertifikate von Let’s Encrypt vollautomatisch und sorgt auch dafür, daß die Dinger regelmäßig aktualisiert werden (weil sonst laufen die sicherheitsbedingt irgendwann aus, nämlich momentan immer nach 90 Tagen). Wer näheres über Let’s Encrypt wissen will was und wer dahintersteckt, dem sei https://en.wikipedia.org/wiki/Let’s_Encrypt zur Lektüre empfohlen

Zusammengefasste Installation:

Schritt 6.1: Snapd installieren (falls noch nicht installiert, einfach machen falls unsicher)

sudo apt update &&
sudo apt install snapd

Und Snapd Core installieren

sudo snap install core &&
sudo snap refresh core

Schritt 6.2: Certbot installieren

sudo snap install --classic certbot && 
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Schritt 6.3: Certbot installiert

Juhu!

Weiter gehts

Jetzt überlassen wir die SSL magie dem certbot, dafür führen wir jetzt sudo certbot --nginx aus.

Als erstes musst du deine E-Mail-Adresse angeben, das musst du, da falls du doofe Sachen machst die dich anschreiben können oder falls dein Zertifikat ausläuft.

Dann musst du die “Terms of service” akzeptieren. Falls du das nicht willst ist die Anleitung hier zu ende, falls schon drücke y.

Danach kommt eine sehr kleine Tabelle, in der deine MyFritz Domain stehen sollte. Falls ja kannst du Enter drücken.

Danach wird der certbot versuchen eine Verbindung zu deinem Server herzustellen um zu überprüfen, dass du die Domain besitzt.

Dann erstellt er den privaten und öffentlichen Schlüssel und das SSL-Zertifikat, lässt dieses Signieren und lädt diese signierte Kopie dann herunter, hier wird also die Magie eingeschaltet, die verschlüsselten HTTPS-Verkehr mit deinem Nightscout-Server auf die Straße bringt. Das nutzt heute die halbe Welt und jetzt auch Du.

Zuletzt kannst du noch nginx neu starten: sudo service nginx restart

Schritt 7: Testen

Du kannst jetzt in deinem Lieblingsbrowser https://<meine-domain>/ tippen und auf das berüchtigte kleine Schloss hoffen und mal draufklicken um zu bestätigen, dass das Zertifikat sicher ist

Schritt 8: Feiern

Hab “spaß” mit deiner neuen Nightscout Instanz im Internetz!