📊 Freifunk-Statusseite – Bedienungsanleitung

Diese Anleitung erklärt die Statusseite eines Freifunk-Offloaders beziehungsweise Gateways, alle verfügbaren Ansichten, den Zugangsschutz sowie die Einrichtung von DHCP, VNStat und der Internetüberwachung.

1. Überblick über alle Seiten

Die Statusseite ist über http://[dein-knoten]/index.php erreichbar. Ein Parameter hinter dem Fragezeichen öffnet die jeweilige Zusatzansicht.

AufrufBeschreibungZugang
index.phpStandardansicht mit Knoten-, System-, VPN- und B.A.T.M.A.N.-Informationenöffentlich
index.php?bekanntBekannte IPv4- und IPv6-Nachbarn (ARP/NDP)öffentlich
index.php?batctloB.A.T.M.A.N.-Originator-Tabelle mit TQ-Werten und Knotennamenöffentlich
index.php?batctlnDirekte B.A.T.M.A.N.-Nachbarnöffentlich
index.php?vnstatGrafischer Datenverkehr für vorhandene VPN-Schnittstellen vpn3 und tap0öffentlich
index.php?internetIPv4-/IPv6-Status und Verlauf über 24 Stunden, 30 Tage und 12 Monate; nur die Grafiken werden alle 60 Sekunden aktualisiertöffentlich
index.php?internetausfallListe der Zeiträume, in denen IPv4 und IPv6 gleichzeitig offline warenöffentlich
index.php?debugDebug-Ansicht des MAC-zu-Knoten-MappingsPasswort erforderlich
index.php?dhcpNetzwerkinformationen pro Schnittstelle, Gateways, DNS und NTPPasswort erforderlich
index.php?speedtestStartet einen Speedtest und zeigt das ErgebnisPasswort erforderlich
index.php?dhcpserverStatus und Leases von ISC-DHCP beziehungsweise Kea DHCPv4Passwort erforderlich
index.php?keadhcpEinzelansicht: Status und Leases von Kea DHCPv4Passwort erforderlich
index.php?iscdhcpEinzelansicht: Status und Leases von ISC-DHCPPasswort erforderlich
index.php?allKomplette System- und NetzwerkdiagnosePasswort erforderlich
Hinweis: Sobald ein geschützter Parameter zusammen mit einem öffentlichen Parameter aufgerufen wird, ist eine Anmeldung erforderlich.

2. Anmeldung und Abmeldung

Beim Aufruf einer geschützten Seite erscheint ein Anmeldeformular. Nach erfolgreicher Anmeldung gilt die Sitzung für alle geschützten Ansichten.

  1. Benutzernamen eingeben.
  2. Passwort eingeben.
  3. Anmelden anklicken.

Zum sicheren Abmelden /index.php?logout aufrufen. Einen sichtbaren Abmeldebutton gibt es auf der Statusseite nicht. Beim Abmelden werden Sitzung und Sitzungscookie gelöscht.

3. Passwörter verwalten

Falls das Programm noch fehlt:

apt update
apt install apache2-utils

Erste Passwortdatei anlegen

htpasswd -cB /etc/freifunk-status.htpasswd admin

Das Passwort wird anschließend verdeckt abgefragt. -c darf nur beim ersten Anlegen verwendet werden, weil es eine bestehende Datei überschreibt.

Passwort ändern oder weiteren Benutzer hinzufügen

htpasswd -B /etc/freifunk-status.htpasswd BENUTZERNAME
Sicherheit: Die interaktive Eingabe ist besser als -b, weil das Passwort dann nicht im Befehl und in der Shell-Historie steht.

4. Rechte der Passwortdatei

chown root:www-data /etc/freifunk-status.htpasswd
chmod 640 /etc/freifunk-status.htpasswd

5. ISC-DHCP und Kea prüfen

index.php?dhcpserver zeigt beide DHCP-Server gemeinsam. Mit index.php?keadhcp beziehungsweise index.php?iscdhcp werden Status, aktive Leases und die Lease-Tabelle nur für den ausgewählten Server angezeigt. Alle drei Ansichten sind passwortgeschützt.

