Dies ist eine alte Version des Dokuments!
Offloader auf Basis eines Raspberry PI 4B
Disclaimer: Die Anleitung ist nur für Leute, die sich bereits mit dem Thema Linux auseinander gesetzt haben oder sich intensiv damit beschäftigen wollen.
Mit dem Raspberry PI 4 ist es das erste Mal möglich, einen Offloader sinnvoll auf einem PI zu betreiben. Denn in dieser Version bietet der Ethernet Anschluss genug Durchsatz und die CPU ist leistungsfähig genug um eine ordentliche fastd Performance zu bieten.
Angeboten wird das PI in einer 1GB, 2GB und 4GB RAM Variante. Will man wirklich nur einen reinen Offloader ohne Zusatzfunktionen betreiben, reicht im Grunde die 1GB Version. Allerdings ist mehr RAM immer besser ;) und man weiß ja nicht, was man im Endefekt noch alles darauf betreiben will.
Nachdem es kein fertiges Gluon Image für das Raspberry PI 4B gibt im Moment, installieren wir erstmal strikt nach Anleitung das aktuelle Raspbian.
Außerdem ermöglicht uns der Einsatz von Raspbian, dass wir alle normalen Anwendungen wie Webserver, Chatserver oder den Unifi-Controller einfach installieren können.
Eine Anleitung dazu findet ihr auf der offiziellen Raspbian Seite.
Am Ende der Prozedur, empfiehlt es sich auf der Boot Partition einfach eine leere Datei mit dem Namen „ssh“ anzulegen. Das aktiviert den SSH Daemon und man kann bequem per Putty, OpenSSH oder sonstigen Clients remote auf das PI zugreifen.
Der Benutzername lautet „pi“ und das Passwort „raspberry“.
BATMAN
Nachdem ihr euch eingeloggt habt, wechseln wir zum Root User und laden das BATMAN Kernelmodul herunter. Das wird gebraucht um nachher das Routing innerhalb des Freifunknetzes zu übernehmen.
Am Besten schaut ihr vorher, welches die aktuelle BATMAN Version ist.
pi@raspberrypi:~ $ sudo su - root@raspberrypi:~# cd /usr/src/ root@raspberrypi:/usr/src# wget https://downloads.open-mesh.org/batman/releases/batman-adv-2019.2/batman-adv-2019.2.tar.gz root@raspberrypi:/usr/src# tar xzf batman-adv-2019.2.tar.gz
Nachdem das Kernelmodul manuell gebaut wird, wollen wir natürlich dass das auch Bestand hat, wenn ein Kernelupdate eingespielt wird. Dazu brauchen wir nun einige Pakete.
root@raspberrypi:/usr/src# apt update && apt install dkms raspberrypi-kernel-headers
Anschließend müssen wir auf Grund dessen, dass der Raspberry PI Kernel crosscompiled wurde die make Skripte neu generieren.
root@raspberrypi:/usr/src# cd linux-headers-$(uname -r) root@raspberrypi:/usr/src/linux-headers-4.19.50-v7l+# make scripts
Es kann passieren, dass hier nach einiger Zeit mit der Fehlermeldung
„scripts/sortextable.c:31:10: fatal error: tools/be_byteshift.h: No such file or directory“
abgebrochen wird, das stellt aber kein Problem dar.
Nun nachdem die Vorbereitungen getroffen sind, zurück zu BATMAN. Und dem Anlegen der dkms.conf.
root@raspberrypi:/usr/src# cd linux-headers-$(uname -r) root@raspberrypi:/usr/src/linux-headers-4.19.50-v7l+# cd ../batman-adv-2019.2/ root@raspberrypi:/usr/src/batman-adv-2019.2# vi dkms.conf
Der Inhalt der dkms.conf sieht wie folgt aus:
PACKAGE_NAME=batman-adv PACKAGE_VERSION=2019.2 DEST_MODULE_LOCATION=/extra BUILT_MODULE_NAME=batman-adv BUILT_MODULE_LOCATION=net/batman-adv MAKE="'make'" CLEAN="'make' clean" AUTOINSTALL="yes"
Die Datei speichern und schon sind wir bereit für das erste Mal bauen des Kernelmodules.
root@raspberrypi:/usr/src/batman-adv-2019.2# dkms add -m batman-adv -v 2019.2 root@raspberrypi:/usr/src/batman-adv-2019.2# dkms build -m batman-adv -v 2019.2 root@raspberrypi:/usr/src/batman-adv-2019.2# dkms install -m batman-adv -v 2019.2
Als nächstes müssen wir dafür sorgen, dass das Kernelmodul beim Boot auch geladen wird. Dazu müssen wir die Datei „/etc/modules-load.d/batman-adv.module.conf“ wie folgt anpassen.
root@raspberrypi:/usr/src/batman-adv-2019.2# vi /etc/modules-load.d/batman-adv.module.conf
# # Load batman-adv module on system boot # batman-adv dummy
Nun kann man entweder rebooten oder die Module manuell laden.
root@raspberrypi:/usr/src/batman-adv-2019.2# modprobe dummy batman_adv
Um BATMAN verwalten zu können müssen wir nun noch „batctl“ installieren.
root@raspberrypi:/usr/src/batman-adv-2019.2# apt install batctl
Dann überprüfen wir ob alles korrekt geladen ist.
root@raspberrypi:/usr/src/batman-adv-2019.2# batctl ra Active routing protocol configuration: Selected routing algorithm (used when next batX interface is created): => BATMAN_IV Available routing algorithms: * BATMAN_IV * BATMAN_V
Nachdem wir BATMAN_V bei uns verwenden, sehen wir dass aktuell der falsche Routing Algorithmus ausgewählt ist. Das korrigieren einmal sofort manuell.
root@raspberrypi:/usr/src/batman-adv-2019.2# batctl ra BATMAN_V
Nun kommen wir zur Interface Konfiguration. In diesem Beispiel, werden wir das Raspberry PI im Segment „welt“ ansiedeln, deswegen heißen auch die Interfaces entsprechend.
/etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8) # Please note that this file is written to be used with dhcpcd # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf' # Include files from /etc/network/interfaces.d: auto eth0 iface eth0 inet dhcp auto br-welt iface br-welt inet dhcp bridge-ports bat-welt wlan0 pre-up /usr/sbin/batctl ra BATMAN_V pre-up /sbin/ip link add dummy-welt type dummy pre-up /sbin/ip link set address $(ip -br l | grep eth0 | egrep -o '([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})' | head -1) dev dummy-welt pre-up /sbin/ip link set dummy-welt up pre-up /usr/sbin/batctl -m bat-welt if add dummy-welt pre-up /sbin/ip link set bat-welt up post-up /sbin/ip link set address $(ip -br l | grep eth0 | egrep -o '([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})' | head -1) dev br-welt post-up /sbin/dhclient -pf /run/dhclient.br-welt.pid -lf /var/lib/dhcp/dhclient.br-welt.leases br-welt
Im Beispiel setzen wir die MAC Addresse für BATMAN fest auf die MAC von eth0, damit wir später auch Statistiken etc abrufen können.
FASTD
Um zum Freifunk München Netz verbinden zu können, brauchen wir nun noch fastd.
Diesen installieren wir einfach per apt
root@raspberrypi:~# apt install fastd
Und anschließend generieren wir uns einen Key, den wir zum Verbinden und verschlüsseln benötigen.
root@raspberrypi:~# fastd --generate-key 2019-07-05 10:57:41 +0100 --- Info: Reading 32 bytes from /dev/random... Secret: 1843fd17494d265d65f9563e3655728dbf1c8f7fb04365a9ab733f4debdb8f51 Public: 7703d5f1766c11cc701cc039af1913faef216ced7b33dd18f87e57c172e0324e
Wir benötigen davon nur den Secret Key. Anschließend erzeugen wir die Konfiguration.
root@raspberrypi:~# mkdir /etc/fastd/welt root@raspberrypi:~# vi /etc/fastd/welt/fastd.conf
/etc/fastd/welt/fastd.conf
# # welt FASTd configuration # log to syslog level info; interface "fastd-welt"; method "salsa2012+umac"; method "null"; secret "1843fd17494d265d65f9563e3655728dbf1c8f7fb04365a9ab733f4debdb8f51"; mtu 1406; status socket "/var/run/fastd.welt.sock"; on up " batctl ra BATMAN_V ip link set $INTERFACE down ip link set address $(ip -br l | grep eth0 | egrep -o '([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})' | head -1) dev $INTERFACE ip link set $INTERFACE up batctl -m bat-welt if add $INTERFACE "; on down " batctl -m bat-welt if del $INTERFACE "; peer "gw01.in.ffmuc.net" { key "e9e222c88de0613d7c2f2ca13b61e9146ca15c344b3d7ec55e0705f9fb730706"; remote 195.30.193.35 port 30011; } peer "gw02.in.ffmuc.net" { key "9520145b940bc89358198918f4fb085b24280c3f9ac68600407395f89e856dcb"; remote 195.30.193.36 port 30011; } peer "gw07.in.ffmuc.net" { key "845702d2d9c45f584f405cedb453d1fd61135273c08553156caf0cfa780c7b9a"; remote 195.30.193.37 port 30011; }
Nun aktivieren wir „fastd“ für den Boot.
root@raspberrypi:~# systemctl enable fastd@welt
ext-respondd
Nachdem wir auch auf der Knotenkarte auftauchen wollen, installieren wir auch noch ext-respondd
root@raspberrypi:~# apt install git root@raspberrypi:~# git clone https://github.com/ffggrz/ext-respondd /opt/ext-respondd/ root@raspberrypi:~# sed -i s/ff02/ff05/g /opt/ext-respondd/ext-respondd.py root@raspberrypi:~# /opt/ext-respondd/ext-respondd.service.example /etc/systemd/system/ext-respondd.service root@raspberrypi:~# systemctl daemon-reload root@raspberrypi:~# systemctl enable ext-respondd
Dann müssen wir auch noch die Konfigurationsdateien von ext-respondd anpassen.
root@raspberrypi:~# vi /opt/ext-respondd/alias.json
Die Dateien sind selbsterklärend, einfach die nötigen Infos eintragen.
{ "nodeinfo": { "hostname": "aw-raspi-4", "hardware": { "model": "Raspberry Pi 4 B" }, "owner": { "contact": "awlnx @ chat.ffmuc.net" }, "system": { "site_code": "ffmuc_welt", "role": "client" } }, "firstseen": "2015-04-12T15:41:01" }
root@raspberrypi:~# vi /opt/ext-respondd/config.json
{ "batman": "bat-welt", "bridge": "br-welt", "mesh-vpn": [ "fastd-welt" ], "wan": "eth0", "rate_limit": 30, "rate_limit_burst": 10 }
Checken der Konfiguration
Anschließend rebooten wir einmal und wenn alles stimmt sollte der Knoten auf der Karte erscheinen und „batctl“ folgendes liefern, der Neighbor kann je nach GW ein anderer sein:
root@raspberrypi:~# batctl -m bat-welt n [B.A.T.M.A.N. adv 2019.1, MainIF/MAC: dummy-welt/dc:a6:32:00:6b:59 (bat-welt/86:6e:aa:be:bb:94 BATMAN_V)] IF Neighbor last-seen f2:00:22:10:00:00 0.060s ( 1.0) [fastd-welt]