barra de menu

jueves, 10 de diciembre de 2015

DMVPN (Dynamic Multipoint VPN) - CISCO

DMVPN - Dynamic Multipoint Virtual Private Network



DMVPN es una tecnología que nos permite tener una configuración HUB-SPOKE con túneles VPN. La idea es que cuando dos Spokes quieren hablar entre ellos, será el hub el que les dará los datos para montar el túnel entre ellos. Simplifica las comunicaciones y ahorra costes. Los túneles se levantan bajo demanda.

No tenemos que montar obligatoriamente IPSEC para que funcione mGRE, pero en los tiempos que estamos, lo mejor es encriptar nuestras comunicaciones. Por ello,hay que tener en cuenta que el equipo que hace de HUB tendrá que mantener una sesión IPSEC con cada spoke y, eso conlleva mucha capacidad de procesamiento si tenemos muchos spokes.

Esta tecnología se basa en mGRE (Multi GRE), NHRP (Next Hop Resolution Protocol) y IPSEC.

Tenemos 3 tipos o fases para implementar dmvpn:
  • Fase 1(obsoleta): Hub and Spoke - mGRE en el Hub y p2p GRE spokes . NHRP se necesita para que los spokes se registren en el hub. No hay túneles spoke-spoke. El "next-hop" de los spokes lo cambia el hub. Se permite sumarización y generación de ruta por defecto en el hub.
  • Fase 2(obsoleta): Hub and Spoke con Spoke-to-spoke tunnels - mGRE en el Hub y en spokes. NHRP para se necesita que los spokes se registren en el hub y para la resolucion spoke-spoke. Hay túneles spoke-spoke iniciados por los propios spokes. No se permite sumrización y generación de ruta por defecto en el hub.
  • Fase 3: Igual que Fase 2 pero ahora los Spoke pueden también responder a los NHRP Requests.
    mGRE en el Hub y en spokes. NHRP se necesita para que los spokes se registren en el hub
    y para la resolucion spoke-spoke. Cuando el spoke le pregunta con NHRP que quiere montar un túnel con otro spoke, el hub le responde con un mensaje NHRP redirect para decirle que dirección ip debería ser su siguiente salto y se instala en la tabla de rutas. Se permite sumarización y generación de ruta por defecto en el hub.
    El "next-hop" de los spokes lo cambia el hub


Tenemos 2 roles:
  • DMVPN Hub o NHRP Server (NHS)
  • DMVPN Spokes o NHRP Clients  (NHC)
En los Spokes configuramos la direccion del Hub para que se registren enviando un NHRP Registration Request. Los Hub aprenden las direcciones públicas y del túnel.

mGRE puede transportar unicast, multicast, y broadcast.  El hub puede montar muchos túneles en el mismo interface físico. Es gracias a NHRP, que ejecuta el ARP pàra descubrir y mapear los destinos de los túneles. NHRP es un protocolo de capa 2.


Vamos a confgurar un laboratorio DMVPN.



Vamos a usar la topología y configuraciones básicas del laboratorio de VPN del curso CCNP.

Lo primero que vamos a crear son túneles GRE+IPSEC, que es la solución previa a DMVPN.

Usaremos el protocolo EIGRP para la comunicación entre equipos a través de los túneles. Esta es la configuración básica para hacer una arquitectura Point-To-Multipoint con túneles GRE+IPSEC donde GRE nos aporta la capacidad de transportar unicast, broadcast, multicast y protocolos de enrutamiento y, IPSEC la seguridad e integridad de los datos:



CONFIGURACIÓN BÁSICA  GRE+IPSEC POINT-TO-MULTIPPOINT 

Antes de que hagáis un copy-paste de todo, os propongo que solo configuréis EIGRP, los túneles, la ruta estática y la configuración básica de las interfaces, claro. Una vez montado podéis ver EIGRP sobre GRE, es decir mGRE sin IPSEC.

R1#

interface Ethernet0/0
 ip address 10.0.0.1 255.255.255.252
 full-duplex
 no sh
