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