Problema

En entornos corporativos es habitual que el controlador inalámbrico (WLC) de Cisco delegue la autenticación 802.1X a un servidor RADIUS externo. Cuando se reemplaza un ISE por un NPS (Network Policy Server) de Windows, muchos administradores observan que los clientes nunca llegan a autenticarse: el WLC muestra errores como %DOT1X-3-AAA_AUTH_SEND_FAIL o %DOT1X-3-ABORT_AUTH, mientras que el NPS no registra ninguna solicitud. El síntoma típico es:

  • Cliente lanza EAPOL‑Start, el WLC intenta enviar un Access‑Request al NPS y falla.
  • En los logs del WLC aparecen “Unable to send AAA message” y “Authentication Aborted”.
  • En el NPS no hay entradas de autenticación ni de accounting.

Este patrón indica que la comunicación RADIUS entre el controlador y el servidor está rota o mal interpretada, no que el cliente sea el culpable.

Causa

Los fallos de 802.1X en este cruce suelen deberse a una combinación de los siguientes factores:

  1. Puerto o protocolo incorrecto – NPS escucha por defecto en 1812/1813 (UDP). Si el WLC está configurado para usar otro puerto o TCP, la petición se descarta.
  2. Shared secret desincronizada – La clave compartida entre WLC y NPS debe coincidir exactamente; cualquier espacio o carácter extra produce un error de autenticación que el WLC registra como “AAA_AUTH_SEND_FAIL”.
  3. Dirección IP de origen no permitida – NPS permite sólo los clientes que aparecen en la lista de “Network Devices”. Si la IP del WLC no está incluida, NPS ignora la solicitud sin registrar nada.
  4. Formato de atributos – Cisco envía atributos específicos (NAS‑IP‑Address, Service-Type = Framed‑User) que NPS necesita mapear a una política de red. Si la política no cubre esos atributos, NPS rechaza silenciosamente.
  5. TLS/EAP incompatibilidad – Cuando se usa EAP‑TLS o PEAP, el certificado del servidor NPS debe ser confiable para el cliente y el controlador debe estar configurado para aceptar el método. Un desajuste genera abortos inmediatos.
  6. ACL o firewall entre WLC y NPS – Algún filtro de red que bloquee tráfico UDP 1812/1813 impide que el paquete llegue al NPS.
  7. Versión de firmware del WLC – En versiones cercanas al fin de vida (por ejemplo, 5520 con EOS 2025), algunos bugs de RADIUS pueden aparecer si se usan opciones avanzadas como RFC3576.

Cualquier combinación de los puntos anteriores puede producir los mensajes de error observados.

Solución

A continuación se describe un proceso genérico que cubre los escenarios más habituales. La idea es validar cada capa (red, credenciales, atributos) antes de pasar a la siguiente.

1. Verificar conectividad y puertos

# Desde el WLC (o un host en la misma VLAN) prueba el reachability UDP
nc -vu X.X.X.X 1812 -w 3
nc -vu X.X.X.X 1813 -w 3

Si el comando no devuelve “open”, revisa ACLs, rutas y firewalls. Asegúrate de que el tráfico UDP entre ambas direcciones IP fluya sin filtrado.

2. Confirmar la clave compartida

En el WLC, revisa la configuración del RADIUS server:

show radius server <index>

Anota el shared secret y compáralo con la entrada en NPS (Network Policy Server → RADIUS Clients → New). Copia la cadena exactamente, sin espacios al inicio o final. Un error típico es que la UI de NPS agrega automáticamente un espacio al pegar.

3. Añadir el WLC como cliente RADIUS en NPS

En el servidor Windows:

  1. Network Policy Server → RADIUS Clients and Servers → RADIUS Clients → New.
  2. Introduce la IP del WLC y la misma shared secret.
  3. Marca “Enable Accounting” si usarás contabilidad.

4. Ajustar la política de red en NPS

Crea o edita una política que acepte los atributos enviados por Cisco:

  • Condition: Windows Groups → “Domain Users” (o el grupo que corresponda).
  • Constraints → Authentication: Selecciona los métodos EAP que usarás (PEAP, EAP‑TLS).
  • Settings → RADIUS Attributes: Añade Tunnel-Type = VLAN, Tunnel-Medium-Type = IEEE‑802, Tunnel-Private-Group-ID con el ID de VLAN deseado.