!
interface Ethernet0/1
 ip address 192.168.0.1 255.255.255.0
 full-duplex
 no sh 
!
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!


Creamos los túneles:


interface Tunnel1
ip address 100.100.100.1 255.255.255.252
ip mtu 1400
ip tcp adjust-mss 1360
delay 1000
tunnel source Ethernet0/0
tunnel destination 172.16.1.2
!
interface Tunnel2
ip address 100.100.100.5 255.255.255.252
ip mtu 1400
ip tcp adjust-mss 1360
delay 1000
tunnel source Ethernet0/0
tunnel destination 172.16.2.2
!
interface Tunnel3
ip address 100.100.100.9 255.255.255.252
ip mtu 1400
ip tcp adjust-mss 1360
delay 1000
tunnel source Ethernet0/0
tunnel destination 172.16.3.2

Ruta estática por defecto:

ip route 0.0.0.0 0.0.0.0 10.0.0.2


EIGRP


router eigrp 1
net 192.168.0.0 0.0.0.255
net 100.100.100.0 0.0.0.15
no auto


FASE I de IPSEC:


crypto isakmp enable
crypto isakmp policy 1
authentication pre-share
encryption aes 128
group 2
hash sha
lifetime 86400
crypto isakmp identity address
crypto isakmp key 0 IPSEC-GRE address 0.0.0.0




FASE 2 de IPSEC:


crypto ipsec transform-set IPSEC-GRE-TRANSFORM esp-aes 128 esp-sha-hmac
mode transport
crypto ipsec security-association lifetime seconds 86400




Creamos un access-list:


access-list 103 permit gre host 10.0.0.1 host 172.16.1.2
access-list 104 permit gre host 10.0.0.1 host 172.16.2.2
access-list 105 permit gre host 10.0.0.1 host 172.16.3.2


Y ahora el crypto map:


crypto map VPN-IPSEC-GRE local-address e0/0


crypto map VPN-IPSEC-GRE 10 ipsec-isakmp
match address 103
set peer 172.16.1.2
set transform-set IPSEC-GRE-TRANSFORM


crypto map VPN-IPSEC-GRE 20 ipsec-isakmp
match address 104
set peer 172.16.2.2
set transform-set IPSEC-GRE-TRANSFORM


crypto map VPN-IPSEC-GRE 30 ipsec-isakmp
match address 105
set peer 172.16.3.2
set transform-set IPSEC-GRE-TRANSFORM


Aplicamos el crypto map en la interfaz:


interface e0/0
crypto map VPN-IPSEC-GRE



--------------------------------------------------------


R3#

interface Ethernet0/0
 ip address 172.16.1.2 255.255.255.252
 full-duplex
 no sh 
!
interface Ethernet0/1
 ip address 192.168.10.1 255.255.255.0
 full-duplex
 no sh 
!
interface Loopback0
 ip address 3.3.3.3 255.255.255.255
!
interface Tunnel0
ip address 100.100.100.2 255.255.255.252
ip mtu 1400
ip tcp adjust-mss 1360
delay 1000
tunnel source Ethernet0/0
tunnel destination 10.0.0.1
!
ip route 0.0.0.0 0.0.0.0 172.16.1.1
!
router eigrp 1
net 192.168.10.0 0.0.0.255
net 100.100.100.0 0.0.0.3
no auto
!
crypto isakmp enable
crypto isakmp policy 1
authentication pre-share
encryption aes 128
group 2
hash sha
lifetime 86400
!
crypto isakmp identity address
!
crypto isakmp key 0 IPSEC-GRE address 0.0.0.0
!
crypto ipsec transform-set IPSEC-GRE-TRANSFORM esp-aes 128 esp-sha-hmac
mode transport
!
crypto ipsec security-association lifetime seconds 86400
!
access-list 103 permit gre host 172.16.1.2 host 10.0.0.1
!
crypto map VPN-IPSEC-GRE local-address e0/0
!
crypto map VPN-IPSEC-GRE 10 ipsec-isakmp
match address 103
set peer 10.0.0.1
set transform-set IPSEC-GRE-TRANSFORM
!
interface e0/0
crypto map VPN-IPSEC-GRE
!


