HowTo: Eigene Website auf einem Freifunkrouter

Tutorial um eine eigene Website auf einem Freifunkrouter zu deployen

Viele Leute missverstehen Freifunk ein bisschen und denken oft, dass es nur um kostenlosen Internetzugang ginge. Aber Freifunk ist tatsächlich viel mehr.

Mich hatte am Freifunk-Netz eigentlich immer am meisten gereizt, dass man seine eigenen Services anbieten kann. Ein Service kann dabei fast alles ein: Ob Website oder ein Matrix-Server. Der eigenen Kreativität sind kaum Grenzen gesetzt.

Übersicht

Um einen Service im Freifunknetz anzubieten, braucht es zwei/drei Sachen:

  1. Service aufsetzen
  2. Webserver einstellen (optional)
  3. Service im Freifunknetz announcen

Service aufsetzen

Wie du einen Service installierst hängt stark davon ab, was man für einen Service anbieten möchte. Als Beispiel zeige ich dir, wie man einen Website auf dem eigenen Router einrichtet.

Eine Website von deinem Freifunkrouter ausliefern zu lassen, ist relativ einfach, weil dein Router für die LuCI Weboberfläche bereits über einen Webserver verfügt. Es reicht also, dass wir die Website erstellen und den Webserver so einstellen, dass er die html-Datei ausliefert.

Es gib zwei Möglichkeiten die Website auf dem Router abzulegen: Entweder im Arbeitsspeicher (RAM) oder auf dem Router-Flash. Beide Optionen haben Vor- und Nachteile.

Der Flash ist persistent. Das heißt, dass die Website auch nach einem Neustart des Routers vorhanden ist. Andererseits ist der Flash-Speicher oft sehr begrenzt (z.B. 8 oder 16 MiB) und er ist relativ langsam. Außerdem hat Flash-Speicher nur eine relativ geringe Zahl an Schreibzyklen. Das heißt, nach wenigen Tausend Schreibzugriffen ist die Speicherzelle kaputt.

Der RAM ist meistens wesentlich größer als der Flash und er ist sehr viel schneller. Jedoch ist nach einem Neustart der gesamte Inhalt verloren.

Ich bevorzuge aus Performancegründen den RAM und kopiere die Website bei jedem Router-Neustart mit einem Skript dahin.

Unter OpenWrt ist das /tmp/-Verzeichnis eine Ramdisk, also ein Speicherbereich aus dem RAM, der in das Dateisystem eingebunden wird. Das werden wir uns zunutze machen und dort die Website für den Webserver ablegen.

Wir legen das Verzeichnis für die Website an mit:

mkdir -p /tmp/www/example-site/

Und anschließend speichern wir die eigentliche Website in der index.html:

nano /tmp/www/example-site/index.html

Dort einfügen:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Testseite</title>
  </head>
  <body>
    <h1>Testseite</h1>
    <p>Diese Seite enthält einen unwichtigen Fließtext...</p>
    <p>Diese Beispielseite findet man unter /tmp/www/example-site/index.html</p>
  </body>
</html>

Damit haben wir eine fertige Webseite auf dem Router abgelegt. Jetzt muss diese nur noch durch den Webserver ausgeliefert werden.

Webserver einstellen (optional)

Falls du als Dienst keine Webseite vom Router auslieferst, sondern etwas anderes machst, kannst du diesen Schritt auslassen.

In OpenWrt ist bereits ein einfacher Webserver integriert. Dieser heißt uhttpd und wird über die Datei /etc/config/uhttpd konfiguriert. Damit der Webserver unsere Seit ausliefert, müssen wir diesen Abschnitt am Ende der Datei hinzufügen:

config uhttpd 'example'
       list listen_http '0.0.0.0:81'
       list listen_http '[::]:81'
       option home '/tmp/www/example-site/'
       option max_requests '5'
       option max_connections '100'

