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

  1. Se establece el nombre del equipo y la zona horaria.
  2. Se configura el dominio DNS interno y los registros host para resolución de nombres de los routers en IPv6.
  3. 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

  1. 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

¡

 

  1. Se define la política de autorización (SPOKEPOLICYv6) con asignación de direcciones IPv6 e IPv4 a clientes VPN.
  2. 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.
  3. 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.
  4. 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

!

  1. 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.
  2. 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.
  3. Se define el perfil IPsec que se usará para proteger el túnel GRE sobre IPv6.
  4. Asocia el perfil IKEv2 (FLEX_PROFILEv6) previamente definido.

 

  • Configuración de las Interfaces físicas
  1. La interface Loopback0 sirve como identificador y dirección de gestión del router, conectividad túneles.
  2. La interface GigabitEthernet0/0 es la conexión hacia Internet y punto de origen para túneles FLEX VPN.
  3. 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

!

  1. Se configuro el protocolo de enrutamiento dinámico EIGRP 10 IPv4 y EIGRP 100 IPV6 para redes internas interface loopback e interface túneles.
  2. 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

  1. 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.
  2. 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

 

Spoke 1Spoke 2
ip access-list standard SpokeTraffic

 permit 10.2.2.0 0.0.0.255

!

ipv6 access-list SpokeTrafficv6

 permit ipv6 2001:DB8:BBBB:2::/64 any

!

ip access-list standard SpokeTraffic

 permit 10.3.3.0 0.0.0.255

!

ipv6 access-list SpokeTrafficv6

 permit ipv6 host 2001:DB8:BBBB:3::3 any

!

  • Política que define rutas y listas de acceso para el tráfico a cifrar.
Spoke 1Spoke 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 1Spoke 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 1Spoke 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 1Spoke 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
10.0.0.0/8 is variably subnetted, 7 subnets, 3 masks
C 10.1.1.1/32 is directly connected, Loopback0
S 10.2.2.0/24 is directly connected, Virtual-Access1
D 10.2.2.2/32 [90/27008000] via 192.168.15.1, 00:13:10, Virtual-Access1
S 10.3.3.0/24 is directly connected, Virtual-Access2
D 10.3.3.3/32 [90/27008000] via 192.168.15.2, 00:12:34, Virtual-Access2
C 10.11.0.0/29 is directly connected, GigabitEthernet0/0
L 10.11.0.1/32 is directly connected, GigabitEthernet0/0
192.168.15.0/32 is subnetted, 2 subnets
S 192.168.15.1 is directly connected, Virtual-Access1
S 192.168.15.2 is directly connected, Virtual-Access2

HQRouter#show ipv6 route
LC 2001:DB8:AAAA:1::1/128 [0/0]
via Loopback0, receive
C 2001:DB8:ABCD:1::/64 [0/0]
via GigabitEthernet0/0, directly connected
L 2001:DB8:ABCD:1::1/128 [0/0]
via GigabitEthernet0/0, receive
O 2001:DB8:ABCD:2::/64 [110/2]
via FE80::4, GigabitEthernet0/0
O 2001:DB8:ABCD:3::/64 [110/2]
via FE80::4, GigabitEthernet0/0
S 2001:DB8:BBBB:2::/64 [1/0], tag 1
via Virtual-Access1, directly connected
D 2001:DB8:BBBB:2::2/128 [90/27008000]
via FE80::EF7:4FFF:FE82:0, Virtual-Access1
S 2001:DB8:BBBB:3::3/128 [1/0], tag 1
via Virtual-Access2, directly connected
S 2001:DB8:BEEF:1::/128 [1/0], tag 1
via Virtual-Access1, directly connected
S 2001:DB8:BEEF:1::1/128 [1/0], tag 1
via Virtual-Access2, directly connected
D 2001:DB8:CCCC:3::3/128 [90/27008000]
via FE80::E6C:FFF:FEA8:0, Virtual-Access2
L FF00::/8 [0/0]
via Null0, receive
HQRouter#

Spoke1#ping ipv6 2001:DB8:CCCC:3::3 source loopback 0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:DB8:CCCC:3::3, timeout is 2 seconds:
Packet sent with a source address of 2001:DB8:BBBB:2::2
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 30/57/124 ms

Spoke1#ping 10.3.3.3 source loopback 0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 10.2.2.2
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 36/56/80 ms
Spoke1#

 

Jovanny de Jesus.