-------------------------------------------------------------


R4#

interface Ethernet0/0
 ip address 172.16.2.2 255.255.255.252
 full-duplex
 no sh 
!
interface Ethernet0/1
 ip address 192.168.20.1 255.255.255.0
 full-duplex
 no sh 
!
interface Loopback0
 ip address 4.4.4.4 255.255.255.255
!
interface Tunnel0
ip address 100.100.100.6 255.255.255.252
ip mtu 1400
ip tcp adjust-mss 1360
delay 1000
tunnel source Ethernet0/0
tunnel destination 10.0.0.1
!
ip route 0.0.0.0 0.0.0.0 172.16.2.1
!
router eigrp 1
net 192.168.20.0 0.0.0.255
net 100.100.100.4 0.0.0.3
no auto
!
crypto isakmp enable
crypto isakmp policy 1
authentication pre-share
encryption aes 128
group 2
hash sha
lifetime 86400
!
crypto isakmp identity address
!
crypto isakmp key 0 IPSEC-GRE address 0.0.0.0
!
crypto ipsec transform-set IPSEC-GRE-TRANSFORM esp-aes 128 esp-sha-hmac
mode transport
!
crypto ipsec security-association lifetime seconds 86400
!
access-list 104 permit gre host 172.16.2.2 host 10.0.0.1
!
crypto map VPN-IPSEC-GRE local-address e0/0
!
crypto map VPN-IPSEC-GRE 10 ipsec-isakmp
match address 104
set peer 10.0.0.1
set transform-set IPSEC-GRE-TRANSFORM
!
interface e0/0
crypto map VPN-IPSEC-GRE
!

-------------------------------------------------------------


R5#

interface Ethernet0/0
 ip address 172.16.3.2 255.255.255.252
 full-duplex
 no sh 
!
interface Ethernet0/1
 ip address 192.168.30.1 255.255.255.0
 full-duplex
 no sh 
!
interface Loopback0
 ip address 5.5.5.5 255.255.255.255
!
interface Tunnel0
ip address 100.100.100.10 255.255.255.252
ip mtu 1400
ip tcp adjust-mss 1360
delay 1000
tunnel source Ethernet0/0
tunnel destination 10.0.0.1
!
ip route 0.0.0.0 0.0.0.0 172.16.3.1
!
router eigrp 1
net 192.168.30.0 0.0.0.255
net 100.100.100.8 0.0.0.3
no auto
!
crypto isakmp enable
crypto isakmp policy 1
authentication pre-share
encryption aes 128
group 2
hash sha
lifetime 86400
crypto isakmp identity address
!
crypto isakmp key 0 IPSEC-GRE address 0.0.0.0
!
crypto ipsec transform-set IPSEC-GRE-TRANSFORM esp-aes 128 esp-sha-hmac
mode transport
!
crypto ipsec security-association lifetime seconds 86400
!
access-list 105 permit gre host 172.16.3.2 host 10.0.0.1
!
crypto map VPN-IPSEC-GRE local-address e0/0
!
crypto map VPN-IPSEC-GRE 10 ipsec-isakmp
match address 105
set peer 10.0.0.1
set transform-set IPSEC-GRE-TRANSFORM
!
interface e0/0
crypto map VPN-IPSEC-GRE
!


R2#

ip routing
interface Ethernet0/0
 ip address 10.0.0.2 255.255.255.252
 full-duplex
 no sh 
!
interface Ethernet0/1
 ip address 172.16.1.1 255.255.255.252
 full-duplex
 no sh 
!
interface Ethernet0/2
 ip address 172.16.2.1 255.255.255.252
 full-duplex
 no sh 
!
interface Ethernet0/3
 ip address 172.16.3.1 255.255.255.252
 full-duplex
 no sh 
!
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
!

Ahora, con toda esta configuración tenemos montado mGRE+IPSEC, que en realidad es un conjunto de enlaces P2P GRE+IPSEC.

