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.

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

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:

  • radio0 nicht deaktiviert ist,
  • radio0 auf allen Geräten, die am Mesh teilnehmen sollen, kompatibel konfiguriert ist (selber Kanal, selbe Mesh-ID, selbes Passwort)
  • und ein iface-Eintrag entsprechend folgender Zeilen vorhanden ist:
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:

  • MP_CONFIG_INT
  • MP_CONFIG_BOOL
  • MP_CONFIG_STRING

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

:!: 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
...

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.

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

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.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2021/01/05 08:08
  • by aaaaalbert