Idee zum Client Roaming (Gluon Modul)

Hallo.
Wir haben das Problem das Clients auf einem Event nicht von AP zu AP geschubst werden. Stichwort Enterprise Roaming.
Cisco z.B. implementiert dafür ein WLAN „Cluster“ um die Clients je nach Empfangsstärke hin und her zu schubsen.

Nun zu meiner Idee:

Wir schauen jede 5 Sekunden nach Clients und entscheiden in einem Script ob der Client eine gewisse Empfangsstärke unterschritten hat.
Ist das der Fall senden wir ein deauth Paket und blocken den reauth für eine Zeit (Millisekunden).
Sofern sich ein anderer Freifunk AP in der Nähe befindet wird sich der CLient also sofort auf einem anderen AP einloggen sodass man das Prinzip des Roamings nachgebiltet hat.

Das Ganze ist sogar mit einem Bash Script in einer loop und Boardmittel zu realisieren:

ubus call hostapd.wlan0 del_client ‚{„addr“:„00:00:ca:ff:ee:00“, „reason“:1, „deauth“:true, „ban_time“:1000}‘

Was haltet ihr davon?

Wenn auf einem Event viele APs verteilt sind wechselt der Client ansonsten erst wenn die Verbindung abreißt den AP.
Mit dieser Lösung könnte man die Wahl eines optimalen AP erzwingen.

Das nötige Gluon Modul würde mit ein paar kb sogar noch in jeden Flash passen.

Ideen? Anregungen?

3 Likes

Hier der erste Versuch eines simplen Scripts. Das Command was ausgeworfen wird funktioniert, jdeoch bin ich aktuell scheinbar zu blöd dieses im Script auch ausführen zu können. Funktionieren tut es jedenfalls schon…wenn ich das Kommando manuell ausführe

#!/bin/sh

# The SNR of an access point signal, measured at the user device, decreases as range to the user increases

LOWER=15

iwinfo client0 assoclist | grep ms > /tmp/clientlist

while read p; do
MAC=$(echo $p | cut -f1 -d" ")
SNR=$(echo $p | sed 's/^.*(/(/' | cut -f1 -d")" |  sed "s/^(SNR //")
echo $MAC - $SNR

if [ "$SNR" -lt "$LOWER" ]; then
                echo $MAC IS $SNR - LOWER THAN $LOWER DEAUTH THEM
                cmd=$(echo "ubus call hostapd.client0 del_client '{\"addr\":\"$MAC\", \"reason\":1, \"deauth\":true, \"ban_time\":1000}'")
                echo $cmd
             #   $cmd
fi

done </tmp/clientlist

Man darf sich fragen, ob das die Sessions der Clients aushalten, wenn kein anderer AP in der Nähe ist und sie ständig „rumroamen müssen“

Hast du das mal getestet?

Ich wollte erstmal was entwickeln um es überhaupt testen zu können. Cisco und Funkwerk machen das ja auch mittels deauth also kann es nicht ganz verkehrt sein

Ja, nur gibt es bei denen einen zentralen Controler, der alle Clients kennt. Man könnte es dezentral bauen, indem man es in die Kommunikation zwischen den Knoten miteinfließen lässt. Muss das mal eben etwas weiter zerdenken :smiley:

Es geht ja um geplant abgedeckte Eventflächen. da wird also immer ein AP in der Nähe sein.
Es generell auszurollen halte ich für nicht sinnvoll

Im Randbereich der Eventflächen haben wir dann aber wieder das Problem.

Wie erkennt denn der AP den nicht assignten „Non-Client“, um zu sehen, dass er bei ihm mit Stärke X zu hören ist (und das dann an die Nachbarn zu broadcasten)?
Leistet der Hostapd das?

Ich wüsste nicht wieso das notwendig wäre. Die Implementierung der WLAN Treiber gewährleistet einen sofortigen reauth. Wird dieser geblockt wird es am nächsten Ap mit dem besten Empfang aus Client Sicht versucht. Das habe ich getestet und es scheint zu gehen.
Oder wir darf ich die Frage verstehen?

Um das Problem im Randbereich auszuklammern: es muss eben die Ganze Fläche mit einer Mindestabdeckung zur Verfügung stehen. In Randbereichen kann der Wert der SNR ja einfach höher angesetzt werden außer man möchte wirklich nur den definierten Bereich