lunes, 3 de junio de 2013

wifi chillispot roaming with radius

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