Table of Contents

802.11s-basiertes Mesh-Funknetz

802.11s ist ein offener Standard zur drahtlosen Verbindung von Geräten, ohne dafür Infrastruktur aufbauen zu müssen. Er arbeitet am Layer 2 und stellt sicher, dass alle Knoten einander wie auf einem gebridgten Layer-2-Netz sehen können, als ob sie an einen gemeinsamen Switch angesteckt wären. Die Layer 3-Infrastruktur funktioniert darauf aufbauend, z.B. IP-Routing und DHCP-Clients, aber auch komplexere Dienste wie Batman, Bird, OLSR usw.

Status

802.11s funktioniert verlässlich seit OpenWrt 19.07 und später, inklusive Authentifizierung und Verschlüsselung - solange Hardware- bzw. Treiberunterstützung vorhanden ist und wpad-mesh-openssl (oder ähnliches) installiert ist.

:!: Es scheint (bestätigt in v19.07.4) ein Problem mit der Weiterleitung von ARP zu geben - die Mesh-Funktion funktioniert nur verlässlich von Mesh-Points aus, welche in Funkreichweite des Mesh-Portals (MPP) sind. Näheres hierzu unter https://forum.openwrt.org/t/bug-report-802-11s-mesh-v19-07-4/78524/4

Konfiguration

Zunächst ist es nötig das standardmäßig installierte wpad wie folgt zu entfernen

# opkg remove wpad-mini
# opkg remove wpad-basic

Dieses wird nun durch die Abhängigkeit wpad-mesh-openssl ersetzt:

# opkg install wpad-mesh-openssl

Bearbeite /etc/config/wireless und versichere dich dass:

config wifi-iface 'mesh'
        option network 'mesh'
        option device 'radio0'
        option mode 'mesh'
        option mesh_id 'mein-Meshnetz' # beliebig wählbar, aber identisch auf allen Geräten, die im selben Mesh sein sollen (wie auch das Passwort)
        option encryption 'psk2/aes' # oder 'none', um keine Verschlüsselung zu verwenden
        option key 'mein-geheimes-Passwort'

Hinweis: Der Endgerätezugang wird durch eine Bridge zwischen 'ap' und dem 'mesh'-Interface hergestellt.

Um im Mesh ein anderes Routingprotokoll wie z.B. OLSR zu verwenden, deaktiviere das 802.11s-eigene Routingprotokoll mit option mesh_fwding '0' .

Für eine gesamte Liste an Mesh-Parametern können die folgenden Werte im Quelltext von mac80211.sh eingesehen werden:

Alternativ hilft folgender Befehl:

# iw dev <devname> get mesh_param 

um eine Liste von verfügbaren Mesh-Parametern zu erhalten, diese ist jedoch nicht dokumentiert.

Danach noch das WLAN reinitialisieren und testen ob es funktioniert:

# wifi
# logread -l 20 -f
# iw dev wlan0 station dump

Unterstützung durch WLAN-Hardware

:!: Die 802.11s-Unterstützung hängt vom WLAN-Treiber ab. Die meisten aktuellen Open-Source-Treiber funktionieren.

Deine Hardware unterstützt 802.11s-Mesh, wenn unter den unterstützten Interface-Modi “mesh point” gelistet ist.

iw list | grep "Supported interface modes" -A 9

...
      Supported interface modes:
                 * IBSS
                 * managed
                 * AP
                 * AP/VLAN
                 * WDS
                 * monitor
                 * mesh point
                 * P2P-client
         * P2P-GO
...

Beispiel: ein Router mit ath9k

iw list
...
valid interface combinations:
         * #{ managed, WDS } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1, #{ IBSS } <= 1,
           total <= 2048, #channels <= 1, STA/AP BI must match
         * #{ IBSS, AP, mesh point } <= 1,
           total <= 1, #channels <= 1, STA/AP BI must match, radar detect widths: { 20 MHz (no HT), 20 MHz }
...

Beispiel: ein USB-Stick mit ath9k_htc

iw list
...
valid interface combinations:
         * #{ managed, P2P-client } <= 2, #{ AP, mesh point, P2P-GO } <= 2,
           total <= 2, #channels <= 1
...

Die Kommandozeile / CLI verwenden

iw ist ein nl80211-basierted Kommandozeilenprogramm zur Konfiguration von WLAN-Hardware. Mehr erfahren...

Erstelle ein neues Interface namens “mesh0”

iw phy phy0 interface add mesh0 type mp mesh_id meinmesh

Stelle sicher, dass das neue Interface auch wirklich existiert

ifconfig -a | grep mesh0

     mesh0      Link encap:Ethernet  HWaddr 00:18:39:14:48:B5

Schalte das Interface mesh0 aktiv

ifconfig mesh0 up

Weise dem Interface eine IP-Adresse zu, beispielsweise 10.0.0.1

ifconfig mesh0 10.0.0.1

Standardmäßig verwenden Mesh Points den WLAN-Kanal 1 und versuchen automatisch Links zu anderen Meshknoten mit derselben Mesh-ID am selben Kanal herzustellen.

Überprüfen

Verwende den iw-Befehl um Peer-Links oder die Tabelle der erreichbaren Nodes in Deinem Mesh anzuzeigen.

iw dev $MESH_IFACE station dump
iw dev $MESH_IFACE mpath dump

Beispiel:

iw dev $MESH_IFACE station dump
    Station 00:15:6d:84:14:10 (on mesh)
         inactive time:  1320 ms
         rx bytes:   352
         rx packets: 4
         tx bytes:   174
         tx packets: 2
         signal:     -61 dBm
         tx bitrate: 1.0 MBit/s
         mesh llid:  32577
         mesh plid:  15969
         mesh plink: ESTAB
    Station 00:15:6d:84:14:09 (on mesh)
         inactive time:  3370 ms
         rx bytes:   1064
         rx packets: 12
         tx bytes:   545
         tx packets: 7
         signal:     -53 dBm
         tx bitrate: 1.0 MBit/s
         mesh llid:  41036
         mesh plid:  24435
         mesh plink: ESTAB

Einen einzelnen Peer vom Meshen abhalten

Dazu ist möglicherweise das Paket iw-full nötig! Verwehre einem Peer das Meshen, basierend auf seiner MAC-Adresse

iw dev $MESH_IFACE station set $MAC_TO_BLOCK plink_action block

Überprüfe wie oben gezeigt mit iw dev $MESH_IFACE station dump

    mesh plink:    BLOCKED

Peer wieder freigeben:

iw dev $MESH_IFACE station set $MAC_TO_UNBLOCK plink_action open

Laut dieser Quelle bleibt die plink_action nach Reconnects von Mesh-Links nicht erhalten.

Hintergrundinformation