Cisco DMVPN

Il termine DMVPN è l’abbreviazione di Dynamic Multipoint Virtual Private Network, queste permettono la creazione di Tunnel VPN dinamici, la modalità di comunicazione è Hub and Spoke, mentre il traffico, se possibile, avviene direttamente Spoke with Spoke. Per configurare DMVPN abbiamo bisogno di diversi protocolli:

  • mGRE  (Multipoint Generic Routing Encapsulation Protocol)
  • NHRP (Next Hop Resolution Protocol)
  • IGP (Internal Gateway Protocol)
  • IPSec

Nella nostra configurazione come protocollo di Routing useremo EIGRP. Gli apparati su cui ho testato e uso la configurazione che verrà illustrata sono:

  • Cisco ASR 1001-X (funzione di Hub)
  • Cisco ISR4321 (funzione di Spoke)
  • Cisco ISR1117-4P (funzione di Spoke)

Premessa: i Router dovranno essere già configurati per la navigazione su Internet e per il nostro esempio con indirizzi IP Pubblici Statici.

Il primo Router che andiamo a configurare sarà il Cisco ASR 1001-X con la funzione di Hub, prima di tutto determiniamo il tipo di crittografia da usare per proteggere il nostro traffico

crypto isakmp policy 10
 encr 3des
 authentication pre-share
 group 2
 lifetime 28800
crypto isakmp key xxx address 0.0.0.0
!
crypto ipsec transform-set ESP-3DES-SHA esp-3des esp-sha-hmac
 mode tunnel
!
crypto ipsec profile DMVPN
 set security-association lifetime seconds 900
 set transform-set ESP-3DES-SHA

ricordiamoci di sostituire xxx con la key vogliamo usare e che dovremmo impostare uguale anche sui Router Spoke. Inoltre memorizziamo il nome del profilo DMVPN, che useremo in seguito, quando lo assegneremo all’interfaccia di Tunnel che cripterà il traffico in IPSec.

Per prima cosa definiamo una Interfaccia di Loopback come terminazione del traffico DMVPN, questa parte non è obbligatoria ma personalmente preferisco usarla per non appoggiarmi direttamente all’interfaccia WAN.

interface Loopback0
 description Ip per terminazione DMVPN
 ip address IPPUBBLICO 255.255.255.255
 no ip redirects
 no ip unreachables
 no ip proxy-arp

Il codice a seguire definisce una interfaccia di Tunnel che sarà la terminazione/raccolta delle nostre DMVPN.

interface Tunnel1
 description DMVPN
 bandwidth 51200
 ip address 172.16.1.1 255.255.255.0
 no ip redirects
 ip mtu 1400
 ip hello-interval eigrp 95 30
 ip hold-time eigrp 95 90
 no ip next-hop-self eigrp 95
 no ip split-horizon eigrp 95
 ip nhrp network-id 1
 ip tcp adjust-mss 1360
 tunnel source Loopback0
 tunnel mode gre multipoint
 tunnel key 1
 tunnel protection ipsec profile DMVPN

sulla configurazione appena creata porterei attenzione su alcuni punti. ip address deve appartenere una classe che metterà in comunicazione tutte le interfacce Tunnel dei Router che parteciperanno alla nostra Intranet. ip nhrp network-id 1 questo comando definisce il network-id della rete per la quale il protocollo nhrp deve scoprire il next-hop. tunnel source Loopback0 definisce quale deve essere l’interfaccia su cui vanno terminate le DMVPN, nel nostro caso la Loopback0 che abbiamo creato in precedenza. tunnel protection ipsec profile DMVPN definisce il profilo IPSec che verrà utilizzato per criptare il traffico, nel nostro caso è il profilo chiamato DMVPN. Analizziamo ora la parte EIGRP che useremo come Routing Protocol per annunciare le nostre reti private all’interno della Intranet create con le DMVPN.

router eigrp 95
 distribute-list route-map FILTER-ROUTES-IN in Tunnel1
 network 172.16.1.0 0.0.0.255 ##rete DMVPN
 network 192.168.1.0 ##eventuale rete locale che vogliamo propagare

andiamo ad analizzare la parte di configurazione: distribute-list route-map FILTER-ROUTES-IN in Tunnel1 questa riga ci permette di ricevere solamente le reti che ci interessano, evitando potenziali errori.

