http://www.chillispot.info/chilliforum/viewtopic.php?id=107
http://robin.forumup.it/about2471-0.html
http://lists.freeradius.org/pipermail/freeradius-devel/2011-August/006263.html
Pues según he podido investigar en varios sitios, para hacer roaming en varios APs, una forma (no se si la mejor o la peor pero no deja de ser una solución) es tras autenticarse con el ticket, añadir el usuario en rackcheck con la mac, de la siguiente forma
1º En el radius (en mi caso freeradius con backend de mysql) se crean los usuarios usando como username la MAC del dispositivo que se quiere autenticar sin preguntar en el portal cautivo. Como atributo, Password y como Value, un password arbitrario que será para todos el mismo. Este password se ve en el segundo paso, porque hay que configurarlo en el chilli.conf
mysql> select * from radcheck where attribute='Password';
+------+-------------------+-----------+----+---------+
| id | username | attribute | op | value |
+------+-------------------+-----------+----+---------+
| 1829 | 64-A7-69-81-10-ED | Password | := | pass123 |
| 1831 | 98-0C-82-96-2F-0C | Password | := | pass123 |
+------+-------------------+-----------+----+---------+
La mac del cliente se puede obtener despues de la primera autenticación existosa de la tabla radacct
en el campo callingstationid
| radacctid | acctsessionid | acctuniqueid | username | groupname | realm | nasipaddress | nasportid | nasporttype | acctstarttime | acctstoptime | acctsessiontime | acctauthentic | connectinfo_start | connectinfo_stop | acctinputoctets | acctoutputoctets | calledstationid | callingstationid | acctterminatecause | servicetype | framedprotocol | framedipaddress | acctstartdelay | acctstopdelay | xascendsessionsvrkey |
+-----------+------------------+------------------+-------------------+-----------+-------+--------------+-----------+-----------------+---------------------+--------------+-----------------+---------------+-------------------+------------------+-----------------+------------------+-------------------+-------------------+--------------------+-------------+----------------+-----------------+----------------+---------------+----------------------+
| 139 | 51b0a3c100000005 | 21b6a99e5ed39028 | 64-A7-69-81-10-ED | | | 0.0.0.0 | 5 | Wireless-802.11 | 2013-06-06 16:59:47 | NULL | 0 | | | | 0 | 0 | 00-27-22-C4-29-3D | 64-A7-69-81-10-ED | | | | 192.168.182.7 | 0 | 0 | |
+-----------+------------------+------------------+-------------------+-----------+-------+--------------+-----------+-----------------+---------------------+--------------+-----------------+---------------+-------------------+------------------+-----------------+------------------+-------------------+-------------------+--------------------+-------------+----------------+-----------------+----------------+---------------+----------------------+
2ª parte
añadir a las opciones de chillispot los parametros de macauth y macpassword = pass123 (en mi caso)
Mi fichero de chillispot es el siguiente:
coaport 3799
lease 600
dhcpif ath0
radiusserver1 10.0.1.254
radiusserver2 10.0.1.254
radiusauthport 1812
radiusacctport 1813
dns1 8.8.8.8
net 192.168.182.0/24
uamserver http://10.0.1.254/hotspotlogin.php
radiusnasid ubiquiti
radiussecret 1964os
uamallowed 192.168.182.0/24,10.0.1.254,8.8.8.8
uamsecret 1964os
macauth
macpasswd pass123
3º Meter un trigger para que cuando se autentique alguien, meta en radcheck la mac
DELIMITER |
CREATE TRIGGER mac_radcheck AFTER INSERT ON radpostauth
FOR EACH ROW BEGIN
INSERT INTO radcheck (username,attribute,op,value) VALUES('mac','Password',':=','pass123');
END
|
mac hay que sustituirlo por la consulta que me da la mac del usuario autenticado
select callingstationid from radacct where username='vitoria' order by acctstarttime desc limit 1;
y todo junto sería...
DELIMITER |
CREATE TRIGGER mac_radcheck AFTER INSERT ON radpostauth
FOR EACH ROW BEGIN
INSERT INTO radcheck (username,attribute,op,value) VALUES((select callingstationid from radacct where username=NEW.username order by acctstarttime desc limit 1),'Password',':=','pass123');
END
|
delimiter ;
------
El trigger no funciona bien, he decidido poner un cron con alguna query como la siguiente
select distinct radpostauth.username,radacct.callingstationid from radpostauth,radacct where radpostauth.username=radacct.username and radpostauth.username not like '%-%';
No hay comentarios:
Publicar un comentario