--- title: "Cómo instalar FreeRADIUS en Ubuntu 24.04 para WiFi y VPN" description: "Instala FreeRADIUS en Ubuntu 24.04, da de alta usuarios y clientes NAS, pruébalo con radtest y prepáralo para WiFi WPA2-Enterprise con PEAP y VLAN dinámicas." category: "Gestión de Identidad y Acceso" language: es source: https://cubepath.com/es/docs/gestión-de-identidad-y-acceso/instalacion-de-servidor-radius-con-freeradius updated: 2026-09-25 --- # Cómo instalar FreeRADIUS en Ubuntu 24.04 para WiFi y VPN FreeRADIUS es el servidor RADIUS open source más utilizado. Autentica a los usuarios que se conectan a una WiFi WPA2/WPA3-Enterprise, a un puerto de switch con 802.1X o a una VPN, y puede devolver atributos como la VLAN en la que debe quedar cada usuario. En este tutorial instalarás FreeRADIUS 3.2 en Ubuntu 24.04, crearás usuarios y clientes, lo probarás con `radtest`, lo prepararás para PEAP-MSCHAPv2 con un certificado propio y asignarás VLAN por usuario. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, y un usuario no root con privilegios `sudo`. FreeRADIUS consume muy pocos recursos: 1 GB de RAM es suficiente. - Conectividad por UDP 1812 (autenticación) y 1813 (accounting) entre el servidor y los equipos que le enviarán peticiones (puntos de acceso, switches, concentradores VPN). Lo habitual es hacerlo por una red privada o una VPN, no por Internet. - Para WiFi empresarial: un certificado de servidor emitido por tu CA interna, o la intención de crear una (paso 5). En la terminología RADIUS, los equipos que envían peticiones al servidor se llaman **clientes** o **NAS** (Network Access Server). Los usuarios que se conectan a la red no hablan con FreeRADIUS directamente: lo hace el NAS en su nombre. ## Paso 1: Instalar FreeRADIUS Instala el servidor y las utilidades de prueba desde los repositorios de Ubuntu: ```bash sudo apt update sudo apt install freeradius freeradius-utils ``` El paquete arranca y habilita el servicio `freeradius` automáticamente. Comprueba la versión y el estado: ```bash freeradius -v | head -1 systemctl status freeradius --no-pager ``` ```output radiusd: FreeRADIUS Version 3.2.5, for host x86_64-pc-linux-gnu ● freeradius.service - FreeRADIUS multi-protocol policy server Loaded: loaded (/usr/lib/systemd/system/freeradius.service; enabled; preset: enabled) Active: active (running) ``` Toda la configuración está en `/etc/freeradius/3.0/` (el nombre del directorio se mantiene aunque la versión sea 3.2). Los archivos que tocarás en esta guía son: | Archivo | Función | |---|---| | `clients.conf` | Equipos NAS autorizados y su secreto compartido | | `mods-config/files/authorize` | Usuarios locales y sus atributos (también accesible como `users`) | | `mods-available/eap` | Métodos EAP y certificados para WiFi y 802.1X | | `sites-available/default` y `inner-tunnel` | Lógica de autorización y autenticación | ## Paso 2: Crear un usuario y probarlo con radtest Empieza con un usuario local para verificar que el servidor responde. Abre el archivo de usuarios: ```bash sudo nano /etc/freeradius/3.0/mods-config/files/authorize ``` Añade esta línea al **principio** del archivo, antes de las entradas `DEFAULT` que trae de ejemplo. Sustituye **`your_user`** y **`your_strong_password`**: ```text your_user Cleartext-Password := "your_strong_password" ``` `Cleartext-Password` indica la contraseña de referencia con la que FreeRADIUS comprobará lo que envíe el usuario. Se guarda en claro porque MSCHAPv2, el método que usan casi todos los clientes WiFi, la necesita para calcular la respuesta. Por eso el archivo solo lo puede leer el usuario `freerad`. Reinicia el servicio para cargar el cambio: ```bash sudo systemctl restart freeradius ``` `radtest` envía una petición de acceso como si fuera un NAS. El `clients.conf` por defecto ya autoriza a `localhost` con el secreto `testing123`, así que puedes usarlo para esta prueba: ```bash radtest your_user 'your_strong_password' 127.0.0.1 0 testing123 ``` ```output Sent Access-Request Id 117 from 0.0.0.0:48213 to 127.0.0.1:1812 length 79 User-Name = "your_user" User-Password = "your_strong_password" NAS-IP-Address = 127.0.1.1 NAS-Port = 0 Message-Authenticator = 0x00 Cleartext-Password = "your_strong_password" Received Access-Accept Id 117 from 127.0.0.1:1812 to 127.0.0.1:48213 length 20 ``` `Access-Accept` significa que la autenticación fue correcta; con una contraseña errónea verás `Access-Reject`. Repite la prueba con MSCHAPv2, que es lo que usará después la WiFi dentro del túnel PEAP: ```bash radtest -t mschap your_user 'your_strong_password' 127.0.0.1 0 testing123 ``` ```output Received Access-Accept Id 42 from 127.0.0.1:1812 to 127.0.0.1:52900 length 84 MS-CHAP-MPPE-Keys = 0x... MS-MPPE-Encryption-Policy = Encryption-Allowed MS-MPPE-Encryption-Types = RC4-40or128-bit-Allowed ``` ## Paso 3: Usar el modo depuración Cuando algo no funciona, el registro normal de FreeRADIUS dice muy poco. El modo depuración muestra, para cada petición, qué módulo la procesó y por qué se aceptó o rechazó. Es la herramienta principal para diagnosticar cualquier problema. Detén el servicio y arranca FreeRADIUS en primer plano: ```bash sudo systemctl stop freeradius sudo freeradius -X ``` ```output ... Listening on auth address * port 1812 bound to server default Listening on acct address * port 1813 bound to server default ... Ready to process requests ``` Desde otra terminal, repite el `radtest` del paso anterior y observa la traza. Cuando termines, pulsa `Ctrl+C` y vuelve a arrancar el servicio: ```bash sudo systemctl start freeradius ``` Para validar la configuración tras un cambio sin arrancar el servidor, usa: ```bash sudo freeradius -XC | tail -1 ``` ```output Configuration appears to be OK ``` ## Paso 4: Dar de alta los clientes NAS Cada punto de acceso, switch o concentrador VPN debe estar declarado en `clients.conf` con su IP y un secreto compartido. El secreto firma los paquetes entre el NAS y el servidor, así que genera uno largo y aleatorio para cada cliente o grupo de clientes: ```bash openssl rand -base64 24 ``` ```output q3Vx8mZ1pN6tR0wY4bK7cH2fJ9sL5dA1 ``` Abre el archivo de clientes: ```bash sudo nano /etc/freeradius/3.0/clients.conf ``` Añade al final un bloque por equipo o por subred. En este ejemplo, todos los puntos de acceso de la red de gestión `192.168.10.0/24` comparten secreto: ```text client aps-oficina { ipaddr = 192.168.10.0/24 secret = your_shared_secret shortname = aps-oficina } ``` Valida la configuración y reinicia: ```bash sudo freeradius -XC | tail -1 sudo systemctl restart freeradius ``` Abre en UFW los puertos RADIUS solo para esa subred: ```bash sudo ufw allow from 192.168.10.0/24 to any port 1812:1813 proto udp sudo ufw status ``` ```output To Action From -- ------ ---- 1812:1813/udp ALLOW 192.168.10.0/24 ``` En cada punto de acceso, configura el servidor RADIUS con la IP del servidor FreeRADIUS, el puerto 1812 y el mismo secreto. Si un equipo envía peticiones desde una IP no declarada, FreeRADIUS las descarta y registra `Ignoring request ... from unknown client`. ## Paso 5: Preparar EAP para WiFi WPA2-Enterprise Las redes WPA2/WPA3-Enterprise usan EAP. El método más compatible es **PEAP-MSCHAPv2**: el dispositivo abre un túnel TLS con FreeRADIUS, valida su certificado y, dentro del túnel, envía usuario y contraseña con MSCHAPv2. El módulo `eap` ya viene habilitado; solo hay que ajustar el método por defecto y el certificado. Abre la configuración del módulo: ```bash sudo nano /etc/freeradius/3.0/mods-available/eap ``` Dentro del bloque `eap { ... }`, cambia el método por defecto a PEAP: ```text default_eap_type = peap ``` En el bloque `tls-config tls-common { ... }` del mismo archivo, apunta a tu certificado. El paquete de Ubuntu trae un certificado autofirmado de prueba, que sirve para verificar que EAP funciona pero que los dispositivos no pueden validar. Sustituye estas tres líneas por las rutas de tus archivos: ```text private_key_file = /etc/freeradius/3.0/certs/radius.key certificate_file = /etc/freeradius/3.0/certs/radius.crt ca_file = /etc/freeradius/3.0/certs/ca.crt ``` Si no tienes una CA interna, puedes crear una pequeña con OpenSSL. Primero la CA, con una validez de 10 años: ```bash cd /etc/freeradius/3.0/certs sudo openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \ -keyout ca.key -out ca.crt -subj "/CN=Your Company RADIUS CA" ``` Después el certificado del servidor, firmado por esa CA. El nombre `radius.your_domain` es el que configurarás en los dispositivos para validar el servidor: ```bash sudo openssl req -newkey rsa:2048 -nodes -keyout radius.key -out radius.csr \ -subj "/CN=radius.your_domain" printf "subjectAltName=DNS:radius.your_domain\nextendedKeyUsage=serverAuth\n" | sudo tee radius.ext > /dev/null sudo openssl x509 -req -in radius.csr -CA ca.crt -CAkey ca.key -CAcreateserial \ -days 825 -sha256 -out radius.crt -extfile radius.ext ``` Comprueba que el certificado está firmado por tu CA: ```bash sudo openssl verify -CAfile ca.crt radius.crt ``` ```output radius.crt: OK ``` Ajusta los permisos: FreeRADIUS necesita leer el certificado y la clave del servidor, pero la clave de la CA solo debe poder leerla root. Guarda además una copia de `ca.key` fuera del servidor: ```bash sudo chown freerad:freerad radius.key radius.crt ca.crt sudo chmod 640 radius.key sudo chown root:root ca.key sudo chmod 600 ca.key ``` Valida y reinicia: ```bash sudo freeradius -XC | tail -1 sudo systemctl restart freeradius ``` Por último, configura los clientes: - En el punto de acceso: seguridad **WPA2-Enterprise** (o WPA3-Enterprise), servidor RADIUS con la IP de FreeRADIUS, puerto 1812 y el secreto del paso 4. - En los dispositivos: método **PEAP**, autenticación interna **MSCHAPv2**, certificado de CA `ca.crt` y dominio `radius.your_domain`. Distribuye `ca.crt` (nunca `ca.key`) por MDM o GPO para que los usuarios no tengan que aceptar el certificado a mano. > Advertencia: si los dispositivos se conectan sin validar el certificado del servidor, un punto de acceso falso puede capturar sus credenciales MSCHAPv2. Configura siempre la CA y el nombre del servidor en el perfil WiFi. Mientras conectas el primer dispositivo, mantén `sudo freeradius -X` en marcha (con el servicio detenido) para ver el intercambio EAP completo y el `Access-Accept` final. ## Paso 6: Asignar una VLAN a cada usuario Los switches y puntos de acceso que soportan VLAN dinámica colocan al usuario en la VLAN que indique RADIUS mediante tres atributos estándar. Edita de nuevo el archivo de usuarios: ```bash sudo nano /etc/freeradius/3.0/mods-config/files/authorize ``` Añade los atributos de respuesta a la entrada del usuario. Las líneas de atributos van indentadas y separadas por comas: ```text your_user Cleartext-Password := "your_strong_password" Tunnel-Type = VLAN, Tunnel-Medium-Type = IEEE-802, Tunnel-Private-Group-Id = "20" ``` Con PEAP, el usuario se autentica dentro del túnel (servidor virtual `inner-tunnel`) y esos atributos tienen que copiarse a la respuesta exterior, que es la que recibe el punto de acceso. Abre el servidor virtual interno: ```bash sudo nano /etc/freeradius/3.0/sites-available/inner-tunnel ``` En la sección `post-auth`, localiza este bloque comentado y quita los `#` para activarlo: ```text update { &outer.session-state: += &reply: } ``` El servidor `default` ya incluye en su `post-auth` el bloque que añade `session-state` a la respuesta final. Valida, reinicia y prueba con `radtest`: ```bash sudo freeradius -XC | tail -1 sudo systemctl restart freeradius radtest your_user 'your_strong_password' 127.0.0.1 0 testing123 ``` ```output Received Access-Accept Id 88 from 127.0.0.1:1812 to 127.0.0.1:40125 length 37 Tunnel-Type:0 = VLAN Tunnel-Medium-Type:0 = IEEE-802 Tunnel-Private-Group-Id:0 = "20" ``` En el punto de acceso o switch, activa la asignación dinámica de VLAN (suele llamarse *RADIUS VLAN assignment* o *dynamic VLAN*) y asegúrate de que la VLAN 20 existe y está en el troncal. ## Solución de problemas **`radtest` no recibe respuesta.** El servidor está parado, UFW bloquea el tráfico o el cliente no está en `clients.conf`. Con `sudo freeradius -X` verás `Ignoring request ... from unknown client` si falta el cliente. **`Access-Reject` con la contraseña correcta.** Busca en la salida de `freeradius -X` la línea que rechaza la petición. Un caso típico es haber añadido el usuario al final de `authorize`, detrás de una entrada `DEFAULT` que corta el procesamiento. **El dispositivo WiFi no termina de conectar.** Suele ser el certificado: el dispositivo no confía en la CA, el nombre configurado no coincide con el `subjectAltName` o el certificado ha caducado. En modo depuración aparecerá un error TLS justo después de `ClientHello`. **`Failed binding to auth address * port 1812: Address already in use`.** Estás lanzando `freeradius -X` con el servicio en marcha. Ejecuta `sudo systemctl stop freeradius` antes. ## Conclusión Tienes FreeRADIUS 3.2 funcionando en Ubuntu 24.04 con usuarios locales, clientes NAS restringidos por IP y secreto, PEAP-MSCHAPv2 con un certificado de tu propia CA y asignación de VLAN por usuario. Como siguientes pasos puedes sustituir el archivo de usuarios por un directorio LDAP o Active Directory con el módulo `ldap`, guardar el accounting en una base de datos SQL o añadir un segundo servidor RADIUS en los puntos de acceso para tener redundancia.