Freifunk-Gateway aufsetzen/http

Aus Freifunk Franken
Version vom 1. Oktober 2018, 17:32 Uhr von Mifritscher (Diskussion | Beiträge) (→‎Bonus: gateway auch über die anderen IPs erreichbar machen.)
Wechseln zu:Navigation, Suche

apt-get

Dieser Abschnitt setzt ein eingetragenes Hood-File am KeyExchange voraus. Ohne dieses eingetragene File kann dieses Kapitel nicht ganz durchlaufen werden!


Funktion

Es wird ein http Server benötigt, der auf Port 2342 das Hoodfile ausliefert. Dies muss für jede Hood an dem Interface auf dem gleichen Port und unter fe80::1 erreichbar gemacht werden

Der Hood-Ersteller erstellt das Hood-File. Er übergibt das File an den KeyExchange-Admin. Dieser speichert das Hoodlile auf dem KeyExchange. Das GW zeiht das File vom KeyExchange. Solange kein Hoodfile am KeyExchange hintelegt wurde, wird eine andere Hood abgefragt!

Installation

Nginx

apt-get install nginx


apache

apt-get install apache2

Konfiguration

Das aktuellste Hoodfile kann vom keyxchangev2 bezogen werden und muss regelmäßig (Cronjob, alle 5 Minuten) auf dem Gateway aktualisiert werden.

nano /etc/crontab:

*/5 * * * * wget "http://keyserver.freifunk-franken.de/v2/index.php?lat=49.4814&long=10.966" -O /var/www/fuerth/keyxchangev2data


Achtung, da die Hoodfile auf allen Gateways exakt identisch sein muss, darf sie keinesfalls verändert werden (z.b. formatieren oder Zeichen hinzufügen o.ä.).

Die Router beziehen die Datei wechselseitig von verschiedenen Quellen (KeyXchange, Gateways, etc.). Unterscheidet sich die Checksumme, wird hier jeweils neu umkonfiguriert, was bei verschiedenen Files auf zwei GWs dann gerne mal alle 5 Minuten passiert und das Netz lokal kaputt macht.

Koordinaten und Pfad müssen für jede Hood angepasst werden: http://keyserver.freifunk-franken.de/v2/hoods.php

Mehr Details zum Hood file: Hood file

Für mehrere Hoods

Man benötigt einen Webserver, der (für die gleiche Adresse) für verschiedene Interfaces verschiedene Dateien ausliefern kann.

Am einfachsten ist das zu realisieren, indem man den Webserver auf mehreren Ports lauschen lässt und aus und Pakete vom jeweiligen batX Port 2342 auf den jeweiligen Port redirected.

Beispiel nginx

~# cat /etc/nginx/sites-enabled/nuernberg
server {
	listen [::]:2001;
	root /var/www/fuerth;
}

Für weitere Hoods analog.

Beispiel Apache

~# cat /etc/apache2/ports.conf
Listen 2001
Listen 2002
.
.

~# cat /etc/apache2/sites-available/bat.conf:
<VirtualHost *:2001>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/fuerth
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:2002>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/nuernberg
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
.
.

~# a2ensite bat


Und dann braucht man noch die entsprechenden Redirects. Diese müssen entweder mit iptables-persistent reboot-safe gemacht werden oder irgendwie anders zuverlässig beim Serverstart eingetragen werden (z.B. an die batX interface-config anhängen)

ip6tables -t nat -A PREROUTING -i bat0 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2001
ip6tables -t nat -A PREROUTING -i bat1 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2002
ip6tables -t nat -A PREROUTING -i bat2 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2003

Bonus

Es kann noch in jedem Hood-Verzeichnis ein File "gateway" mit dem Servernamen (z.B. "fff-hof-gw3") liegen. So kann man beim Debuggen gleich sehen, welcher Server hier lauscht.

Kopiert bitte diese Datei zusätzlich noch in "normale" http-Root (meist /var/www/html) rein, sodass man das GW auch über die anderen IPs (Peering etc.) identifizieren kann.

Funktionstest

auf einen Knoten in der mit dem Gateway verbunden ist per SSH connecten. Am Knoten

wget http://[fe80::1%br-mesh]/keyxchangev2data -O-

ausführen und es sollte die Hoodfile vom Webserver geliefert werden. Indem die "gateway" Datei heruntergeladen wird (siehe oben) kann geprüft werden auf welches Gateway die Anycast Adresse fe80::1 gerade zeigt. Es kann auch eine eigene Datei ins Webroot des http Servers gelegt werden zum testen.