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.