Die Kea-Ansicht wertet zusätzlich IPv6 aus. Da IPv6 im Freifunknetz normalerweise über Router Advertisements (SLAAC) vergeben wird, zeigt sie bei vorhandenen Informationen die globalen IPv6-Adressen und Präfixe, IPv6-Routen, erkannte RA-Dienste sowie passende Konfigurationsdateien. DHCPv6-Leases erscheinen in einem getrennten Bereich und nur dann, wenn Kea DHCPv6 beziehungsweise eine lesbare Kea-DHCPv6-Lease-Datei vorhanden ist.

ISC-DHCP:

systemctl is-active isc-dhcp-server
systemctl status isc-dhcp-server

Kea DHCPv4 (je nach Paketname):

systemctl is-active kea-dhcp4
systemctl status kea-dhcp4

# Alternativer Dienstname:
systemctl is-active kea-dhcp4-server
systemctl status kea-dhcp4-server

Alle vorhandenen Kea-Dienste anzeigen:

systemctl list-unit-files | grep -i kea

Die Statusseite sucht Kea-Leases in /var/lib/kea/kea-leases4.csv und /var/lib/kea/dhcp4.leases. ISC-DHCP wird über /var/lib/dhcp/dhcpd.leases ausgewertet.

6. VNStat einrichten

VNStat installieren und starten:

apt update
apt install vnstat
systemctl enable --now vnstat

Prüfen, welche VPN-Schnittstellen momentan vorhanden sind:

ip link show vpn3
ip link show tap0

Nur vorhandene Schnittstellen zu VNStat hinzufügen:

vnstat --add -i vpn3
vnstat --add -i tap0
systemctl restart vnstat

Wenn eine der beiden Schnittstellen nicht existiert, wird der zugehörige vnstat --add-Befehl ausgelassen. Falls VNStat meldet, dass eine Schnittstelle bereits vorhanden ist, ist ebenfalls keine Korrektur nötig. In /etc/vnstat.conf sollten für die benötigten Zeiträume mindestens folgende Werte stehen:

5MinuteHours 2
HourlyDays 2
DailyDays 366

Danach:

systemctl restart vnstat
vnstat --dbiflist

Die VNStat-Ansicht prüft bei jedem Aufruf, ob vpn3 beziehungsweise tap0 als Linux-Netzwerkschnittstelle vorhanden ist. Diagramme werden ausschließlich für vorhandene Schnittstellen angezeigt. bat0 und br0 werden nicht mehr dargestellt.

Für jede vorhandene VPN-Schnittstelle erscheinen fünf Zeiträume: eine Stunde, 24 Stunden, 7 Tage, 31 Tage und 366 Tage. RX wird in Freifunk-Gelb #ffb400, TX in Freifunk-Magenta #dc0067 und die Schnittstellentrennung in Freifunk-Blau #009ee0 dargestellt.

Eine verlängerte Aufbewahrungszeit wirkt nur für zukünftige Messungen. Bereits gelöschte Tageswerte können nicht wiederhergestellt werden. VNStat benötigt keinen Cronjob, weil der Dienst vnstat die Daten selbst erfasst.

7. Internetüberwachung mit Python und JSON

index.php?internet und index.php?internetausfall lesen connectivity/status_history.json. Ein Python-Skript prüft IPv4 und IPv6 alle fünf Minuten und hält maximal 105.120 Messwerte vor. Das entspricht 365 Tagen.

Die Anleitung geht davon aus, dass index.php unter /var/www/html liegt. Bei einem anderen Webverzeichnis muss HISTORY_FILE im Skript angepasst werden.

Voraussetzungen installieren

sudo apt update
sudo apt install python3 iputils-ping cron -y

Datenverzeichnis anlegen

sudo mkdir -p /var/www/html/connectivity
sudo chown www-data:www-data /var/www/html/connectivity
sudo chmod 755 /var/www/html/connectivity

Python-Prüfskript installieren

