20 de enero de 2026

VPN 2FA con RADIUS: la configuración completa del auth-proxy

Ponga el auth-proxy de Notakey ante cualquier RADIUS —FreeRADIUS, NPS o MikroTik User Manager— y exija aprobación en el teléfono en cada acceso VPN.

Esta guía añade autenticación de dos factores confirmada con un toque en el teléfono a una VPN que se autentica por RADIUS. El auth-proxy de Notakey se sitúa entre el concentrador VPN y el servidor RADIUS: reenvía la comprobación de la contraseña a RADIUS como de costumbre, envía una notificación push de aprobación al teléfono del usuario y solo devuelve Access-Accept a la VPN cuando ambas cosas se cumplen.

Como el proxy habla RADIUS estándar por ambos lados, funciona con casi cualquier servidor RADIUS —FreeRADIUS, Microsoft NPS, el User Manager nativo de MikroTik o el propio plugin RADIUS de Notakey— y con cualquier concentrador VPN que pueda apuntar a un servidor RADIUS.

Cómo funciona

VPN concentrator ──RADIUS──▶ Notakey auth-proxy ──RADIUS──▶ your RADIUS server

                                     └──▶ push notification ──▶ user's phone
  1. El usuario se conecta a la VPN con su nombre de usuario y su contraseña.
  2. El concentrador envía la petición RADIUS al auth-proxy (no directamente a su servidor RADIUS).
  3. El proxy reenvía la petición al servidor RADIUS de destino. Si la comprobación de la contraseña falla, el inicio de sesión se rechaza de inmediato.
  4. Si la contraseña es correcta, el proxy envía una notificación push de aprobación al teléfono del usuario y mantiene abierto el intercambio RADIUS mientras el usuario responde: por defecto, hasta 30 segundos (vpn_message_ttl).
  5. Aprobar → vuelve Access-Accept a la VPN. Denegar o agotar el tiempo → rechazo.

El paso 4 tiene una consecuencia importante: el tiempo de espera del cliente RADIUS de su VPN debe ser al menos tan largo como la ventana de aprobación, es decir, al menos 30 segundos. La mayoría de los clientes RADIUS usan por defecto unos pocos segundos o menos, porque una simple comprobación de contraseña responde al instante; aquí una persona tiene que sacar el teléfono.

Requisitos

  • Un Notakey Authentication Server: el nivel gratuito en la nube en signup.notakey.com o el appliance on-premise
  • Un servidor RADIUS (o use el plugin RADIUS de Notakey, más abajo)
  • Una VPN que se autentique contra RADIUS
  • El mismo nombre de usuario en el servicio de Notakey, en RADIUS y en la VPN: el proxy lo usa para dirigir la notificación push

Paso 1: cree la aplicación de la VPN

En el panel de Notakey, cree una aplicación (servicio) para la VPN, registre los teléfonos de los usuarios y copie el Access ID de la aplicación: el UUID que pegará en la configuración del proxy que aparece a continuación.

Paso 2: configure el auth-proxy

Appliance on-premise: el proxy integrado

El appliance incluye el auth-proxy de serie. Configúrelo desde la CLI del appliance con un único documento JSON:

ntk cfg set :ap '{
  "vpn_port_in": "1812",
  "vpn_port_out": "1812",
  "vpn_radius_address": "10.0.1.23",
  "vpn_secret_in": "secret_to_radius_server",
  "vpn_secret_out": "secret_to_radius_server",
  "vpn_access_id": "c468f008-485b-b11c-aad9672fbae1",
  "vpn_message_ttl": "30",
  "message_title": "VPN authentication",
  "message_description": "Allow {0} login?"
}' --json-input

Después, arranque el servicio:

ntk ap start

Qué significa cada campo:

Campo Significado
vpn_port_in Puerto en el que el proxy escucha las peticiones RADIUS de su VPN
vpn_port_out Puerto de su servidor RADIUS de destino
vpn_radius_address Dirección de su servidor RADIUS de destino
vpn_secret_in Secreto compartido entre su VPN y el proxy
vpn_secret_out Secreto compartido entre el proxy y su servidor RADIUS
vpn_access_id El Access ID de la aplicación del paso 1
vpn_message_ttl Segundos que tiene el usuario para aprobar (30 es un valor por defecto sensato)
message_title / message_description Lo que muestra la push: {0} se sustituye por el nombre de usuario

Appliance en la nube: el proxy en Docker