ip access-list extended FILTER-DMVPN-ROUTES
 permit ip 172.16.1.0 0.0.0.255 any
ip access-list extended FILTER-INTRANET-ROUTES
 permit ip 192.168.100.0 0.0.0.255 any
 permit ip 192.168.110.0 0.0.0.255 any
ip access-list extended FILTER-MNGT-ROUTES
 permit ip 10.10.0.0 0.0.0.255 any
 permit ip 10.10.10.0 0.0.0.255 any
ip access-list extended FILTER-VOICE-ROUTES
 permit ip 192.168.101.0 0.0.0.255 any
 permit ip 192.168.111.0 0.0.0.255 any
!
route-map FILTER-ROUTES-IN permit 10
 description Filter Mngt Routes from Spoke Routers
 match ip address FILTER-MNGT-ROUTES
!
route-map FILTER-ROUTES-IN permit 20
 description Filter Intranet Routes from Spoke Routers
 match ip address FILTER-INTRANET-ROUTES
!
route-map FILTER-ROUTES-IN permit 30
 description Filter Voice Routes from Spoke Routers
 match ip address FILTER-VOICE-ROUTES
!
route-map FILTER-ROUTES-IN permit 40
 description Filter DMVPN Network
 match ip address FILTER-DMVPN-ROUTES

A questo punto la configurazione del nostro Hub è terminata e possiamo procedere alla parte di configurazione del nostro primo Spoke. Come prima parte andiamo a configurare il tipo di crittografia che andremo ad utilizzare, chiaramente dovrà essere la stessa che abbiamo già impostato sul nostro Hub, anche la key deve essere la stessa usata in precedenza

crypto isakmp policy 10
 encr 3des
 authentication pre-share
 group 2
 lifetime 28800
crypto isakmp key xxx address 0.0.0.0
!
crypto ipsec transform-set ESP-3DES-SHA esp-3des esp-sha-hmac
 mode tunnel
!
crypto ipsec profile DMVPN
 set security-association lifetime seconds 900
 set transform-set ESP-3DES-SHA

procediamo alla creazione della interfaccia di Tunnel che stabilirà la connessione con il nostro Hub

interface Tunnel1
 description Tunnel DMVPN
 ip address 172.16.1.2 255.255.255.0
 no ip redirects
 ip mtu 1400
 ip hello-interval eigrp 95 30
 ip hold-time eigrp 95 90
 no ip next-hop-self eigrp 95
 no ip split-horizon eigrp 95
 ip nhrp map multicast IPPUBBLICO HUB
 ip nhrp map 172.16.1.1 IPPUBBLICO HUB
 ip nhrp network-id 1
 ip nhrp nhs 172.16.1.1
 ip tcp adjust-mss 1360
 tunnel source GigabitEthernet0/0
 tunnel mode gre multipoint
 tunnel key 1
 tunnel protection ipsec profile DMVPN

nella configurazione della interfaccia Tunnel andrei ad analizzare alcune righe importanti: ip nhrp map multicast IPPUBBLICO HUB e ip nhrp map multicast IPPUBBLICO HUB queste ci permettono il discovery tramite il protocollo nhrp del next-hop, quindi è molto importante andare ad indicare l’indirizzo dell’interfaccia di Tunnel del nostro Hub, nel nostro caso 172.16.1.1. Inoltre ricordiamoci di applicare la protezione IPSec con il comando tunnel protection ipsec profile DMVPN dove il nome DMVPN deve essere coerente con il profilo che abbiamo creato in precedenza. Ultimo step, andare ad attivare il routing protocol EIGRP per annunciare le nostre reti alla Intranet DMVPN

router eigrp 95
 network 10.10.0.0 0.0.0.255 ##rete per il MNGT
 network 172.16.1.0 0.0.0.255 ##rete per Intranet DMVPN
 network 192.168.100.0 ##rete LAN Dati
 network 192.168.101.0 ##rete LAN Voce

La stessa procedura andrà eseguita su tutti i router Spoke.

In questa guida ho cercato di riassumere le parti più importanti della configurazione, ci sono ancora tanti fattori come la possibilità di creare più Tunnel, magari verso Hub diversi per questioni di HA e anche molto importante attivare la QOS, molto utile ad esempio per priorizzare il traffico Voce nella nostra Intranet. Tutta la documentazione ufficiale la potete trovare sul sito Cisco direttamente a questo link Cisco Dynamic Multipoint VPN.