Mqtt/autol3VERALTET

Aus Freifunk Franken
Wechseln zu:Navigation, Suche

Hier möchte ich mal kurz beschreiben was ich mir grob unter autol3 vorstelle:

Ziele

  • Die komplette Konfiguration soll im WebUI ermöglicht werden, kein SSH mehr nötig
  • Der Router soll auf Wunsch vollkommen automatisch konfiguriert werden und als Layer 3 Router funktionieren
  • Es soll jederzeit manuell eingegriffen werden können und auch nur Teile manuell konfiguriert werden können z.b.:
    • VLAN Settings default laden aber IPv4 und IPv6 manuell konfigurieren
    • IPv4 und IPv6 automatisch konfigurieren aber VLAN Settings manuell anpassen
    • VLAN und IPv4/IPv6 automatisch konfigurieren aber einen manuellen wireguard Tunnel anlegen
    • Prinzipiell ist die Idee jede Kombination schon von grundauf zu ermöglichen so das kein geschlossenes System, wie es bei der aktuellen Node Firmware ist, entsteht und jeder manuell dort eingreifen kann wo er es für nötig hält aber Sachen automatisch konfigurieren lassen kann die selbst (noch) nicht verstanden werden.
  • Standardmässig soll immer eine manuelle Konfiguration vorgegeben sein, das autol3 muss explizit aktiviert werden.
  • Die automatische Konfiguration soll so dezentral wie möglich sein
    • MQTT Broker werden als Cluster betrieben das jeder mitbetreiben kann
      • Ein Routerbetreiber kann sich einen MQTT Server aussuchen den er anfragt, er ist auf keinen bestimmen angewiesen
    • Jeder kann IP Adressen im MQTT Cluster anbieten

Automatische IPv6 Konfiguration

Wird der Haken gesetzt wird das package fff-autoconfig-v6 aktiv. Per Cronjob wird der Router per mqtt eine Nachricht versenden an /ipv6/asknew und als Inhalt seine MAC Adresse. Nun können viele Leute antworten mit "ich hab hier eine IP Adresse nutzt diese" dies geschieht auf dem Topic IPv6/usethis/$MAC/$ASSIGNER mit einer kleinen json als Inhalt:

{ "assigner": "$ASSIGNER", "ip": "ipv6 Adresse mit Subnetzangaben z.b. 2001:db8::/64" }

was der Router nach seinem asknew abhört. In der aktuellen Version wird einfach die erste Antwort verwendet und die IP Adresse konfiguriert und sich in der /etc/config/fff gemerkt woher die Adresse stammt und welche verwendet wird.

Alle 5 Minuten fragt der Router nun nach, ob er die Adresse noch verwenden darf. Dazu prüft er erst ob er eine Adresse hat und wenn das der Fall ist sendet er an das Topic /ipv6/canusethis/$ASSIGNER eine JSON mit folgenden Inhalt:

{ "mac":"$MAC", "ip":"$IP" }

er erwartet innerhalb von 5 Sekunden eine Antwort auf dem Topic /ipv6/canusethisanswer/$MAC (aktuell wird als Inhalt ein ack versendet, prinzipiell wird aber nur geprüft ob eine Antwort kommt). Sollte keine Antwort kommen, wird die aktuelle IPv6 Konfiguration komplett verworfen und wieder mit asknew von vorne angefangen.

Zum aktuellen Zeitpunkt wird immer die erste IP Adresse genommen die per MQTT kommt, der User hat aber jetzt schon manuelle Eingriffsmöglichkeit indem er bestimmte Assigner blacklistet. Zukünftig ist auch angedacht hier den User auf Wunsch freie Wahl zu lassen, welche der vielen möglichen Antworten er verwenden will. Dies ist zum aktuellen Zeitpunkt aber noch nicht implementiert.

Automatische IPv4 Konfiguration

Dies funktioniert grundsätzlich nach dem gleichen Prinzip wie IPv6 nur das der Router hier sich nur eine einzelne Adresse per mqtt geben lässt, als /32 konfiguriert und für Clients das Subnetz 192.168.0.1/16 verwendet, welches auf die einzelne Adresse geNATtet wird. Prinzipiell machen wir hier cgnat wie es große Provider auch machen. Als Topic wird hier statt /ipv6 dann /ipv4 verwendet.

Automatische wireguard Konfiguration

Hier ist noch kein Code vorhanden, daher nur eine grobe Vorstellung wie das ganze vielleicht funktionieren könnte:

1. Der Router sendet seinen Public Key und E-Mail Adresse ins mqtt und erwartet eine Rückmeldung von Servern wohin er sich verbinden darf

2. Der Router konfiguriert sich diese Verbindung und nutzt diese

Da hier eine automatische Konfiguration erfolgt, müssen auf den wireguard Gegenstellen einige Sicherheitsmaßnamen greifen. Ich könnte mir z.b. folgendes vorstellen:

  • Verfizierung der E-Mail Adresse
  • Man lernt von den Routern nur /64 IPv6 Adressen
  • Man lernt von den Routern nur /32 IPv4 Adressen
  • Man lernt von den Routern nur 10/8 (oder 10.50/16 bzw. 10.83/16) Adressen
  • Man lernt von den Routern nur v6 Subnetze die auch im mqtt durch die Gegend fliegen
  • Man lernt nur eine bregrenzte Anzahl an Routen von den Routern um ein flooden zu verhinden

Voting