En este manual, te guiaré a través del proceso de utilizar FreeRadius como servidor RADIUS y MikroTik como servidor PPPoE para establecer una autenticación y autorización robusta en tu red. A lo largo de los siguientes pasos, aprenderás cómo crear usuarios con asignaciones de IP estáticas y dinámicas, así como cómo limitar el ancho de banda para estos usuarios, todo administrado directamente desde FreeRadius.
Nota
Antes de comenzar, es importante asegurarse de que ya tengas instalado y configurado correctamente el servidor RADIUS. Si aún no has completado esta parte, te recomiendo seguir las instrucciones detalladas en el manual de instalación y configuración del servidor FreeRADIUS.
Puedes acceder a ese manual aquí: http://foroisp.com/threads/1983-Inst...s-con-Mikrotik
De igual forma es importante que tengas configurado y funcionando un servidor PPPoE en tu Router Mikrotik, si aun no lo tienes puedes seguir los pasos de este manual aquí: http://foroisp.com/threads/1606-Como...oE-en-Mikrotik
Una vez hayas configurado exitosamente el servidor RADIUS, estarás listo para comenzar con los pasos que se describen en este manual. Descubrirás cómo crear usuarios con asignaciones de IP estáticas y dinámicas y cómo aplicar restricciones de ancho de banda a través del servidor FreeRadius. Sigue cada paso cuidadosamente para lograr una autenticación segura y un control eficiente del acceso a tu red.
Partiendo de la siguiente topologia de red.
1 Agregar el servidor FreeRadius al Router Mikrotik
Acceder al Router mikrotik ir la sección Radius y agregar nuevo registro [+]
Donde:
- Service: Aquí debes seleccionar PPP para protocolo de autenticación Point-to-Point Protocol.
- Address: Debes ingresar la dirección IP del servidor FreeRadius. Esta dirección indica dónde se encuentra el servidor RADIUS que procesará las solicitudes de autenticación y autorización.
- Protocol: Por defecto, el protocolo utilizado para las comunicaciones RADIUS es UDP (User Datagram Protocol), que es un protocolo de transporte liviano y eficiente.
- Secret: La clave secreta es un código compartido entre el router MikroTik y el servidor RADIUS. Sirve para autenticar y encriptar las comunicaciones entre ambos.
- Authentication Port: El puerto de autenticación (por defecto 1812) es el punto de entrada en el servidor RADIUS donde el router MikroTik enviará las solicitudes de autenticación de usuarios para su procesamiento.
- Accounting Port: El puerto de contabilidad (por defecto 1813) es el puerto en el servidor RADIUS donde se registrarán las actividades de los usuarios, como la duración de la sesión y el uso de ancho de banda.
2 Activar Autorización Radius en el protocolo PPP
En Mikrotik acceder a PPP > Secrets > PPP Authentication&Accounting y activar: Use Radius.
3 Creación de usuarios con IP Estática.
Para este ejemplo se creara un usuario para autenticación y autorización PPPoE con los siguientes datos:
- User: user1
- Password: 123456
- IP: 192.168.90.2
En nuestro servidor, acceder a la base de datos de FreeRADIUS
mysql -u root -p
USE radius;
Y creamos el usuario con los siguientes sentencias de sql.
INSERT INTO radcheck
(username, `attribute`, op, value)
VALUES('user1', 'Cleartext-Password', ':=', '123456');
INSERT INTO radcheck
(username, `attribute`, op, value)
VALUES('user1', 'Framed-Protocol', ':=', 'PPP');
INSERT INTO radcheck
(username, `attribute`, op, value)
VALUES('user1', 'Simultaneous-Use', ':=', '1');
INSERT INTO radreply
(username, `attribute`, op, value)
VALUES('user1', 'Framed-IP-Address', '=', '192.168.90.2');
Los registros que estás viendo en las tablas radcheck y radreply son parte de la configuración completa de un usuario para autenticación PPP en FreeRadius. Cada tabla almacena diferentes tipos de atributos relacionados con la autenticación y la autorización del usuario. A continuación, se explico el propósito de cada atributo y por qué se crearon varios registros para el mismo usuario:
En la tabla radcheck:
- Cleartext-Password: Este registro establece la contraseña en texto claro para el usuario. Cuando el usuario intenta autenticarse, el servidor FreeRadius verificará la contraseña ingresada con la almacenada en este registro. Es importante tener en cuenta que almacenar contraseñas en texto claro no es una práctica segura. En entornos de producción, se recomienda usar métodos de almacenamiento seguro, como hash y salting.
- Framed-Protocol: Este registro establece el protocolo que se utilizará durante la sesión. En este caso, el valor 'PPP' indica que el protocolo será PPP, que es comúnmente utilizado para conexiones PPPoE y autenticación de acceso remoto.
- Simultaneous-Use: Este registro controla la cantidad de sesiones simultáneas que el usuario puede tener activas. Establecerlo en 1 significa que solo se permitirá una única sesión activa al mismo tiempo para el usuario.
En la tabla radreply:
- Framed-IP-Address: Este registro especifica la dirección IP que se asignará al usuario durante la sesión. En este caso, la dirección IP '192.168.90.2' se asignará al usuario 'user1'.
Ahora, respecto a por qué se crearon varios registros para el mismo usuario, esto se debe a que cada registro representa un atributo específico que se utiliza para configurar diferentes aspectos de la autenticación y la autorización. FreeRadius utiliza tablas separadas para almacenar atributos que tienen diferentes propósitos. Por ejemplo, radcheck almacena atributos relacionados con la autenticación, mientras que radreply almacena atributos de autorización que se enviarán al cliente durante la sesión.
En resumen, la creación de múltiples registros con diferentes atributos en las tablas radcheck y radreply es una práctica común para configurar de manera completa y detallada la autenticación y la autorización de usuarios en un servidor FreeRadius. Cada atributo cumple una función específica en el proceso de autenticación y acceso a la red.
Comprobamos conexión en una PC Windows
Verificamos la conexión del usuario en nuestro Router.
4 Creación de usuarios con IP Dinámica
Para este ejemplo se creara un usuario para autenticación y autorización PPPoE con los siguientes datos:
- User: user2
- Password: 123456
- IP: Dinámica (Por medio de un Pool)
Accedemos a la base de datos de nuestro servidor freeRadius, y ejecutamos las siguientes sentencias sql.
INSERT INTO radcheck
(username, `attribute`, op, value)
VALUES('user2', 'Cleartext-Password', ':=', '123456');
INSERT INTO radcheck
(username, `attribute`, op, value)
VALUES('user2', 'Framed-Protocol', ':=', 'PPP');
INSERT INTO radcheck
(username, `attribute`, op, value)
VALUES('user2', 'Simultaneous-Use', ':=', '1');
INSERT INTO radreply
(username, `attribute`, op, value)
VALUES('user2', 'Framed-Pool', '=', 'dhcp_pool1');
Como se puede notar las sentencias son iguales a como se creo en el paso 2 al crear usuario con IP Estática, la única diferencia en estas consultas es tabla radreply
INSERT INTO radreply
(username, `attribute`, op, value)
VALUES('user2', 'Framed-Pool', '=', 'dhcp_pool1');
El atributo Framed-Pool en la tabla radreply es utilizado en FreeRadius para asignar un pool específico de direcciones IP a un usuario durante una sesión. Los pools de direcciones IP se utilizan comúnmente en entornos de acceso remoto, como conexiones PPP o PPPoE, para asignar direcciones IP dinámicas a los usuarios mientras se autentican en la red.
Cuando se utiliza el atributo Framed-Pool, el servidor FreeRadius selecciona una dirección IP disponible del pool especificado y la asigna al usuario durante la sesión. Esta dirección IP se utilizará para la conexión del usuario y se liberará una vez que la sesión finalice.
Nota
Es importante que el nombre del pool que se ingresa en la tabla redreply para el usuario, también exista en el Router y en el profile default que este ligado al server PPPoE.
En este ejemplo el nombre del pool es: dhcp_pool1
Cliente autenticado.
5 Control ancho de banda.
Para este ejemplo se creará el siguiente cliente con los siguientes datos de configuración
- User: user3
- Password: 123456
- IP: 192.168.90.90
- Velocidad (ancho de banda): 5 Megas Download / 5 Megas Upload
Acceder a base de datos free radius y crear el usuario usando las siguientes sentencias
INSERT INTO radcheck
(username, `attribute`, op, value)
VALUES('user3', 'Cleartext-Password', ':=', '123456');
INSERT INTO radcheck
(username, `attribute`, op, value)
VALUES('user3', 'Framed-Protocol', ':=', 'PPP');
INSERT INTO radcheck
(username, `attribute`, op, value)
VALUES('user3', 'Simultaneous-Use', ':=', '1');
INSERT INTO radreply
(username, `attribute`, op, value)
VALUES('user3', 'Framed-IP-Address', '=', '192.168.90.90');
Para el control ancho de banda utilizaremos el atributo "Mikrotik-Rate-Limit" en la tabla radreply de la base de datos de FreeRadius es utilizado para controlar el ancho de banda de un usuario al conectarse a través de un router MikroTik. La sintaxis general del valor del atributo es la siguiente:
Mikrotik-Rate-Limit = 'Upstream/Downstream Burst-Limit/Burst-Threshold Burst-Time/priority'
En la base de datos ingresamos la regla para limitar 5M/5M al usuario: user3
INSERT INTO radreply
(username, `attribute`, op, value)
VALUES('user3', 'Mikrotik-Rate-Limit', '=', '5M/5M 0/0 0/0 0/0 8 500K/500K');
Ahora, desglosemos el valor 5M/5M 0/0 0/0 0/0 8 500K/500K en la sentencia SQL:
Donde:
- 5M/5M: Esto establece la velocidad de subida (upstream) y bajada (downstream) del usuario en 5 Mbps para ambas direcciones.
- 0/0: Aquí, 0 se utiliza para indicar que no se establece ningún límite de ráfaga (burst) en las velocidades.
- 0/0: Esto también indica la falta de límites de ráfaga para umbrales.
- 0/0: Al igual que los dos casos anteriores, estos valores indican la falta de limitación de ráfaga.
- 8: Este número representa la prioridad. En este caso, se establece una prioridad de 8 para el usuario.
- 500K/500K: Finalmente, se establece una velocidad de subida (upstream) y bajada (downstream) de 500 Kbps para ambos.
Una vez el servidor halla autenticado y autorizado al usuario mandara al mikrotk los parametros de velocidad por medio de un queue dinamico.