Comprobamos haciendo ping de PC4 a todos los demás y comprobamos con trace los saltos que nos da para llegar a los PC. El tráfico enre PC's tiene que ir por los túneles.

Hay comunicación entre PC's y el trace nos muestra lo saltos a través de los túneles

EIGRP está funcionando por los túneles y nuestras comunicaciones están encriptadas.


Para saber que tenemos un túnel GRE+IPSEC:

47 - protcolo Ip para GRE


Ahora, si en nuestra empresa tuviéramos muchos túneles, la configuración del equipo se agrandaría, lo que conlleva un rendimiento pobre además de ser más difícil la visión de la configuración ante tantas líneas. 

Con DMVPN reducimos considerablemente la configuración en el HUB introduciendo nuevos comandos:
  • crypto ipsec profile
  • tunnel protection ipsec profile
  • ip nhrp map multicast dynamic
Para configurar DMVPN vamos a R1 (HUB) y solo configuramos un túnel y el crypto map no hay que aplicarlo en la interfaz de salida. esto sería la "FASE I", . Con DMVPN  la configuración de R1 que hace de HUB y R3 quedarían así:

R1#


crypto isakmp policy 1
encryption aes
authentication pre-share
group 2
crypto isakmp key IPSEC-GRE address 0.0.0.0 0.0.0.0
!
crypto ipsec security-association lifetime seconds 86400
!
crypto ipsec transform-set IPSEC-GRE-TRANSFORM esp-aes esp-sha-hmac
mode transport
!
crypto ipsec profile DMVPN
set transform-set IPSEC-GRE-TRANSFORM
!
interface Tunnel0
ip address 100.100.100.1 255.255.255.0
no ip redirects
ip mtu 1400
ip tcp adjust-mss 1360
ip nhrp authentication FASEI
ip nhrp map multicast dynamic
ip nhrp network-id 100
ip nhrp holdtime 600
no ip split-horizon eigrp 1
delay 1000
tunnel source Ethernet0/0
tunnel mode gre multipoint
tunnel key 1234
tunnel protection ipsec profile DMVPN
!
router eigrp 1
network 100.100.100.0 0.0.0.15
network 192.168.0.0
no auto-summary
!
ip route 0.0.0.0 0.0.0.0 10.0.0.2


---------------------------------------------------------


R3#


crypto isakmp policy 1
encryption aes
authentication pre-share
group 2
hash sha
lifetime 86400
!
crypto isakmp identity address
crypto isakmp key IPSEC-GRE address 0.0.0.0 0.0.0.0
!
crypto ipsec security-association lifetime seconds 86400
!
crypto ipsec transform-set IPSEC-GRE-TRANSFORM esp-aes esp-sha-hmac
mode transport
!
crypto map VPN-IPSEC-GRE 10 ipsec-isakmp
set peer 10.0.0.1
set transform-set IPSEC-GRE-TRANSFORM
match address 103
!
interface Tunnel0
ip address 100.100.100.3 255.255.255.0
ip mtu 1400
ip tcp adjust-mss 1360
ip nhrp authentication FASEI
ip nhrp map 100.100.100.1 10.0.0.1
ip nhrp network-id 100
ip nhrp holdtime 300
ip nhrp nhs 100.100.100.1
delay 1000
tunnel source Ethernet0/0
tunnel destination 10.0.0.1
tunnel key 1234
!
interface Ethernet0/0
crypto map VPN-IPSEC-GRE
!
router eigrp 1
network 100.100.100.0 0.0.0.255
network 192.168.10.0
no auto-summary
!
ip route 0.0.0.0 0.0.0.0 172.16.1.1
!
access-list 103 permit gre host 172.16.1.2 host 10.0.0.1


He subrayado en negro los comandos importantes que han cambiado respecto al túnel. Como vemos, en el HUB  se reduce la configuración. Os dejo los equipos R4 y R5 para que los configuréis fijándoos en la configuración de R3. Comprobad con ping y trace. También podéis ver las asociaciones que hace el protocolo NHRP:

