knb:rpb4_wg

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
knb:rpb4_wg [2020/12/17 11:00] – [Konfigurations-/Netzzwerkcheck] Djangoknb:rpb4_wg [2021/01/10 21:31] – [WireGuard-Healthcheck] django
Zeile 13: Zeile 13:
  
 <WRAP center round info 90%> <WRAP center round info 90%>
-Diese Anleitung funktioniert auf quasi allen Linux basierten Betriebssystemen, mit ein paar Anpassungen. \\+Diese Anleitung geht von einem Linux Hostrechner aus - sie funktioniert auf quasi allen Linux basierten Betriebssystemen, mit ein paar Anpassungen. \\
 \\ \\
 In den nachfolgenden Beispielen zu den Shell-/Konsolen-Befehlen gelt folgende Formatierungen: In den nachfolgenden Beispielen zu den Shell-/Konsolen-Befehlen gelt folgende Formatierungen:
-  * Ein vorangestelltes Dollarzeichen **''$''** bedeutet, dass der bzw. die Befehle mit Userrechten des gerade angemldeten Benutzers ausgeführt werden können. +  * Ein vorangestelltes Dollarzeichen **''$''** bedeutet, dass der bzw. die Befehle mit Userrechten des gerade angemeldeten Benutzers ausgeführt werden können. 
-  * Ein vorangestelltes Raute-Symbol **''#''** hingegen bedeutet, dass zum Ausführen des Befehls bzw. der befehle Root-Rechte benötigt werden, die man z.b. mit Hilfe von **'' $ sudo su -''** erlangen kann. +  * Ein vorangestelltes Raute-Symbol **''#''** hingegen bedeutet, dass zum Ausführen des Befehls bzw. der Befehle Root-Rechte benötigt werden, die man z.b. mit Hilfe von **'' $ sudo su -''** erlangen kann. 
 \\ \\
 Sollten trotz des eingehenden Studiums dieser Anleitung dennoch Fragen offen bleiben, oder unvorhergesehenen Problemstellungen auftreten, findet man im **[[https://chat.ffmuc.net/freifunk/channels/technik-offloader|Chat]]** sicher schnell Hilfe und Unterstützung.  Sollten trotz des eingehenden Studiums dieser Anleitung dennoch Fragen offen bleiben, oder unvorhergesehenen Problemstellungen auftreten, findet man im **[[https://chat.ffmuc.net/freifunk/channels/technik-offloader|Chat]]** sicher schnell Hilfe und Unterstützung. 
Zeile 23: Zeile 23:
 </WRAP> </WRAP>
  
-Mit dem [[https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711/rpi_DATA_2711_1p0_preliminary.pdf|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 **WireGuard** Performance zu bieten. Dies war bei den Vorgänger Modellen so leider **nicht** der Fall.+Mit dem [[https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711/rpi_DATA_2711_1p0_preliminary.pdf|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 Durchsatzund die CPU ist leistungsfähig genug um eine ordentliche **WireGuard** Performance zu bieten. Dies war bei den Vorgänger Modellen so leider **nicht** der Fall.
  
 <WRAP center round important 60%> <WRAP center round important 60%>
Zeile 34: Zeile 34:
 {{:knb:raspberry:rpi.jpg?405|Bild: Raspberry 4 - Lieferung/Verpackung}} \\ {{:knb:raspberry:rpi.jpg?405|Bild: Raspberry 4 - Lieferung/Verpackung}} \\
 {{:knb:raspberry:19-06-26_14-06-10_2041.jpg?405|Bild: Raspberry 4 - Platine in Verpackung}} {{:knb:raspberry:19-06-26_14-06-10_2041.jpg?405|Bild: Raspberry 4 - Platine in Verpackung}}
 +
 +===== Ansible-Playbook gesteuerter Bau des Offloaders =====
 +<WRAP center round tip 60%>
 +Wer nicht  die nachfolgenden gut dokumentierten Schritte per Hand ausführen möchte, kann sich auch mit Hilfe von **[[https://www.ansible.com/|Ansible]]** binnen 20 Minuten automatisiert einen Offloader Menü geführt und scriptiert erstellen lassen. 
 +
 +<html><center>Das entsprechende <b><a href="https://wiki.mailserver.guru/doku.php/centos:ansible:ffmuc-rpb4-ol" class="urlextern" target="_tab" title="https://wiki.mailserver.guru/doku.php/centos:ansible:ffmuc-rpb4-ol" rel="nofollow noopener">HOWTO</a></b> findet man in <b><a href="https://wiki.mailserver.guru" class="urlextern" target="_tab" title="https://wiki.mailserver.guru" rel="nofollow noopener">Djangos WIKI</a></b>.</center></html>
 +</WRAP>
  
 ===== Raspberry Pi OS ===== ===== Raspberry Pi OS =====
Zeile 60: Zeile 67:
  
 ==== Kopieren des Images auf die MicroSD-Karte ==== ==== Kopieren des Images auf die MicroSD-Karte ====
-Nun können wir das Image auf die MicroSD-Karte, die wir später in den Raspberry 4B stecken kopieren. Wir werfen also am besten einmal einen Blick in das syslog unseres Arbeitsrechners und erkennen so das Device unserer Speicherkarte.+Nun können wir das Image auf die MicroSD-Karte, die wir später in den Raspberry 4B steckenkopieren. Wir werfen also am besten einmal einen Blick in das syslog unseres Arbeitsrechners und erkennen so das Device unserer Speicherkarte.
    # tail -f /var/log/messages    # tail -f /var/log/messages
 bzw. bzw.
Zeile 77: Zeile 84:
 Sep  5 21:11:09 BOFHs-X230 gnome-terminal-[8119]: g_menu_insert_item: assertion 'G_IS_MENU_ITEM (item)' failed</code> Sep  5 21:11:09 BOFHs-X230 gnome-terminal-[8119]: g_menu_insert_item: assertion 'G_IS_MENU_ITEM (item)' failed</code>
  
-In dem gezeigtem Fall handelt es sich also um die Gerätedatei **''/dev/mmcblk0''**. Wir wissen also wie wir nun die zuvor heruntergeladene **[[#download|Debian Buster Image-Datei]]** auf die MicroSD-Karte kopieren müssen. In der Regel hat der "normale Nutzer" keine Rechte um diese Gerätedatei anzusprechen, wir müssen also als Benutzer **root** oder mir den Rechten des Benutzers **root** die  Gerätedatei **''/dev/mmcblk0''** in diesem Konfigurationsbeispiel ansprechen.+Aus der zweiten Zeile ergibt sich, dass die MicroSD-Karte über die Gerätedatei **''/dev/mmcblk0''** angesprochen werden kannDie nachfolgenden Zeilen zeigen an, wie das Linux-System den bestehenden Inhalt der Karte interpretiert - tut aber für unsere Zwecke nichts zur Sache, weil wir die Karte eh gleich überschreiben. Achtung: schließt man die MicroSD-Karte z.B. über einen USB-Adapter an, kann sie auch unter einem anderen Namen erscheinen, z.B. **''/dev/sde''**. Und hier ist Gefahr in Verzug, weil die System-Platte des Host-Rechners auch unter **''/dev/sd<irgendwas>''** erscheint, und es auch erfahrenen Benutzern passiert, die Buchstaben zu verwechseln, und beim nachfolgenden Schreibvorgang sein System zerschießt.  
 + 
 +Mit Hilfe der Gerätedatei können wir das heruntergeladene **[[#download|Debian Buster Image-Datei]]** auf die MicroSD-Karte kopieren. In der Regel hat der "normale Nutzer" keine Rechte um diese Gerätedatei anzusprechen, wir müssen also als Benutzer **root** oder mit den Rechten des Benutzers **root** den Kopiervorgang aufrufen: 
  
    # dd if=~/2020-08-20-raspios-buster-armhf-lite.img of=/dev/mmcblk0  bs=4M status=progress conv=fsync    # dd if=~/2020-08-20-raspios-buster-armhf-lite.img of=/dev/mmcblk0  bs=4M status=progress conv=fsync
Zeile 83: Zeile 92:
    $ sudo dd if=/home/django/Freifunk/2020-08-20-raspios-buster-armhf-lite.img of=/dev/mmcblk0 bs=4M status=progress conv=fsync</code>    $ sudo dd if=/home/django/Freifunk/2020-08-20-raspios-buster-armhf-lite.img of=/dev/mmcblk0 bs=4M status=progress conv=fsync</code>
  
-Da wir später weder Tastatur noch Monitor an unseren Raspberry 4B anstecken wollen, diesen demnach im **headless**-Mode betreiben wollen und werden, legen wir noch eine Datei **''/boot/ssh''** auf der SD-Karte ab. Nach dem erneuten Anstecken der MicroSD-Karte wir der Speicher in der Regel im Verzeichnis **''/run/media/''** oder auch **''/media/''**gemountet. Zum Anlagen der betreffenden Datei  **''ssh''** in dem Verzeichnis reicht also folgender Aufruf, bei dem wir den Usernamen natürlich unseren Gegebenheiten entsprechend anpassen.:+Wenn der Kopiervorgang abgeschlossen ist, Karte entfernen und wieder einstecken. Das System erkennt die beiden Partitions auf der Karte. Je nach Systemeinstellungen mountet sie die Partitions automatisch - in der Regel im Verzeichnis **''/run/media/''** oder auch **''/media/''**. Oder es erscheint in der Systemleiste ein Icon für einen neu erkannten Wechseldatenspeicher, den man dann per Mausklick mounten kann. Wer unsicher ist, kann  
 + 
 +   # mount 
 + 
 +aufrufen, und feststellen, wo die **root-Partition** und die **boot-Partition** zu finden ist. 
 + 
 +Da wir später weder Tastatur noch Monitor an unseren Raspberry 4B anstecken wollen, diesen demnach im **headless**-Mode betreiben wollen und werden, legen wir noch eine leere Datei **''ssh''** auf der **boot**-Partition ab. Damit wird beim Hochfahren der ssh-Server auf dem RPi gestartet, mit dessen Hilfe wir uns über das Netzwerk einloggen können. Zum Anlagen dieser Datei  **''ssh''** reicht folgender Aufruf, bei dem wir den Pfad, und insbesondere den Usernamen im Pfad, natürlich unseren Gegebenheiten entsprechend anpassen:
    # touch /run/media/django/boot/ssh    # touch /run/media/django/boot/ssh
 bzw. bzw.
    $ touch /media/django/boot/ssh    $ touch /media/django/boot/ssh
  
-Anschließend können wir nach einem Unmounten des Gerätes **''/dev/sdb''** die Micro-SD-Karte in den Kartenslot des Raspberry 4B stecken und den Kleinstcomputer mit dem Netzwerk sowie dem zugehörigen Netzteil verbinden und starten.+Anschließend können wir nach einem Unmounten der Partitions **''/dev/mmcblk0p*''** die Micro-SD-Karte in den Kartenslot des Raspberry 4B stecken und den Kleinstcomputer mit dem Netzwerk sowie dem zugehörigen Netzteil verbinden und starten.
  
 ===== Vorbereitende Konfigurationsschritte ===== ===== Vorbereitende Konfigurationsschritte =====
Zeile 160: Zeile 175:
  
 ==== Änderung des Hostnamens ==== ==== Änderung des Hostnamens ====
-Damit unser neuer Offloader auch sauber mit seinem Namen angesprochen und dieser Name dann auch weiterverwendet werden kannpassen wir diesen nun erst einmal an. In unserem Konfigurationsbeispiel soll dies der Name **''rpb4-wg-ol''** lauten. +Unser neuer Offloader braucht einen eigenen Namen, mit dem er sich von anderen eigenen Raspberry P4 unterscheiden lässt. In unserem Konfigurationsbeispiel soll der Name **''rpb4-wg-ol''** lauten. Das Setzen des Nodenamens, mit der unser Offloader dann auch auf der Freifunk-Karte später erscheinen wird, erfolgt im Abschnitt **[[#ext-respondd|Konfiguration des ext-respondd]]**!
  
-Nun setzen wir den Hostnamen wie folgt:+Wir setzen den Hostnamen wie folgt:
    # hostnamectl set-hostname rpb4-wg-ol    # hostnamectl set-hostname rpb4-wg-ol
  
-Damit beim späteren Wechsel der Userrechte zu keiner Warnmeldung kommt, da der Hostname nicht aufgelöst werden konnte, korrigieren wir gleich noch die Konfigurationsdatei **''/etc/hosts''** und ändern dort in der letzten Zeile den Defaultwert von **''raspberrypi''** auf unseren neuen individuellen Namen **''rpb4-wg-ol''** ab.+Damit es beim späteren Wechsel der Userrechte zu keiner Warnmeldung kommt, weil der Hostname nicht aufgelöst werden konnte, korrigieren wir gleich noch die Konfigurationsdatei **''/etc/hosts''**und ändern auch dort den Standardnamen **''raspberrypi''** auf unseren neuen individuellen Namen **''rpb4-wg-ol''** ab.
    # vim /etc/hosts    # vim /etc/hosts
 <file bash /etc/hosts>127.0.0.1 localhost  <file bash /etc/hosts>127.0.0.1 localhost 
Zeile 184: Zeile 199:
  
 <WRAP center round alert 80%> <WRAP center round alert 80%>
-Möchte man vom Raspberry später auch ein WLAN ausstrahlen lassen so ist es zwingend von Nöten, dass WIFI explizit via **rfkill** freizugeben!+Möchte später auch das WLAN des Raspberry verwenden, so ist es zwingend von Nöten, dass WIFI explizit via **rfkill** freizugeben!
 Hier loggen wir uns per SSH ein und setzen folgenden Befehl ab: Hier loggen wir uns per SSH ein und setzen folgenden Befehl ab:
    # rfkill unblock wifi    # rfkill unblock wifi
-Zum Aktivieren ist noch ein Reboot unseres Raspberry 4 nötig!+Erst ein Reboot unseres Raspberry 4 aktiviert das WLAN tatsächlich
    # systemctl reboot    # systemctl reboot
 </WRAP> </WRAP>
Zeile 197: Zeile 212:
    # apt-get upgrade -y    # apt-get upgrade -y
  
-Nun ist es an der Zeit, das wir unseren Kleinstrechner **rpb4-wg-ol** neu zu starten.+Nun ist es dann doch an der Zeit, dass wir unseren Kleinstrechner **rpb4-wg-ol** neu zu starten.
    # systemctl reboot    # systemctl reboot
  
 ===== BATMAN ===== ===== BATMAN =====
-Für das Routing der Layer-2-Verbindungen innerhalb des Freifunknetzes wird als Mesh-Protokoll **[[https://de.wikipedia.org/wiki/B.A.T.M.A.N.|B.A.T.M.A.N.-Advanced]]** kurz **''batman-adv''** benötigen, welches wir uns nun in diesem Abschnitt installieren und konfigurieren wollen. +Für das Routing der Layer-2-Verbindungen innerhalb des Freifunknetzes wird als Mesh-Protokoll **[[https://de.wikipedia.org/wiki/B.A.T.M.A.N.|B.A.T.M.A.N.-Advanced]]** kurz **''batman-adv''** eingesetzt, welches wir uns nun in diesem Abschnitt installieren und konfigurieren wollen. 
  
 <WRAP center round tip 60%> <WRAP center round tip 60%>
Zeile 223: Zeile 238:
  
 ==== Kernelmodule ==== ==== Kernelmodule ====
-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, die wir erst einmal installieren werden.+Nachdem das Kernelmodul manuell gebaut wird, wollen wir natürlichdass das auch Bestand hat, wenn ein Kernelupdate eingespielt wird. Dazu brauchen wir nun einige Pakete, die wir erst einmal installieren werden.
    # apt update && apt install dkms raspberrypi-kernel-headers    # apt update && apt install dkms raspberrypi-kernel-headers
  
-Anschließend müssen wir auf Grund dessendass der Raspberry PI Kernel crosscompiled wurde, die make Skripte neu generieren.+Anschließend müssen wir die make Skripte neu generierenweil der Raspberry PI Kernel ursprünglich crosscompiliert wurde.
    # cd linux-headers-$(uname -r)    # cd linux-headers-$(uname -r)
  
Zeile 246: Zeile 261:
 </WRAP> </WRAP>
  
-Da nun alle nötigen vorbereitenden Installations- und Konfigurationsschritte abgearbeitet wurden, machen wir uns an das Anlegen der für B.A.T.M.A.N. notwendigen Konfigurationsdatei **''dkms.conf''**.+Da nun alle nötigen vorbereitenden Installations- und Konfigurationsschritte abgearbeitet sind, machen wir uns an das Anlegen der für B.A.T.M.A.N. notwendigen Konfigurationsdatei **''dkms.conf''**.
    # cd ../batman-adv-2020.4/    # cd ../batman-adv-2020.4/
  
Zeile 267: Zeile 282:
 Zum Speichern und Verlassen des Editors **vim** benutzen wir den **Vim**-Syntax **''ESC :x''**. Zum Speichern und Verlassen des Editors **vim** benutzen wir den **Vim**-Syntax **''ESC :x''**.
  
-Nun sind wir mit unserer Konfiguration soweit dass wir die B.A.T.M.A.N-Kernelmodule bauen können.+Nun sind wir mit unserer Konfiguration soweitdass wir die B.A.T.M.A.N-Kernelmodule bauen können.
    # dkms add -m batman-adv -v 2020.4    # dkms add -m batman-adv -v 2020.4
  
Zeile 331: Zeile 346:
  * BATMAN_V</code>  * BATMAN_V</code>
  
-Nun kommen wir zur Interface Konfiguration. In diesem Beispielwerden wir das Raspberry PI im Segment "**welt**" ansiedeln, deswegen benennen wir das zugehörige Interface **''br-welt''** auch entsprechend. Hierzu benötigen wir noch die **''bridge-utils''** die wir uns nun noch nachinstallieren werden.+Nun kommen wir zur Interface Konfiguration. In diesem Beispiel werden wir den RPi-Offloader im Segment "**welt**" ansiedeln, deswegen benennen wir das zugehörige Interface **''br-welt''** auch entsprechend. Hierzu benötigen wir noch die **''bridge-utils''**die wir uns noch installieren:
    # apt install bridge-utils -y    # apt install bridge-utils -y
  
-Wir können mit nachfolgendem Befehl noch überprüfen, ob die Version von **''batctl''** auch zur installierten Version von **''batman-adv''** passt.+Wir können mit nachfolgendem Befehl überprüfen, ob die Version von **''batctl''** auch zur installierten Version von **''batman-adv''** passt.
    # batctl -v    # batctl -v
  
Zeile 674: Zeile 689:
         /usr/bin/wget -q -O- --post-data='{"domain":"ffmuc_welt","public_key":"HjDRCwE4Q7UPAKXrmM4s6VOgMK+HJZCixWTaVC8KiRU="}' http://broker.ffmuc.net/api/v1/wg/key/exchange         /usr/bin/wget -q -O- --post-data='{"domain":"ffmuc_welt","public_key":"HjDRCwE4Q7UPAKXrmM4s6VOgMK+HJZCixWTaVC8KiRU="}' http://broker.ffmuc.net/api/v1/wg/key/exchange
         logger -t checkuplink "Starting wireguard-daemon."         logger -t checkuplink "Starting wireguard-daemon."
-        systemctl start wg-quick@wg-uplink+        systemctl start wg-quick@wg-welt
         logger -t checkuplink "Starting vxlan-meshing."         logger -t checkuplink "Starting vxlan-meshing."
         vxlan         vxlan
Zeile 1132: Zeile 1147:
    # echo 'DAEMON_OPTS="-d"' >> /etc/default/hostapd    # echo 'DAEMON_OPTS="-d"' >> /etc/default/hostapd
  
-==== Konfiguartion ==== +==== Konfiguration ==== 
- Nun legen wir uns eine entsprechende KOnfigurationsdatei an.+ Nun legen wir uns eine entsprechende Konfigurationsdatei an.
    # vim /etc/hostapd/hostapd.conf    # vim /etc/hostapd/hostapd.conf
  
Zeile 1140: Zeile 1155:
 ssid=muenchen.freifunk.net/welt ssid=muenchen.freifunk.net/welt
  
-country_code=US+country_code=DE
  
 interface=wlan0 interface=wlan0
Zeile 1171: Zeile 1186:
 </file> </file>
  
-Anschließend ativieren und starten wir den **''hostapd''**-Daemon.+Anschließend aktivieren und starten wir den **''hostapd''**-Daemon.
    # systemctl unmask hostapd    # systemctl unmask hostapd
    # systemctl enable hostapd    # systemctl enable hostapd
Zeile 1202: Zeile 1217:
 </file> </file>
  
-Am Besten nochmal rebooten um sicher zugehen dass alles passt, danach einfach mit dem ClientWifi verbinden.+Am Besten nochmal rebooten um sicher zugehendass alles passt, danach einfach mit dem ClientWifi verbinden.
    # systemctl reboot    # systemctl reboot
  
 ===== LAN Clients ===== ===== LAN Clients =====
-Will man LAN Clients versorgen, so erstellt man am einfachsten ein VLAN getaggtes Clientnetz. Dazu erstellt man in der Konfigurationsdatei **''/etc/network/interfaces''** diezugehörige Konfiguration. Im folgenden Beispiel nutzen wir die VLAN-ID **''333''** und definieren zunächst einmal das VLAn-Interface und fügen es anschließend in der vorhandenen Bridge hinzu.+Will man LAN Clients versorgen, so erstellt man am einfachsten ein VLAN getaggtes Clientnetz. Dazu erstellt man in der Konfigurationsdatei **''/etc/network/interfaces''** die zugehörige Konfiguration. Im folgenden Beispiel nutzen wir die VLAN-ID **''333''** und definieren zunächst einmal das VLAn-Interface und fügen es anschließend in der vorhandenen Bridge hinzu.
    # vim /etc/network/interfaces    # vim /etc/network/interfaces
 <file bash /etc/network/interfaces> <file bash /etc/network/interfaces>
Zeile 1313: Zeile 1328:
  
 ==== Installation der Software-Bibliotheken ==== ==== Installation der Software-Bibliotheken ====
-Jetzt installieren wir die notwendige Python Library um das Display ansteuern zu können.+Jetzt installieren wir die notwendige Python Bibliotheken  um das Display ansteuern zu können.
    # apt install git fonts-freefont-ttf -y    # apt install git fonts-freefont-ttf -y
    # cd /usr/local/src/    # cd /usr/local/src/
Zeile 1601: Zeile 1616:
 </file> </file>
  
-Anschließend Informieren wir unser System über unser definiertes Daemon-Startscript und aktivieren dies auch gleich noch. +Anschließend informieren wir unser System über unser definiertes Daemon-Startscript und aktivieren dies auch gleich noch. 
    # systemctl daemon-reload    # systemctl daemon-reload
    # systemctl enable oled-bandwidth.service    # systemctl enable oled-bandwidth.service
  
-Zu guter letzte rebooten wir nun unseren Rechner.+Zu guter Letzt rebooten wir nun unseren Rechner.
    # systemctl reboot    # systemctl reboot
  
  • knb/rpb4_wg.txt
  • Zuletzt geändert: 2023/11/04 21:29
  • von django