Die mitgelieferte Datei check-inet.py nach /usr/local/bin kopieren:

sudo cp check-inet.py /usr/local/bin/check-inet.py
sudo chown root:root /usr/local/bin/check-inet.py
sudo chmod 755 /usr/local/bin/check-inet.py

Das Skript prüft jeweils zwei Ziele. IPv4 gilt als online, wenn 1.1.1.1 oder 8.8.8.8 antwortet. IPv6 gilt als online, wenn 2606:4700:4700::1111 oder 2001:4860:4860::8888 antwortet.

Es schützt die JSON-Datei mit einer Dateisperre und ersetzt sie erst nach vollständigem Schreiben. Dadurch liest die Webseite keine halb geschriebene Datei.

Einmal manuell testen

sudo -u www-data /usr/local/bin/check-inet.py
cat /var/www/html/connectivity/status_history.json

8. Notwendigen Cronjob eintragen

Die Cron-Tabelle des Benutzers www-data öffnen:

sudo crontab -u www-data -e

Folgende Zeile am Ende einfügen:

*/5 * * * * /usr/local/bin/check-inet.py 2>&1 | /usr/bin/logger -t check-inet

In Nano mit Strg+O speichern, mit Enter bestätigen und mit Strg+X beenden. Ein Neustart von Cron ist nach dem Eintragen nicht erforderlich.

Dienst und Cronjob kontrollieren:

sudo systemctl enable --now cron
systemctl is-active cron
sudo crontab -u www-data -l

Nach mindestens fünf Minuten prüfen:

ls -l /var/www/html/connectivity/status_history.json
tail -c 1000 /var/www/html/connectivity/status_history.json
journalctl -t check-inet --since "15 minutes ago" --no-pager
Nur dieser eine Cronjob ist erforderlich. Die Internetgrafiken lesen die JSON-Datei im Browser alle 60 Sekunden neu ein. Dabei wird nicht die vollständige Seite neu geladen. Neue Messwerte entstehen durch den Cronjob alle fünf Minuten. VNStat arbeitet unabhängig davon über seinen eigenen Systemdienst.

9. Bedeutung der Internetausfälle

Ein Internetausfall wird nur gespeichert beziehungsweise angezeigt, wenn IPv4 und IPv6 gleichzeitig nicht erreichbar sind. Fällt nur eines der beiden Protokolle aus, ist dies im Verlauf sichtbar, zählt aber nicht als vollständiger Internetausfall.

Größere Lücken in der Messreihe gelten als „keine Daten“ und nicht als Internetausfall. Dadurch wird ein ausgeschalteter Offloader oder ein nicht laufender Cronjob nicht fälschlich als dauerhafter Internetausfall gewertet.

10. Fehlerdiagnose

Die Internetseiten zeigen „Fehler beim Laden“

ls -ld /var/www/html/connectivity
ls -l /var/www/html/connectivity/status_history.json
python3 -m json.tool /var/www/html/connectivity/status_history.json

Der Webserver muss die JSON-Datei lesen können. Bei der oben beschriebenen Einrichtung gehört sie www-data:www-data und besitzt den Modus 644.

Der Cronjob erzeugt keine Einträge

sudo -u www-data /usr/local/bin/check-inet.py
sudo crontab -u www-data -l
journalctl -t check-inet --since "15 minutes ago" --no-pager

Die Anmeldung wird abgelehnt

ls -l /etc/freifunk-status.htpasswd
sudo -u www-data test -r /etc/freifunk-status.htpasswd && echo lesbar || echo nicht-lesbar

VNStat zeigt keine Daten

systemctl status vnstat
vnstat --dbiflist
ip link show vpn3
ip link show tap0
vnstat -i vpn3
vnstat -i tap0
Wichtig: Passe /var/www/html überall an, falls Deine index.php in einem anderen Webverzeichnis liegt. Das Unterverzeichnis connectivity muss direkt neben der index.php liegen.

Diese Anleitung gehört zur Freifunk-Statusseite. Bei weiteren Fragen wende Dich an den Administrator Deines Freifunk-Knotens.