SHOW IP NHRP
Si hacéis un ping de spoke a spoke, veréis en los saltos de los túneles que pasa por R1. No hay túneles de spoke a spoke.


En los Spokes también podemos reducir la configuración aplicando un perfil como en el HUB:

R3#


no crypto map VPN-IPSEC-GRE 10
!
interface Ethernet0/0
no crypto map VPN-IPSEC-GRE
!
crypto ipsec profile DMVPN
set transform-set IPSEC-GRE-TRANSFORM
!
interface tunnel 0
tunnel protection ipsec profile DMVPN






Ahora, si tenemos el caso de que nuestro equipo Spoke no tiene una dirección ip fija (ADSL o Cable) tenemos que hacer una pequeña modificación solo en el Spoke, el HUB se queda igual.

Para mostrar este ejemplo, configuro un servidor DHCP en R2 para que asigne direcciones ip a los equipos R3, R4 y R5.  Esto no es un ejemplo real, pero para ver como funciona el protocolo lo hacemos así, emulamos que tenemos un ISP que nos da una dirección dinámica:

R2#


ip dhcp excluded-address 172.16.1.1
ip dhcp excluded-address 172.16.2.1
ip dhcp excluded-address 172.16.3.1
!
ip dhcp pool R3
network 172.16.1.0 255.255.255.252
default-router 172.16.1.1
!
ip dhcp pool R4
network 172.16.2.0 255.255.255.252
default-router 172.16.2.1
!
ip dhcp pool R5
network 172.16.3.0 255.255.255.252
default-router 172.16.3.1



En R1, el HUB, no hay que modificar nada, solo en los Spokes:

R3#


crypto map VPN-IPSEC-GRE 10 ipsec-isakmp
set peer 10.0.0.1
set security-association level per-host
set transform-set IPSEC-GRE-TRANSFORM
match address 103
!
interface Ethernet0/0
ip address dhcp
full-duplex
crypto map VPN-IPSEC-GRE
!
access-list 103 permit gre any host 10.0.0.1


Observad que el access list ahora permite cualquier ip de origen ya que no sabemos cuál nos va a proporcionar nuestro ISP. Haced lo mismo en los otros dos Spokes.




FASE 2

Aquí lo que conseguimos es que dinámicamente los spokes monten túneles entre ellos sin tener que pasar por el HUB. Quitamos EIGRP (hace cosas raras, quizás no ip split horizon y no ip next-hop-self lo resuelvan) e implementamos OSPF, así os muestro un detalle (ip ospf network broadcast) Cuando un spoke inicie la comunicación con otro spoke se montará un túnel entre ellos. Los equipos quedarían así:

R1#

No hay que configurar en el HUB nada relativo a NHRP. Solo OSPF


interface Tunnel0
ip address 100.100.100.1 255.255.255.0
no ip redirects
ip mtu 1400
ip tcp adjust-mss 1360
ip nhrp authentication FASEI
ip nhrp map multicast dynamic
ip nhrp network-id 100
ip nhrp holdtime 600
ip ospf network broadcast
ip ospf priority 2
delay 1000
tunnel source Ethernet0/0
tunnel mode gre multipoint
tunnel key 1234
tunnel protection ipsec profile DMVPN
!
no router eigrp 1
router ospf 1
log-adjacency-changes
network 100.100.100.0 0.0.0.255 area 0
network 192.168.0.0 0.0.0.255 area 0





R3-R4-R5

Si no lo hemos hecho antes en los spokes, lo hacemos ahora para crear el DMVPN Profile y aplicarlo al interface tunnel:



no crypto map VPN-IPSEC-GRE 10
!
interface Ethernet0/0
no crypto map VPN-IPSEC-GRE
!
crypto ipsec profile DMVPN
set transform-set IPSEC-GRE-TRANSFORM
!
interface tunnel 0
tunnel protection ipsec profile DMVPN



Ojo que la dirección ip del túnel es diferente para cada uno.