Die erste Zeile leitet den neuen Abschnitt für eine neue Webseite ein. Die beiden Zeilen listen_http teilen den Webserver mit, dass er sowohl für IPv4-adressen (0.0.0.0), als auch für IPv6-Adressen (::) jeweils auf Port 81 auf HTTP-Anfragen warten soll. option_home gibt an, welches Verzeichnis er ausliefern soll, wenn eine Anfrage kommt. Es wird automatisch die index.html ausgeliefert, falls es sie gibt. Sonst liefert er eine Auflistung der Dateien im angegeben Verzeichnis aus (z.B. praktisch für Downloads).

Mit den beiden letzten Zeilen kann man die maximale Anzahl an Verbindungen, bzw. Requests einstellen. Das kann hilfreich sein, wenn der Webserver nicht die komplette Rechenleistung des PC in Anspruch können nehmen soll.

Damit uhttpd auch mitbekommt, dass es neue Einstellungen gibt, starten wir es neu:

/etc/init.d/uhttpd restart

Mit den jetzigen Einstellungen können wir unsere Webseite bereits im Browser anschauen. Dazu geben wir in die Browserzeile http://frei.funk:81 ein und sehen unsere etwas spartanische Seite:

Alternativ-Text: Screenshot der minimalistischen Testseite

Service im FF-Netz announcen

Jetzt wo unsere Website funktioniert, müssen wir uns nur noch darum kümmern, wie wir andere Leute auf sie aufmerksam machen. Natürlich könnten andere Freifunker:innen jetzt die IP-Adresse deines Routers in die Adresszeile tippen, z.B. so:

http://10.31.42.42:81/

Selbstverständlich würde das funktionieren. Aber das wäre eben auch umständlich… Zum Glück hat das Freifunk-Netz dafür eine Lösung.

Wenn man auf http://frei.funk geht und dort auf die Dienste-Seite wechselt, sieht man eine Liste der Dienste im Freifunknetz. Wir werden unsere neue Webseite dort eintragen, damit auch andere Freifunker:innen sie finden können.

Dazu öffnen wir die Datei /etc/config/olsrd und suchen nach diesem Abschnitt:

config LoadPlugin
        option library 'olsrd_nameservice'
        option suffix '.olsr'
        option hosts_file '/tmp/hosts/olsr'
        option latlon_file '/var/run/latlon.js'
        option services_file '/var/etc/services.olsr'

Um unseren Service einzutrage, ergänzen wir in diesem Block zwei Zeilen:

config LoadPlugin
        option library 'olsrd_nameservice'
        option suffix '.olsr'
        option hosts_file '/tmp/hosts/olsr'
        option latlon_file '/var/run/latlon.js'
        option services_file '/var/etc/services.olsr'
        list hosts '10.31.42.42 example-site'
        list service 'http://example-site.olsr:81|tcp|Eine kleine feine Beispielseite'

list_host gibt dabei die IP-Adresse an, die mit einem hostname verbunden werden soll. Du musst die 10.31.42.42 gegen deine eigene IP-Adresse ersetzen.

list_service gibt dann den FQDN inklusive Port, das Protokoll und eine kleine Service-Beschreibung (wird als “Name” angezeigt) an.

Abschluss

Wenn du diese drei Schritte durchgeführt hast, werden auch andere Freifunker:innen sich über deinen neuen Dienst fürs Freifunknetz freuen können.

Der Dienst muss dabei nicht unbedingt auf deinem Router selber laufen. Es ist auch möglich, ihn auf z.B. einem Raspberrypi laufen zu lassen. In dem Fall am besten eine statische IP-Adresse für den entsprechenden Client setzen, sonst wechselt möglicherweise unbeabsichtigt die IP-Adresse des Dienstes.

Dein Dienst kann dabei von Website, über Wetterstation bis hin zur Streaming-Platform alles sein, was irgendwie auf einem Computer laufen kann. Ich freue mich schon auf hoffentlich bald viele neue Dienste im Freifunk-Netz. :)

 Share!