Lieber Michael,
ich habe noch nicht ausprobiert, was noch funktioniert, wenn man den iPads nur WLAN ohne Internetzugang gibt. Ins interne Netz müssen sie ja in jedem Fall bei uns um sich bei Relution anzumelden, wir benutzen Tabletkoffer, also viele User pro Gerät, das ist aber eine andere Aufgabenstellung.
Unser Use-Case sind private Handys, die zeitweise im Unterricht, z.B. wenn die Tabletkoffer ausgebucht sich, für Recherche oder Kahoots verwendet werden sollen, aber eben nicht dauerhaft, sobald sie einmal drin sind unsere Leitung leersaugen können. Für die benötigen wir auch kein internetloses WLAN. Bei Dir geht es ja eher um immer im WLAN sein und nur das Internet AN und AUS. Das wird wohl eher über den Proxy geregelt, da sind wir aber nicht weit gekommen mit an- und ausschalten in Echtzeit.
Viele Grüße,
Adrian
Ok, wenn bei Euch BYOD-Geräte zwischendurch on-/offline sein sollen, ginge das ja auch mit einem Captive Portal (so machen wir das). Das andere WLAN, das nur für die iPads gedacht ist, haben wir über Zertifikate abgesichert. Das kommt kein anderes Gerät mehr rein. Daher können die Schüler auf diesem Weg auch nicht mehr die Leitung zumüllen. Vorher (WLAN mit PSK) war das aber echt ein Problem … da waren dann täglich mehr als 2000 Geräte online; und davon waren die meisten sicherlich nicht mit Dingen beschäftigt, die mit dem Unterricht zu tun hatten.
Viele Grüße,
Michael
Hallo Adrian,
Vielen Dank für deine tolle Lösung.
Es ist aber nicht nötig etwas an die Webui zu drehen, da es einen Post Hooks Ordner gibt.
Da die Schulen verschiedenen FWSysteme oder WlanInfra haben ist es nötig flexibel einen Skript auszuführen nachdem die Mitgliedschaft ins AD geändert wurde.
Der Ordner ist /etc/linuxmuster/tools/hooks/group-manager. Da kann man seinem Postscript legen, und es wird automatisch ausgeführt, und es sieht so aus: /etc/linuxmuster/tools/hooks/group-manager/MY_SCRIPT {ACTION} {GROUP} {USERLIST}.
Als Parameter für diese Skripte gibt es:
- ACTION :
removeoderadd - GROUP : betroffene Gruppe wie
wifioderinternet - USERLIST : Liste von cn, getrennt mit Komma.
Der Skript muss natürlich ausführbar sein (+x).
Das ist nicht genug dokumentiert, das stimme zu, ich bin da völlig Schuld, ich muss die Zeit dafür finden.
Gruß
Arnaud
Lieber Arnaud,
vielen Dank für den Hinweis zum Hooks Ordner, das ist gut zu wissen und probieren wir aus.
Viele Grüße,
Adrian
Hallo Adrian,
vielen Dank für eure Arbeit.
Das ist so cool, dass das für die, die unifi verwenden (was ja gefühlt die meisten sind), ein Problem gelößt ist.
Eine Datenbank auf dem Server anlegen und das Accounting einschalten wirkt mir nicht wie ein Hexenwerk: das sollte machbar sein.
LG
Holger
Liebe Kollegen,
zur Vervollständigung: wir haben jetzt den Hinweis von Arnaud befolgt und das Script angepasst auf das Hooks-Verfahren. D.h. es liegt jetzt hier …
nano /etc/linuxmuster/tools/hooks/group-manager/disconnect_radius.py
#!/usr/bin/env python3
#######################################################
# Hook-Skript zur Trennung von Radiususern durch #
# Aufruf von radclient disconnect auf dem Accesspoint #
# mit dem der User verbunden ist #
# erstellt Februar 2026 von Simon Brahmst #
#######################################################
import sys
import mysql.connector
import subprocess
if(not(sys.argv[1] == "remove" and sys.argv[2] == "wifi")):
exit(0)
def disconnect():
db = mysql.connector.connect(
host="127.0.0.1",
user="radius",
password="<ROOTPWD>",
database="radius"
)
cursor = db.cursor()
userlist = sys.argv[3].split(',')
for username in userlist:
cursor.execute("SELECT username,acctsessionid,calledstationid,nasipaddress,acctstoptime FROM radacct WHERE username = \'" + username + "\' AND acctstoptime IS NULL;")
result = cursor.fetchall()
if(not result):
continue
for row in result:
ASI = row[1]
NI = row[2].split(':')[0].replace('-','').lower()
IP = row[3]
p = subprocess.Popen("echo Acct-Session-ID = \'"+ASI+"\',NAS-Identifier = \'"+NI+"\' | radclient -x "+IP+" disconnect \"<RADIUSSECRET>\"",shell=True)
p.wait()
disconnect()
und muss nur noch mit chmod +x ausführbar gemacht werden.
So übersteht es auch Updates der WebUI.
Vielen Dank @Arnaud für den Hinweis mit dem Hooks Ordner.
Viele Grüße,
Adrian
Hallo Adrian,
Top, danke für den Skript.
Wenn du willst können wir es als Beispiel im lmntools Git Repository legen: linuxmuster-tools/examples at lmn73 · linuxmuster/linuxmuster-tools · GitHub
Das wäre ein schönes Beispiel für anderen.
Gruß
Arnaud
Lieber Arnaud,
es kann gerne ins Git Repository, wichtig ist aber die Vorarbeit dazuzuschreiben, also dass man das Accouting aktivieren muss und eine SQL Datenbank anlegen und dass wir es bisher nur mit Unifi-APs getestet haben.
Liebe Grüße,
Adrian