Esto asegura que NPS no descarte la petición por falta de atributos.

5. Sincronizar versiones de EAP

Si utilizas PEAP con MSCHAPv2, verifica que el certificado del servidor NPS sea emitido por una CA que el cliente confíe. En el WLC, habilita EAP‑TLS/PEAP bajo Security → AAA → Authentication y selecciona el método correcto.

6. Desactivar temporalmente RFC3576 (Change of Authorization)

Algunos controladores envían mensajes COA que NPS no soporta. En el WLC, desactiva la opción RFC3576 bajo la configuración del servidor RADIUS y vuelve a probar.

7. Revisar logs simultáneos

  • En el WLC: show logging | include DOT1X
  • En el NPS: Visor de eventos → CustomNetwork Policy ServerAuthentication

Los timestamps deben coincidir; si el WLC muestra “Unable to send AAA message” pero NPS no registra nada, el problema está antes de que el paquete llegue al servidor.

8. Probar con un cliente RADIUS de línea de comandos

Desde una máquina Windows o Linux, usa radclient (Linux) o NTRadPing (Windows) para enviar un Access‑Request manual:

# radclient -x X.X.X.X auth testing123
User-Name = "testuser"
User-Password = "testpass"

Si el servidor responde con Access‑Accept, la ruta y la secret son correctas; el problema está en la política o en los atributos.

9. Aplicar cambios y reiniciar servicios

Después de cualquier ajuste, recarga la configuración del WLC (config wlan reload) y reinicia el servicio NPS (net stop IAS && net start IAS).

Cuándo aplicar esta solución

Esta guía es válida cuando:

  • El controlador es de la familia Cisco (WLC 5500, 5508, 5520, etc.) y se usa RADIUS externo para 802.1X.
  • Se ha migrado de ISE a NPS o se está configurando NPS por primera vez.
  • Los logs del WLC indican fallos de envío AAA y el NPS no muestra eventos de autenticación.

No es necesaria si:

  • La autenticación funciona y el problema está en la capa de cliente (por ejemplo, certificado caducado en el laptop).
  • Se utiliza un controlador de otro vendor (Aruba, Meraki) con requisitos de atributos diferentes.

Código

# Verificar reachability UDP al NPS
nc -vu X.X.X.X 1812 -w 3
nc -vu X.X.X.X 1813 -w 3

# Enviar Access-Request manual con radclient (Linux)
echo "User-Name = \"testuser\"
User-Password = \"testpass\"" | radclient -x X.X.X.X auth testing123

Verificación

  1. Captura de paquetes: Usa Wireshark en una máquina entre el WLC y el NPS. Filtra udp.port == 1812 y verifica que el Access‑Request salga del WLC y que el NPS responda con Access‑Accept o Access‑Reject.
  2. Logs del WLC: show logging | include DOT1X debe mostrar “AAA_AUTH_SUCCESS” para el cliente después de la corrección.
  3. Eventos NPS: En el visor de eventos, busca entradas con ID 6272 (Authentication succeeded) o 6273 (Authentication failed) que correspondan al MAC del cliente.
  4. Conexión del cliente: El laptop debe obtener una dirección IP y acceso a la red sin volver a pedir credenciales.

Notas adicionales

  • En controladores con firmware próximo a su fin de vida (por ejemplo, 5520 con EOS 2025), considera actualizar al menos al último parche disponible; algunos bugs de RADIUS se corrigen en versiones menores.
  • Si la política NPS incluye Framed‑Protocol = PPP, el WLC la rechazará. Elimina ese atributo a menos que sea estrictamente necesario.
  • Cuando uses EAP‑TLS, el certificado del NPS debe contener la Subject Alternative Name (SAN) con el nombre del servidor que el cliente espera; de lo contrario, el cliente abortará antes de que el WLC reciba una respuesta.
  • Mantén una copia de la configuración del WLC (show run-config) y de NPS (exportar la política) antes de hacer cambios mayores; facilita la reversión en caso de que algo falle.