interface Tunnel0
ip address 100.100.100.3 255.255.255.0
no ip redirects
ip mtu 1400
ip tcp adjust-mss 1360
ip nhrp authentication FASEI
ip nhrp map 100.100.100.1 10.0.0.1
ip nhrp map multicast 10.0.0.1
ip nhrp network-id 100
ip nhrp holdtime 300
ip nhrp nhs 100.100.100.1
ip ospf network broadcast
ip ospf priority 0
delay 1000
tunnel source Ethernet0/0
no tunnel destination 10.0.0.1
tunnel mode gre multipoint
tunnel key 1234
tunnel protection ipsec profile DMVPN
!
no router eigrp 1 
router ospf 1
log-adjacency-changes
network 100.100.100.0 0.0.0.255 area 0
network 192.168.10.0 0.0.0.255 area 0


Si no le ponemos el comando ip ospf network broadcast no levanta la vecindad.


Si miramos la tabla de rutas y la tabla NHRP vemos todo como antes, aunque ahora con OSPF. Es cuando lanzamos un ping desde el PC de uno de los spokes hasta otro PC en otro de los spokes. Veremos en las tablas como la dirección para llegar al PC ya no es la .1, sino la .3,4 o 5 dependiendo a donde queramos llegar. Ya no se pasa por R1.

ping desde PC1 a PC2
Ahora para llegar a 192.168.20.0 se hace directamente a través de la 100.100.100.4
También podéis ver que en los spokes se crear una sesión IPSEC entre los propios spokes con elcomando show crypto session.


FASE 3

Aquí conseguimos que el hub le diga a los spokes que cuando quieran comunicarse entre ellos, para resolver los next hop deben hablar entre ellos mismos y no preguntarle al HUB, de manera que este último no tiene ni que resolver ip y ni consumir recursos del router.

Por ejemplo, un spoke (R3) quiere comunicarse con otro (R5). Para ello hace un lookup de su tabla de rutas y le dice que su next hop para llegar a R5 es R1. Este hace un lookup y se lo manda a R5. Aquí se da cuenta que tanto la entrada como la salida de esa petición han sido por la interface tunnel 0. Se da cuenta de que forman parte de una misma DMVPN.

Entonces el HUB (R1) le manda un mensaje NHRP Traffic Indication al spoke (R3), este lo procesa y hace un NHRP Resolution Request, que es una petición de la direccion ip de la red del spoke R5 que viaja hasta R5.

Cuando llega el NHRP Resolution Request a R5 y este se da cuenta de que es el final del camino de la red DMVPN, monta un túnel IPSEC con R3 y le envía por el propio túnel un NHRP Resolution reply que contiene las direcciones ip.

Cuando este NHRP Resolution reply llega a R3, este crea el mapeo en la tabla y a partir de ese momento se envían los apqeutes directamente.



 Esto reduce la tabla de rutas en los spokes y las preguntas al hub. Es lo más usado actualmente.

En el hub:

(config)#interface tunnel 0
(config-if)#ip nhrp redirect

En los spokes:

(config)#interface tunnel 0
(config)#ip nhrp shortcut


Para verificar:

show crypto session
show ip nhrp show ip nhrp nhs detail
show dmvpn
show ip route  - las rutas de NHRP se marcan con una H y con 250 de AD.


También se puede configurar DMVPN con BGP para grandes infraestructuras. Los HUB actuaría como Routers Reflector (RR) y los SPOKES  como ROuter Reflector Clients. Es fácil montar la política de enrutmiento y además, si hay un cambio en la red solo se manda un update y no el montón de query de EIGRP o la inundación de LSA de OSPF.

4 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
    Respuestas
    1. Era algo planeado desde hace tiempo pero me cuesta sacarle horas a esta actividad "no remunerada". ¿Has montado el laboratorio con las 3 fases para EIGRP y OSPF? Estoy pensando en abrir el blog a colaboradores porque no me da la vida. Gracias por tu comentario. Un saludo.

      Eliminar
  2. Hola paco , tengo duda si DMVPN ospf en Fase 3 , el type de network broadcast or point-to-multipoint ? , parece q olvidan mucho ese detalle

    ResponderEliminar