Introducción a FlexVPN
FlexVPN es una solución de Cisco basada en IKEv2 que unifica las configuraciones de VPN Site-to-Site, Remote Access y Dynamic Multipoint VPN (DMVPN) bajo una misma infraestructura. Está diseñada para simplificar la administración y ofrecer alta seguridad mediante IPsec, permitiendo configuraciones escalables y dinámicas para entornos con múltiples sedes y usuarios remotos.
En este laboratorio, implementaremos FlexVPN utilizando un diseño HUB-and-Spoke, donde el HUB centraliza la conexión y cada spoke se comunica con él de manera segura.
- Configuración del Router HQRouter HUB
| hostname HQRouter clock timezone GMT -4 0 clock summer-time ADT recurring ip domain name caribbeantic.local ip host HQRouter.caribbeantic.local 2001:DB8:ABCD:1::1 ip host Spoke1.caribbeantic.local 2001:DB8:ABCD:2::2 ip host Spoke2.caribbeantic.local 2001:DB8:ABCD:3::3 ip name-server 2001:DB8:ABCD:1::1 ipv6 unicast-routing ipv6 cef |
- Se establece el nombre del equipo y la zona horaria.
- Se configura el dominio DNS interno y los registros host para resolución de nombres de los routers en IPv6.
- Se habilita IPv6 unicast routing y CEF para optimizar el reenvío de paquetes.
- AAA y políticas de autorización
| aaa new-model aaa authorization network FLEX_AUTH local |
- Se activa AAA para autenticar y autorizar conexiones VPN. Las políticas FLEX_AUTH define que la autorización se hace localmente en el router.
- Configuración de IKEv2 para FlexVPN
| IKEv2 proposal: default Encryption : AES-CBC-256 AES-CBC-192 AES-CBC-128 Integrity : SHA512 SHA384 SHA256 SHA96 MD596 PRF : SHA512 SHA384 SHA256 SHA1 MD5 DH Group : DH_GROUP_1536_MODP/Group 5 DH_GROUP_1024_MODP/Group 2 ¡ IKEv2 policy : default Match fvrf : any Match address local : any Proposal : default ! crypto ikev2 authorization policy SPOKEPOLICYv6 ipv6 pool SpokePoolv6 pool FLEXPOOL4 route set interface route set access-list HQROUTER4 route set access-list ipv6 HQTrafficv6 ¡ crypto ikev2 keyring FLEX_KEYRINGv6 peer SPOKE1 address 2001:DB8:ABCD:2::2/64 pre-shared-key local Cisco123 pre-shared-key remote Cisco123 peer SPOKE2 address 2001:DB8:ABCD:3::3/64 pre-shared-key local Cisco123 pre-shared-key remote Cisco123 ¡ crypto ikev2 profile FLEX_PROFILEv6 match identity remote fqdn Spoke1.caribbeantic.local match identity remote fqdn Spoke2.caribbeantic.local identity local fqdn HQRouter.caribbeantic.local authentication local pre-share authentication remote pre-share ¡ keyring local FLEX_KEYRINGv6 lifetime 84600 aaa authorization group psk list FLEX_AUTH SPOKEPOLICYv6 virtual-template 1 mode auto ¡ crypto ikev2 dpd 30 5 on-demand ¡ |
- Se define la política de autorización (SPOKEPOLICYv6) con asignación de direcciones IPv6 e IPv4 a clientes VPN.
- Se está usando la propuesta por defecto del sistema, la cual incluye múltiples opciones de cifrado e integridad, de forma que el router elegirá automáticamente una que sea compatible con el par remoto.
- Se está usando la política IKEv2 por defecto no restringe dirección local o VRF, y utiliza el proposal default para las negociaciones. Esto permite que el router sea flexible y acepte múltiples combinaciones de parámetros compatibles con peers que también usen configuraciones predeterminadas o ligeramente distintas.
- Se configura el keyring con claves precompartidas para cada spoke. El perfil IKEv2 (FLEX_PROFILEv6) vincula autenticación, autorización y asigna el Virtual-Template1 como interfaz túnel dinámica.
habilitamos Dead Peer Detection (DPD) para IKEv2, que es un mecanismo que verifica si el peer VPN sigue activo.
- 30 → Intervalo en segundos para enviar la sonda (DPD query) cuando se sospecha que el peer está inactivo.
- 5 → Tiempo de espera en segundos para recibir respuesta del peer antes de considerarlo inalcanzable.
- on-demand → Significa que las sondas DPD no se envían de manera continua, sino únicamente cuando el equipo detecta inactividad en el canal de control de IKEv2.
Funcionamiento práctico:
Cuando no hay tráfico o se pierde la conectividad, el router o ASA envía un mensaje DPD para confirmar si el peer sigue vivo. Si no responde en 5 segundos, la sesión IKEv2 se elimina y puede renegociarse. Esto ayuda a:
- Liberar recursos en sesiones muertas.
- Acelerar la reconexión en caso de fallo de red.
- Evitar quedarse con túneles "fantasma" activos.
En este laboratorio:
Esto mejora la resiliencia del túnel FlexVPN, ya que, en entornos de prueba o enlaces inestables, el equipo detectará rápido un peer caído y renegociará automáticamente.
- Configuración de IPsec
| Transform set default: { esp-aes esp-sha-hmac } will negotiate = { Transport, }, ¡ crypto ipsec profile FLEX_IPSEC_PROFILEv6 set security-association lifetime seconds 7200 set ikev2-profile FLEX_PROFILEv6 ! |
- El transform-set define los algoritmos que se usarán en fase 2 (IPsec SA) para proteger el tráfico de datos. Se utiliza el transform-set por defecto.
- En FlexVPN, el modo Transport es habitual, ya que el cifrado se aplica sobre el túnel GRE/VTi, y no es necesario encapsular todo el paquete IP original.
- Se define el perfil IPsec que se usará para proteger el túnel GRE sobre IPv6.
- Asocia el perfil IKEv2 (FLEX_PROFILEv6) previamente definido.
- Configuración de las Interfaces físicas
- La interface Loopback0 sirve como identificador y dirección de gestión del router, conectividad túneles.
- La interface GigabitEthernet0/0 es la conexión hacia Internet y punto de origen para túneles FLEX VPN.
- Plantilla de túnel GRE sobre IPv6, protegido con IPsec y gestionado con NHRP (Next Hop Resolution Protocol). Asigna direccionamiento IPv4 e IPv6 de forma dinámica. Este template es usado por cada spoke que se conecte.
- Configuración de enrutamiento Dinámico
| router eigrp 10 network 10.1.1.1 0.0.0.0 network 192.168.15.0 ! ipv6 router eigrp 100 eigrp router-id 10.10.10.10 address-family ipv6 unicast exit-address-family ! router ospfv3 100 router-id 10.10.10.10 address-family ipv6 unicast ! |
- Se configuro el protocolo de enrutamiento dinámico EIGRP 10 IPv4 y EIGRP 100 IPV6 para redes internas interface loopback e interface túneles.
- Se configuro el protocolo de enrutamiento dinámico OSPFv3 IPv6 para anunciar y aprender rutas de los routers spokes, conectividad WAN del ISP.
- Listas de control de acceso y pools DHCP para el direccionamiento dinamico de los tunnels
| ip local pool FLEXPOOL4 192.168.15.1 192.168.15.50 ipv6 local pool SpokePoolv6 2001:DB8:BEEF:1::/112 128 ! ip access-list standard HQROUTER4 permit 10.1.1.0 0.0.0.255 permit 10.2.2.0 0.0.0.255 permit 10.3.3.0 0.0.0.255 ! ipv6 access-list HQTrafficv6 permit ipv6 host 2001:DB8:AAAA:1:: any permit ipv6 host 2001:DB8:CCCC:3:: any permit ipv6 host 2001:DB8:BBBB:2:: any |
- Los pools de DHCP FLEXPOOL4 para IPV4 y SpokePoolv6 para IPV6, asignan IPs dinámicas a los spokes que se conectan a la infraestructura de túneles.
- Las listas de control de acceso ACLs HQROUTER4 para IPV4 y HQTrafficv6 para IPV6, definen qué tráfico se encripta y se anuncian.
Configuracion para los Routers Spoke 1 and Spoke 2
Configuración básica del sistema
- Hostname, zona horaria y dominio DNS (caribbeantic.local) configurados para resolución interna.
- Entradas ip host para HQRouter y otros spokes, facilitando la conexión por FQDN.
- ipv6 unicast-routing y ipv6 cef activados para habilitar el enrutamiento IPv6 y la optimización CEF.
Configuracion AAA y autorización
| aaa new-model aaa authorization network FLEX_AUTH local |
- Activa el marco de autenticación y autorización.
- Define autorización local para las sesiones VPN.
Configuración de IKEv2
| crypto ikev2 authorization policy SpokePolicyv6 route set interface route set access-list SpokeTraffic route set access-list ipv6 SpokeTrafficv6 | ||||
|
- Política que define rutas y listas de acceso para el tráfico a cifrar.
| Spoke 1 | Spoke 2 |
| crypto ikev2 keyring FLEX_KEYRINGv6 peer HQROUTER address 2001:DB8:ABCD:1::1/64 pre-shared-key local Cisco123 pre-shared-key remote Cisco123 ! peer Spoke2 address 2001:DB8:ABCD:3::3/64 pre-shared-key local Cisco123 pre-shared-key remote Cisco123 ! | crypto ikev2 keyring FLEX_KEYRINGv6 peer HQROUTER address 2001:DB8:ABCD:1::1/64 pre-shared-key local Cisco123 pre-shared-key remote Cisco123 ! peer Spoke1 address 2001:DB8:ABCD:2::2/64 pre-shared-key local Cisco123 pre-shared-key remote Cisco123 ! |
- Define claves precompartidas entre cada router spoke y el router Hub HQRouter.
| Spoke 1 | Spoke 2 |
| crypto ikev2 profile FLEX_PROFILEV6 match identity remote fqdn HQRouter.caribbeantic.local match identity remote fqdn Spoke1.caribbeantic.local identity local fqdn Spoke1.caribbeantic.local authentication local pre-share authentication remote pre-share keyring local FLEX_KEYRINGv6 lifetime 84600 aaa authorization group psk list FLEX_AUTH SpokePolicyv6 virtual-template 1 ! crypto ikev2 dpd 30 5 periodic ! | crypto ikev2 profile FLEX_PROFILEV6 match identity remote fqdn HQRouter.caribbeantic.local match identity remote fqdn Spoke1.caribbeantic.local identity local fqdn Spoke2.caribbeantic.local authentication local pre-share authentication remote pre-share keyring local FLEX_KEYRINGv6 lifetime 84600 aaa authorization group psk list FLEX_AUTH SpokePolicyv6 virtual-template 1 ! crypto ikev2 dpd 30 5 periodic ! |
- Perfil que asocia autenticación PSK, autorización AAA y el uso del Virtual-Template1.
- El lifetime está en 84600 segundos (~23h 30m), sincronizado con Router Hub HQRouter.
- Envía sondas DPD cada 30s y espera 5s de respuesta antes de declarar al peer como inactivo. periodic mantiene sondas regulares, incluso con tráfico activo (a diferencia de on-demand en Router Hub HQRouter).
Configuracion de IPsec Profile
| crypto ipsec profile FLEX_IPSEC_PROFILEv6 set security-association lifetime seconds 7200 set ikev2-profile FLEX_PROFILEV6 |
- Configuracion aplicada a cada Router Spoke. Asocia el perfil IKEv2 en IPsec para proteger el túnel GRE sobre IPv6.
- Lifetime de SA IPsec: 7200s (2 horas).
Configuración de las interfaces Físicas de ambos router Spokes
| Spoke 1 | Spoke 2 |
| interface Loopback0 ip address 10.2.2.2 255.255.255.255 ipv6 address FE80::2 link-local ipv6 address 2001:DB8:BBBB:2::2/128 ipv6 eigrp 100 ! | interface Loopback0 ip address 10.3.3.3 255.255.255.255 ipv6 address FE80::3 link-local ipv6 address 2001:DB8:CCCC:3::3/128 ipv6 eigrp 100 ! |
| interface Tunnel0 ip address negotiated ip mtu 1400 ip nhrp network-id 2 ip nhrp shortcut virtual-template 1 ip tcp adjust-mss 1358 ipv6 address negotiated ipv6 enable ipv6 mtu 1400 ipv6 tcp adjust-mss 1358 ipv6 eigrp 100 ipv6 nhrp network-id 2 ipv6 nhrp shortcut virtual-template 1 ipv6 nhrp redirect tunnel source GigabitEthernet0/0 tunnel mode gre ipv6 tunnel destination 2001:DB8:ABCD:1::1 tunnel protection ipsec profile FLEX_IPSEC_PROFILEv6 ! | interface Tunnel0 ip address negotiated ip mtu 1400 ip nhrp network-id 2 ip nhrp shortcut virtual-template 1 ip tcp adjust-mss 1358 ipv6 address negotiated ipv6 enable ipv6 mtu 1400 ipv6 tcp adjust-mss 1358 ipv6 eigrp 100 ipv6 nhrp network-id 2 ipv6 nhrp shortcut virtual-template 1 ipv6 nhrp redirect tunnel source GigabitEthernet0/0 tunnel mode gre ipv6 tunnel destination 2001:DB8:ABCD:1::1 tunnel protection ipsec profile FLEX_IPSEC_PROFILEv6 ! |
| interface GigabitEthernet0/0 description #### LINK TO ROUTER INTERNET #### ip address 10.12.0.1 255.255.255.248 duplex auto speed auto media-type rj45 ipv6 address FE80::2 link-local ipv6 address 2001:DB8:ABCD:2::2/64 ipv6 ospf 100 area 0 ! | interface GigabitEthernet0/0 description #### LINK TO ROUTER INTERNET #### ip address 10.13.0.1 255.255.255.248 duplex auto speed auto media-type rj45 ipv6 address FE80::3 link-local ipv6 address 2001:DB8:ABCD:3::3/64 ipv6 ospf 100 area 0 ! |
| interface Virtual-Template1 type tunnel ip unnumbered Tunnel0 ip mtu 1400 ip nhrp network-id 2 ip nhrp shortcut virtual-template 1 ip tcp adjust-mss 1360 ipv6 unnumbered Tunnel0 ipv6 enable ipv6 nhrp network-id 2 ipv6 nhrp shortcut virtual-template 1 ipv6 nhrp redirect keepalive 10 3 tunnel mode gre ipv6 tunnel protection ipsec profile FLEX_IPSEC_PROFILEv6 ! | interface Virtual-Template1 type tunnel ip unnumbered Tunnel0 ip mtu 1400 ip nhrp network-id 2 ip nhrp shortcut virtual-template 1 ip tcp adjust-mss 1360 ipv6 unnumbered Tunnel0 ipv6 enable ipv6 nhrp network-id 2 ipv6 nhrp shortcut virtual-template 1 ipv6 nhrp redirect keepalive 10 3 tunnel mode gre ipv6 tunnel protection ipsec profile FLEX_IPSEC_PROFILEv6 ! |
- La Loopback0 es una interfaz lógica que siempre está activa mientras el router esté encendido. Se usa como identificador del router y en ruteo dinámico (EIGRP en IPv4 y IPv6). También sirve como IP de gestión y como dirección para unnumbered en el túnel virtual, lo que simplifica la asignación de direcciones. Al ser una IP fija e inmutable, asegura estabilidad para autenticación y ruteo.
- Es el túnel GRE encapsulado en IPv6, que conecta el Spoke con el HQRouter. Tunnel mode gre ipv6: Transporta paquetes IPv4 e IPv6 dentro de IPv6. Tunnel source / tunnel destination: Define el origen (interfaz WAN del spoke) y el destino (IPv6 pública del router HQRouter). Tunnel protection ipsec profile este aplica cifrado IPsec sobre el túnel.
- NHRP: Proporciona resolución de direcciones y soporte para comunicación spoke-to-spoke.
- MTU/MSS: Ajustes para evitar fragmentación en el cifrado.
- En la interfaz Gi 0/0 WAN que conecta el Spoke al ISP o red externa. Soporta conectividad dual-stack (IPv4 e IPv6). Su IPv6 pública se usa como origen del túnel GRE/IPsec. Participa en OSPFv3 para intercambio de rutas IPv6 con el router Hub HQRouter.
- Plantilla de configuración para crear túneles virtuales dinámicos. Permite que el router genere interfaces virtuales para conexiones adicionales (por ejemplo, spoke-to-spoke). Usa el mismo perfil IPsec y parámetros de túnel que Tunnel0. incluye keepalive 10 3 para detectar caída de enlace en 10s con 3 intentos.
Configuración del enrutamiento estático y dinámico
| Spoke 1 | Spoke 2 |
| router eigrp 10 network 10.2.2.2 0.0.0.0 network 192.168.15.0 eigrp router-id 20.20.20.20 ! router ospfv3 100 router-id 20.20.20.20 ! address-family ipv6 unicast exit-address-family ! ipv6 router eigrp 100 eigrp router-id 20.20.20.20 ! ip route 0.0.0.0 0.0.0.0 10.12.0.4 | router eigrp 10 network 10.3.3.3 0.0.0.0 network 192.168.15.0 eigrp router-id 30.30.30.30 ! router ospfv3 100 router-id 30.30.30.30 ! address-family ipv6 unicast exit-address-family ! ipv6 router eigrp 100 eigrp router-id 30.30.30.30 ! ip route 0.0.0.0 0.0.0.0 10.13.0.4 |
EIGRP (IPv4 e IPv6)
IPv4 EIGRP (AS 10):
- network <loopback> → Anuncia la IP de Loopback (identificador del spoke) al router Hub HQRouter.
- network 192.168.15.0 → Anuncia la subred interna que recibe el pool de direcciones del Hub HQRouter vía FlexVPN.
- eigrp router-id → Asigna un ID único para identificar el spoke en la topología.
IPv6 EIGRP (AS 100):
- Configurado en ipv6 router eigrp 100 con un router-id único por spoke.
- Activa EIGRP para IPv6 en las interfaces relevantes (Loopback0, Tunnel0, Virtual-Template1).
- Permite anunciar redes IPv6 internas y la dirección de loopback hacia router Hub HQRouter.
Función de EIGRP aquí:
Sirve como protocolo principal de enrutamiento interno dentro del túnel para IPv4 e IPv6, redistribuyendo rutas LAN y loopback hacia el router Hub HQRouter y otros spokes.
OSPFv3 (IPv6)
- Configurado como proceso OSPFv3 100.
- router-id definido manualmente para identificación.
- Se activa solo en interfaces WAN (GigabitEthernet0/0) para intercambio de rutas IPv6 con router Hub HQRouter por la red externa (fuera del túnel).
Función de OSPFv3 aquí:
Permite al spoke intercambiar rutas IPv6 con router Hub HQRouter directamente por la red del ISP, antes de establecer el túnel, lo que es útil para descubrir y alcanzar la IP destino del túnel.
Ruta estática por defecto
- Envía todo el tráfico IPv4 no conocido hacia el ISP.
- En Spoke1: 10.12.0.4 es el next-hop del ISP.
- En Spoke2: 10.13.0.4 es el next-hop del ISP.
Función de la ruta por defecto:
Permite que el spoke alcance el router Hub HQRouter a través de la red del ISP antes de que el túnel esté levantado, y que pueda enrutar tráfico externo si el diseño lo requiere.
Establecimiento y verificación del túnel FlexVPN
| HQRouter#show crypto ikev2 sa IPv4 Crypto IKEv2 SAIPv6 Crypto IKEv2 SATunnel-id fvrf/ivrf Status 2 none/none READY Local 2001:DB8:ABCD:1::1/500 Remote 2001:DB8:ABCD:2::2/500 Encr: AES-CBC, keysize: 256, PRF: SHA512, Hash: SHA512, DH Grp:5, Auth sign: PSK, Auth verify: PSK Life/Active Time: 84600/1261 secTunnel-id fvrf/ivrf Status 1 none/none READY Local 2001:DB8:ABCD:1::1/500 Remote 2001:DB8:ABCD:3::3/500 Encr: AES-CBC, keysize: 256, PRF: SHA512, Hash: SHA512, DH Grp:5, Auth sign: PSK, Auth verify: PSK Life/Active Time: 84600/1223 secHQRouter#HQRouter#show ip route Gateway of last resort is 10.11.0.4 to network 0.0.0.0 S* 0.0.0.0/0 [1/0] via 10.11.0.4 HQRouter#show ipv6 route Spoke1#ping ipv6 2001:DB8:CCCC:3::3 source loopback 0 Spoke1#ping 10.3.3.3 source loopback 0 |
Jovanny de Jesus.
