Freifunk-Gateway aufsetzen/http: Unterschied zwischen den Versionen

Aus Freifunk Franken
Wechseln zu:Navigation, Suche
 
(17 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Funktion ==
== 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
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.


== Installation ==
== Installation ==
Zeile 11: Zeile 11:
nano /etc/crontab:
nano /etc/crontab:
<pre>
<pre>
*/5 * * * * wget "http://keyserver.freifunk-franken.de/v2/index.php?lat=49.4814&long=10.966" -O /var/www/fuerth/keyxchangev2data
*/5 * * * * wget "https://keyserver.freifunk-franken.de/v2/index.php?hoodid=2" -O /var/www/fuerth/keyxchangev2data
</pre>
</pre>


"hoodid=2" ist hier im Beispiel die Fürther Hood. Die ID der eigenen Hood kann auf [https://keyserver.freifunk-franken.de/v2/hoods.php https://keyserver.freifunk-franken.de/v2/hoods.php] herausgesucht werden.
Falls das Gateway noch kein https versteht, ist auch http möglich.


'''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.ä.).'''
'''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.ä.).'''
Zeile 19: Zeile 22:
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.
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.


Beachte das die Hoodfile anhand der Koordinaten vom keyxchange generiert wird. Die Koordinaten müssen also zu der Hood passen, am besten nimmt man bei voronoi Hoods den Mittelpunkt der Hood. Dieser ist über http://keyserver.freifunk-franken.de/v2/hood.php und "zur Hoodfile" aus der Hoodfile auslesbar (lat und lon).
Es muss dafür gesorgt werden, das die Hoodfile unter http://[fe80::1]:2342/keyxchangev2data aus der Hood heruntergeladen werden kann.
 


Mehr Details zum Hood file: [[Hood file]]
Mehr Details zum Hood file: [[Hood file]]
Zeile 27: Zeile 29:
Man benötigt einen Webserver, der (für die gleiche Adresse) für verschiedene Interfaces verschiedene Dateien ausliefern kann.
Man benötigt einen Webserver, der (für die gleiche Adresse) für verschiedene Interfaces verschiedene Dateien ausliefern kann.


==== iptables-Umleitung ====
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.
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 ====
===== Beispiel nginx =====
<pre>
<pre>
~# cat /etc/nginx/sites-enabled/nuernberg
~# cat /etc/nginx/sites-enabled/nuernberg
Zeile 40: Zeile 43:
Für weitere Hoods analog.
Für weitere Hoods analog.


==== Beispiel Apache ====
===== Beispiel Apache =====
<pre>
<pre>
~# cat /etc/apache2/ports.conf
~# cat /etc/apache2/ports.conf
Zeile 68: Zeile 71:
</pre>
</pre>


===== Redirects auf Hoodfiles =====


Und dann braucht man noch die entsprechenden Redirects.
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)
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
https://wiki.freifunk-franken.de/w/Freifunk-Gateway_aufsetzen/interface) je nach dem wie viele Hoods eingesetzt werden.
 
<pre>
iface bat0 inet6 static
 
  [...]
 
    pre-up ip6tables -t nat -A PREROUTING -i $IFACE -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2001
 
  [...]
 
</pre>
 
 
<pre>
iface bat1 inet6 static
 
  [...]
 
    pre-up ip6tables -t nat -A PREROUTING -i $IFACE -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2002
 
  [...]
 
</pre>
 
=== Dienst pro Hood ===
==== Beispiel mini-http ====
mini-http erlaubt es mehrere Instanzen zu starten die jeweils auf unterschiedliche link-local-Adressen lauschen.
<pre>
ap-get install mini-http
</pre>
Wenn die Verzeichnisse mit den Hoodfiles jeweils so heißen, wie die batman-Schnittstellen, kann diese Service-Datei verwendet werden.(batNAME -> /var/www/NAME)


<pre>
<pre>
ip6tables -t nat -A PREROUTING -i bat0 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2001
Description=Per Hood httpd server: dir /var/www/hoodfiles/NAME is served on batNAME
ip6tables -t nat -A PREROUTING -i bat1 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2002
After=network.target
ip6tables -t nat -A PREROUTING -i bat2 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2003
 
[Service]
Type=simple
ExecStart=/usr/sbin/mini_httpd -D -h fe80::1%%bat%I -p 2342 -r -d /var/www/%I/
Restart=on-abort
 
[Install]
WantedBy=multi-user.target
 
</pre>
</pre>


===Bonus===
===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.
Es kann noch in jedem Hood-Verzeichnis ein File "gateway" mit dem Servernamen (z.B. "fff-fuerth") gelegt werden. 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.
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.

Aktuelle Version vom 23. Juni 2019, 19:36 Uhr

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.

Installation

Webserver installieren, z.b. nginx oder apache

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 "https://keyserver.freifunk-franken.de/v2/index.php?hoodid=2" -O /var/www/fuerth/keyxchangev2data

"hoodid=2" ist hier im Beispiel die Fürther Hood. Die ID der eigenen Hood kann auf https://keyserver.freifunk-franken.de/v2/hoods.php herausgesucht werden.

Falls das Gateway noch kein https versteht, ist auch http möglich.

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.

Es muss dafür gesorgt werden, das die Hoodfile unter http://[fe80::1]:2342/keyxchangev2data aus der Hood heruntergeladen werden kann.

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.

iptables-Umleitung

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
Redirects auf Hoodfiles

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 https://wiki.freifunk-franken.de/w/Freifunk-Gateway_aufsetzen/interface) je nach dem wie viele Hoods eingesetzt werden.

iface bat0 inet6 static

   [...]

    pre-up ip6tables -t nat -A PREROUTING -i $IFACE -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2001

   [...]


iface bat1 inet6 static

   [...]

    pre-up ip6tables -t nat -A PREROUTING -i $IFACE -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2002

   [...]

Dienst pro Hood

Beispiel mini-http

mini-http erlaubt es mehrere Instanzen zu starten die jeweils auf unterschiedliche link-local-Adressen lauschen.

ap-get install mini-http

Wenn die Verzeichnisse mit den Hoodfiles jeweils so heißen, wie die batman-Schnittstellen, kann diese Service-Datei verwendet werden.(batNAME -> /var/www/NAME)

Description=Per Hood httpd server: dir /var/www/hoodfiles/NAME is served on batNAME
After=network.target

[Service]
Type=simple
ExecStart=/usr/sbin/mini_httpd -D -h fe80::1%%bat%I -p 2342 -r -d /var/www/%I/
Restart=on-abort

[Install]
WantedBy=multi-user.target


Bonus

Es kann noch in jedem Hood-Verzeichnis ein File "gateway" mit dem Servernamen (z.B. "fff-fuerth") gelegt werden. 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.