Tutorial: 802.11s mesh in eine VM bridgen

Moin,

sobald mesh-batadv-core: introduce 11s mesh, refactor wireless config by tcatm · Pull Request #422 · freifunk-gluon/gluon · GitHub gemerged ist, kann man über 802.11s ziemlich leicht virtuelle Maschinen mit Gluon ins Mesh bringen.

Voraussetzung: Es gibt in Funkreichweite einen Gluon Knoten, der bereits 802.11s unterstützt und rudimentäre Kenntnisse im Umgang mit QEMU. Falls Dienste wie der NetworkManager laufen, die alle neuen Netzwerkinterfaces an sich reißen wollen, solltet ihr diese beenden oder die entsprechenden Interfaces ignorieren lassen (siehe ganz unten).

VM starten

Wir laden zunächst das Gluon x86-64 factory Image herunter. Dessen Dateiname endet auf ...-x86-64.img.gz. Das könnte z.B. das nightly aus Lübeck sein (Achtung! Die URL ist morgen schon nicht mehr erreichbar) und entpacken es:

wget -O gluon-x86-64.img.gz http://srv01.luebeck.freifunk.net/firmware/experimental/factory/gluon-ffhl-0.8~exp20150726-x86-64.img.gz
gzip -d gluon-x86-64.img.gz

Anschließend starten wir eine VM mit einem Netzwerkinterface (später WAN):

sudo qemu-system-x86_64 -enable-kvm -m 64 -hda gluon-x86-64.img -netdev tap,id=mynet0 -device e1000,netdev=mynet0

Das Ausgabefenster der VM braucht uns erstmal nicht weiter zu interessieren. Wir machen auf dem Host weiter und konfigurieren das Interface tap0 (entspricht WAN) um den Configmode zu erreichen:

sudo ip link set up tap0
sudo ip address add 192.168.1.2/24 dev tap0

Nun können wir den Configmode der VM über http://192.168.1.1 erreichen. Dort aktivieren wir Mesh-on-WAN und schließen die Konfiguration ab. Die VM bootet dabei einmal neu.

WLAN Karte konfigurieren

Jetzt können wir die WLAN Karte konfigurieren. Dazu verschaffen wir uns zunächst einen Überblick über die WLAN Interfaces des Hosts durch Aufruf von iw dev:

# iw dev
phy#1
    Interface wlan1
        ifindex 13
        wdev 0x300000001
        addr f8:1a:67:0d:ce:f0
        type managed
phy#0
    Interface wlan0
        ifindex 3
        wdev 0x1
        addr 18:f4:6a:3c:49:4f
        type managed
        channel 44 (5220 MHz), width: 40 MHz, center1: 5230 MHz

In diesem Fall ist wlan1 die per USB angeschlossene WLAN Karte und wlan0 die im Laptop verbaute. Ich werde wlan1 verwenden.

Falls das Interface up ist, setzen wir es down:

sudo ip link set down dev wlan1

Das ist nötig, da ein Interface, das up ist, nur eingeschränkt konfiguriert werden kann. Wir versetzen das Interface nun in den (802.11s) mesh Modus und setzen es up:

sudo iw dev wlan1 set type mesh
sudo ip link set up dev wlan1

Und treten dem Mesh bei (wie euer Mesh heißt entnehmt ihr im Zweifelsfall eurer site.conf):

sudo iw dev wlan1 mesh join ffhl-mesh mcast-rate 12 mesh_fwding=0

Mit iw dev wlan1 station dump erhalten wir einen Überblick über die gefundenen Nachbarknoten:

Station 92:fb:53:82:06:02 (on wlan1)
	inactive time:	30 ms
	rx bytes:	1157699
	rx packets:	8563
	tx bytes:	176
	tx packets:	3
	tx retries:	0
	tx failed:	0
	signal:  	-33 [-33] dBm
	signal avg:	-33 [-33] dBm
	Toffset:	30766736994 us
	tx bitrate:	52.0 MBit/s MCS 5
	rx bitrate:	54.0 MBit/s
	mesh llid:	1093
	mesh plid:	1687
	mesh plink:	ESTAB
	mesh local PS mode:	ACTIVE
	mesh peer PS mode:	ACTIVE
	mesh non-peer PS mode:	ACTIVE
	authorized:	yes
	authenticated:	yes
	preamble:	long
	WMM/WME:	yes
	MFP:		no
	TDLS peer:	no

WLAN mit VM verbinden

Um nun noch die VM mit dem WLAN zu verbinden, genügt es eine Bridge mit beiden Interfaces (wlan1 und tap0) zu erstellen:

sudo brctl addbr br-mesh
sudo brctl addif br-mesh tap0
sudo brctl addif br-mesh wlan1
sudo ip link set up br-mesh

Jetzt ist es auch an der Zeit mal die Eingabetaste im Fenster der VM zu betätigen und mittels batctl o zu schauen, ob sie schon Nachbarn gefunden hat. Das kann ein paar Sekunden dauern.

Warum funktioniert das? WLAN kann man doch garnicht bridgen!

Dieses Setup baut fast schon zwei verschachtelte Layer2 Meshes auf: Das bekannte batman-adv Mesh und darunter nochmal das 802.11s Mesh. Das 802.11s Mesh wird hierbei verwendet die Pakete zwischen VM und Knoten über den Host weiterzuleiten während batman-adv eine Ebene höher die übliche Freifunkinfrastruktur bereitstellt.

An dieser Stelle wäre es tatsächlich möglich (und es funktioniert auch!) batman-adv komplett wegzulassen und auf dem Knoten einfach alle Interfaces (Clientwlan, meshwlan, mesh-on-wan-Port, mesh-vpn-Tunnel) mit einer Bridge zu verbinden. Dabei würden wir den batman-adv Overhead sparen, allerdings auch das Gatewayfeature verlieren. In dem Falle könnten in Freifunktypischen Netzen jedoch auch weniger optimale Pfade genutzt werden, aber das müsste man einfach mal weiter erforschen.


NetworkManager: Interfaces ignorieren

Um den NetworkManager abzugewöhnen bestimmte Interfaces (im Beispiel wlan1 und wlan2) zu konfigurieren, kann man die Datei /etc/NetworkManager/NetworkManager.conf anpassen und folgende Zeilen ergänzen:

[keyfile]
unmanaged-devices=interface-name:wlan1;interface-name:wlan2

Änderungen an dieser Datei werden sofort aktiv.

7 Likes

Ein Super Danke für die Entwicklung immer neuerer Features, allein mir erschließt sich gerade der Sinn eines solchen Setups nicht. Oder ist das nur das Testbed für die kommende Hybride Infrastruktur? Das heißt wir sprechen in Zukunft auf den VPN Links nur noch 802.11s?

Ihr baut doch so gerne VPN Offloader :wink: Damit kann man direkt vom Offloader per WLAN weiter funken oder auch mal einen Laptop mit einer Gluon VM als Knoten ins Mesh hängen.

802.11s geht nur über WLAN. Auf allen anderen Links ist es ganz normales Ethernet (wie bisher bei mesh-on-LAN und -WAN auch). Oder kurz: Die Gluon VM weiß in diesem Setup garnichts von 802.11s. Die macht ganz normal mesh-on-WAN.

Für Gluonbasierte Firmwares sieht der Plan vor IBSS durch 11s zu ersetzen (mit parallelem Einsatz für eine Übergangsphase).

3 Likes

FYI: 802.11s Support ist vorhin im Gluon master angekommen.

4 Likes

Wie wäre jetzt das weitere vorgehen um BATMAN_adv aus den fastd Tunneln zu verbannen?

1 Like

Die wichtigste Frage vorab: Was kann man damit zukünftig machen und / oder wofür ist die Implementierung gedacht?

Eventuell erledigt sich der Rest dann schon…

Redistribuiert batman die mac-adressen der 802.11s Infrastruktur in die batman Infrastruktur? Sonst weiß das restliche Netz da nicht das es dort Maschinen gibt und worüber diese erreichbar sind?!

Arbeitet HPWM / AODV automatisch ohne Eingriffe?

Müssen root und gate gesetzt sein? Ist es dann sinnvoll eine Meshtiefe anzugeben, oder kommt 802.11s da problemlos mit klar, wenn es dutzende Announcements lokal gibt?

Erst mal DANKE @tcatm , es läuft wie geschmiert mit 802.11s und auch das MOL Problem hat sich damit erledigt!
Im ersten test konnte ich feststellen das auch nach 3x 841 (WLAN Mesh), am ende nur 2Mbit weniger rausgekommen
sind als auf dem Uplink.

Zu den Gateways, was ist denn mit dieser Option?

Mesh Gate

A mesh gate is just a mesh node that connects to an external network.

Enable gate announcements

You can configure gates to advertise their presence on the mesh. We do this by including those advertisements in root announcements. To enable this functionality you must make your gate a root node using Proactive RANN and enable gate announcements:

iw mesh0 set mesh_param mesh_hwmp_rootmode=4
iw mesh0 set mesh_param mesh_gate_announcements=1

Gruß