Con un servidor Notakey alojado en la nube, ejecute el mismo proxy como contenedor dentro de su propia red, delante de su servidor RADIUS:

docker run --name auth-proxy \
  -e NOTAKEY_HOST="https://2fa.your_company.com/api" \
  -e NOTAKEY_ACCESS_ID="c468f008-485b-b11c-aad9672fbae1" \
  -p 1812:1812/udp \
  -e LISTEN_ADDRESS=0.0.0.0 \
  -e ADDRESS_SECRET_IN=0.0.0.0:secret_to_radius_server \
  -e DOWNSTREAM_ADDRESS=10.0.1.23 \
  -e SECRET_OUT=secret_to_radius_server \
  notakey/authproxy:latest

Las mismas piezas, con otro empaquetado: NOTAKEY_HOST es la URL de la API de su instancia en la nube, DOWNSTREAM_ADDRESS es su servidor RADIUS y los dos secretos se corresponden con el lado de la VPN y el lado de RADIUS, respectivamente.

La referencia completa de ambas variantes —incluido un instalador MSI para ejecutar el proxy en Windows, los requisitos de conectividad de red y la ubicación de los registros— está en el manual de Authentication Proxy.

Paso 3: ¿aún no tiene servidor RADIUS? Use el nuestro

Si todavía no ejecuta RADIUS, no necesita montar uno solo para esto:

  • Plugin RADIUS de Notakey: el appliance incluye un plugin de servicio RADIUS (basado en FreeRADIUS). Se autentica contra los usuarios ya definidos en su servicio de Notakey, de modo que no hay una base de datos de usuarios RADIUS aparte que mantener; la configuración se describe en nuestro artículo de la base de conocimiento Plugin de servicio RADIUS (sin configurar usuarios).
  • MikroTik User Manager: si su VPN ya termina en un MikroTik, su paquete nativo User Manager funciona como servidor RADIUS de destino.
  • Cualquier RADIUS corporativo ya existente —FreeRADIUS, Microsoft NPS y similares— funciona sin cambios; el proxy es transparente para él.

Paso 4: apunte su VPN al proxy

Reconfigure el cliente RADIUS del concentrador VPN: el mismo secreto que vpn_secret_in, pero ahora la dirección del servidor es el proxy, no el servidor RADIUS. Y aumente el tiempo de espera.

En un MikroTik, se ve así:

/radius
add service=ppp address=<proxy-address> secret=secret_to_radius_server timeout=30s

/ppp aaa
set use-radius=yes

El timeout=30s importa. El tiempo de espera RADIUS por defecto de MikroTik es de 300 milisegundos: perfecto para comprobar una contraseña, inútil para una aprobación humana. Póngalo en al menos 30 segundos (coincidiendo con vpn_message_ttl), o los inicios de sesión fallarán antes de que el usuario pueda siquiera echar mano del teléfono. La misma regla se aplica a la configuración del cliente RADIUS de cualquier otro fabricante.

Pruébelo

Conéctese a la VPN. La comprobación de la contraseña pasa y la push llega al teléfono —también a la pantalla de bloqueo—, de modo que el usuario ni siquiera necesita tener la aplicación abierta:

La notificación push de aprobación llegando a la pantalla de bloqueo: «Conexión VPN: ¿iniciar sesión con este usuario, desde esta IP?» (nombre de usuario e IP ocultos).

Al abrirla se muestra la petición completa —quién inicia sesión y desde qué dirección IP—, con una cuenta atrás mientras el proxy mantiene abierto el intercambio RADIUS:

La petición en Notakey Authenticator: nombre del servicio, el inicio de sesión y la IP de origen que verificar, una cuenta atrás y los botones Deny / Approve.

La conexión solo se completa tras pulsar Approve. Y esta pantalla es la recompensa de seguridad de toda la configuración: un usuario que recibe esta push mientras no se está conectando a la VPN está viendo a otra persona usar su contraseña —desde una IP que puede ver— y un solo toque en Deny detiene el inicio de sesión y deja un rastro de auditoría. Si los inicios de sesión agotan el tiempo incluso cuando aprueba rápido, revise primero el tiempo de espera del cliente RADIUS: es el error más habitual en esta configuración.

Guías relacionadas

← Todos los artículos

Su primer inicio de sesión sin contraseña, esta misma semana

30 minutos con un ingeniero, no una presentación comercial. Juntos planificaremos cómo poner en marcha un piloto funcional en su entorno de VPN, SSO o Windows.