Tiziano

Tiziano

Sabato, 21 Marzo 2015 06:45

DMVPN FASE 1 - PARTE I

Questo post è il seguito del post precedente "DMVPN FASE 1 - PARTE I". Come citato alla fine di quel post, per completare l'implementazione del modello DMVPN è necessario abilitare un protocollo di routing IP. E qui nascono problematiche interessanti come, quale protocollo scegliere, come configurarlo ? Nelle applicazioni pratiche sono tre i protocolli di interesse: EIGRP, OSPF e BGP.
 
NOTA 1: in teoria può essere utilizzato anche il RIP, ma come noto questo vecchio protocollo ha due ordini di problemi: convergenza lenta e diametro delle rete limitato.
 
NOTA 2: tra i classici protocolli IGP, l'IS-IS non è supportato nel modello DMVPN. Secondo la documentazione Cisco, la ragione per cui IS-IS non è applicabile nel modello DMVPN è che i messaggi IS-IS sono trasportati direttamente dal Livello 2 e non da pacchetti IP ! La frase testuale che ho letto in una presentazione al Cisco Live 2013 dal titolo "Advanced Concepts of DMVPN", è la seguente: "IS-IS cannot be used since it doesn’t run over IP".
Questa ragione in teoria non sta in piedi poiché nei tunnel GRE è possibile trasportare di tutto, anche messaggi IS-IS, ma Cisco forse non aveva voglia di implementare un comando del tipo "ip nhrp map iso [dynamic | indirizzo NBMA]" ... . D'altra parte, nei tunnel GRE p2p, i messaggi IS-IS viaggiano tranquillamente, anche nei router Cisco.
 
Ciascuno di questi protocolli va valutato rispetto a caratteristiche importanti come la scalabilità della configurazione (nelle applicazioni pratiche ci si può tranquillamente trovare davanti a reti con centinaia, se non migliaia di router Spoke) e soprattutto la velocità di convergenza. 
In questo post, partendo dalla rete del post precedente, che riporto per completezza, illustrerò come utilizzare i tre protocolli EIGRP, OSPF e BGP, mettendo in evidenza gli aspetti di scalabilità e convergenza di ciascuna soluzione. In tutti i test successivi, utilizzerò una topologia Dual DMVPN. La rete test è la stessa del post precedente, che riporto qui per completezza.

 
ROUTING VIA EIGRP
L'abilitazione di EIGRP sulla rete test richiede un solo accorgimento fondamentale: disabilitare lo split-horizon sulle interfacce "tunnel X" dei router Hub. Questo è un aspetto ben noto nel funzionamento di EIGRP su reti NBMA. La regola dello split-horizon, quando abilitata, impedisce ai router Hub di annunciare i prefissi ricevuti da un router Spoke, agli altri router Spoke. In altre parole, a ciascun router Spoke viene impedita la visibilità delle reti raggiungibili attraverso gli altri router Spoke.
In realtà non è sempre necessario disabilitare lo split-horizon sulle interfacce "tunnel X" dei router Hub. Poiché il modello DMVPN fase 1 non prevede la comunicazione diretta tra router Spoke, una soluzione molto semplice e altamente scalabile potrebbe quella di far generare ai router Hub una default-route EIGRP, rendendo così inutile la presenza sulla Tabella di Routing dei router Spoke, dei prefissi IP raggiungibili attraverso gli altri router Spoke. In questo caso, disabilitare lo split-horizon non comporta alcunché. Comunque, per tranquillità, considerato che nel modello DMVPN fase 2, come si vedrà (e come è intuitivo) è invece obbligatorio disabilitarlo, consiglio comunque, in uno scenario DMVPN, di disabilitare sempre  lo split-horizon.
Un altro accorgimento classico da adottare, in presenza di topologie Hub-and-Spoke con protocollo di routing EIGRP, è abilitare la funzionalità EIGRP Stub sui router Spoke, per impedire che i router Spoke vengano utilizzati come transito per destinazioni raggiungibili attraverso i router Hub, nel caso di fuori servizio di uno dei due Hub.
Riporto di seguito le configurazioni dei router H1 e SP1 della rete Test. Come sempre, le configurazioni di H2 e SP2 sono analoghe e vengono lasciate come esercizio. Per semplicità, nella configurazione ho omesso il comando per l'autenticazione dei messaggi NHRP e sui router Spoke i comandi dei timer che regolano la registrazione delle associazioni <Indirizzo IP logico ; Indirizzo NBMA>.
 
hostname H1
!
interface Tunnel11
  ip address 20.0.0.11 255.255.255.0
  no ip split-horizon eigrp 200
  ip nhrp map multicast dynamic
  ip nhrp network-id 200
  ip summary-address eigrp 200 0.0.0.0 0.0.0.0
  tunnel source FastEthernet0/1
  tunnel mode gre multipoint
!
router eigrp 200
  no auto-summary
  network 20.0.0.0
  network 50.0.0.0
!
 
Il comando "ip summary-address eigrp 200 0.0.0.0 0.0.0.0" consente di generare una default-route EIGRP, che viene inviata su tutte le adiacenze EIGRP stabilite attraverso l'interfaccia "tunnel 11". Si noti inoltre che, anche se non necessario a causa della generazione della default-route EIGRP, ho disabilito comunque sull'interfaccia "tunnel 11", lo split-horizon.
 
hostname SP1
!
interface Tunnel1
  ip address 20.0.0.1 255.255.255.0
  ip nhrp map multicast 172.16.1.1
  ip nhrp map 20.0.0.11 172.16.1.1
  ip nhrp network-id 200
  ip nhrp nhs 20.0.0.11
  tunnel source FastEthernet2/0
  tunnel destination 172.16.1.1
!
interface Tunnel11
  ip address 30.0.0.1 255.255.255.0
  ip nhrp map multicast 172.16.1.2
  ip nhrp map 30.0.0.11 172.16.1.2
  ip nhrp network-id 300
  ip nhrp nhs 30.0.0.11
  tunnel source FastEthernet2/0
  tunnel destination 172.16.1.2
!
router eigrp 200
  no auto-summary
  network 20.0.0.0
  network 30.0.0.0
  network 50.0.0.0
  eigrp stub 
 
Si noti che le interfacce "tunnel X" configurate sui router Spoke non hanno alcun comando relativo a EIGRP. Si noti inoltre il comando "eigrp stub" all'interno del processo EIGRP, che abilita sul router Spoke SP1 la funzionalità EIGRP Stub. Ricordo che il comando "eigrp stub" consente di default l'annuncio dei prefissi direttamente connessi e delle summary route
Il risultato della configurazione è che il router Spoke SP1 vede due Next-Hop per la default-route annunciata da EIGRP, i tunnel 1 e 11. Ciò significa che i due tunnel 1 e 11 sono utilizzati in Load Balancing
 
SP1# show ip route eigrp
. . . < legenda omessa > . . .
Gateway of last resort is 30.0.0.11 to network 0.0.0.0
 
D*    0.0.0.0/0 [90/26882560] via 30.0.0.11, 00:00:58, Tunnel11
                         [90/26882560] via 20.0.0.11, 00:00:58, Tunnel1
 
Qualora si volesse utilizzare un tunnel come primario (ad esempio il tunnel 1) e l'altro come backup, è sufficiente aumentare il costo complessivo con cui SP1 vede la default-route attraverso il tunnel di backup (ad esempio il tunnel 11), oppure, in modo equivalente, diminuire il costo complessivo con cui SP1 vede la default-route attraverso il tunnel primario.
Per fare questo, ricordo che è buona regola agire sul parametro delay dell'interfaccia "tunnel X". Si potrebbe anche agire sul parametro bandwidth, ma questo è utilizzato anche da altri protocolli e funzioni (es. OSPF per il calcolo delle metriche, meccanismi di QoS, ecc.), per cui è bene non variarlo.
Il parametro delay associato all'interfaccia "tunnel X" si può visualizzare con il classico comando "show interface tunnel X". Ad esempio, per l'interfaccia "tunnel 11" si ottiene:
 
SP1#sh int tunnel 11 | i DLY
  MTU 17916 bytes, BW 100 Kbit/sec, DLY 50000 usec,
 
da cui si evince che il parametro delay è pari a 50.000 microsec. Per aumentare questo valore, ad esempio per raddoppiarlo, si utilizza la seguente configurazione (NOTA: nella configurazione il nuovo valore va espresso in decine di microsec):
 
interface tunnel 11
  delay 10000
 
Una identica configurazione andrebbe fatta sugli altri router Spoke. Il risultato che si ottiene è il seguente:
 
SP1# show ip route eigrp
. . . < legenda omessa > . . .
Gateway of last resort is 20.0.0.11 to network 0.0.0.0
 
D*    0.0.0.0/0 [90/26882560] via 20.0.0.11, 00:15:04, Tunnel1
 
Infine, per verificare che il traffico Spoke-Spoke fluisce effettivamente attraverso il router Hub H1, si può eseguire un classico traceroute:
 
SP1# traceroute 50.0.12.12 source 50.0.11.11
Type escape sequence to abort.
Tracing the route to 50.0.12.12
VRF info: (vrf in name/id, vrf out name/id)
  1 20.0.0.11 34 msec 44 msec 37 msec
  2 20.0.0.2 38 msec *  34 msec
 
"Et voilà", il gioco è fatto !!!
Concludendo, per abilitare EIGRP in uno scenario DMVPN fase 1, utilizzare i seguenti accorgimenti:
1) Disabilitare lo split-horizon sulle interfacce "tunnel X" dei router Hub.
2) Abilitare la funzionalità EIGRP Stub sui router Spoke.
Per una soluzione altamente scalabile:
3) Generare sui router Hub una default-route EIGRP verso i router Spoke. In questo caso non è necessario disabilitare lo split-horizon (ma magari fatelo comunque).
 
ROUTING VIA OSPF
Un secondo protocollo supportato dal modello DMVPN fase 1 è l'OSPF. Nella sua implementazione è però necessario fare molta attenzione agli aspetti di scalabilità. Tutti noi conosciamo la vecchia regoletta Cisco di non realizzare mai aree di più di 50 router. Dicamo che oggi questa regoletta può essere notevolmente ampliata ed arrivare anche ad aree di centinaia di router. Ma tenete conto che in una implementazione reale di un modello DMVPN, i router Spoke non sono mai delle "schegge", e anche i router Hub non sono certo i CRS !!! Quindi io farei molta attenzione ad utlizzare OSPF quando i router Spoke superano qualche centinaio.
Nel modello DMVPN fase 1 comunque qualche accorgimento interessante c'è. Innanzitutto, poiché siamo in presenza di OSPF su una rete NBMA, è necessario scegliere la modalità di funzionamento. La più semplice è in questo caso la point-to-multipoint, che è tra l'altro una modalità standard descritta nella RFC 2328 "OSPF Version 2".  Le ragioni per il suo utilizzo sono che in questa modalità, ogni tunnel GRE viene trattato come fosse un collegamento punto-punto, e quindi non è necessario specificare manualmente i router vicini, né vi è bisogno di eleggere DR e BDR.
Un altro aspetto molto interessante, che ha un impatto molto importante sulla scalabilità, è la possibilità offerta dall'IOS Cisco di bloccare l'invio di LSA OSPF su una particolare interfaccia. Attenzione però, questo comporta un disallineamento dei LSDB all'interno dell'area, ma fortunatamente con una topologia Hub-and-Spoke questo non crea alcun problema. Infatti, disabilitando sui router Hub l'invio di LSA sull'interfaccia "tunnel X", si ha che i router Spoke non riceveranno informazioni sui prefissi raggiungibili dagli altri router Spoke. Ma il problema di connettività può essere risolto, come fatto con il protocollo EIGRP, con una default-route sui router Spoke verso i router Hub. Però attenzione a un aspetto. Se si disabilita sui router Hub l'invio dei LSA OSPF, non è possibile far generare ai router Hub una default-route OSPF. Questo perché la generazione avviene attraverso un LSA di tipo 5, che però non viene inviato se si disabilita sui router Hub l'invio dei LSA OSPF. La soluzione, benché un po' antipatica quando si ha che fare con centinaia di Spoke, è configurare delle default-route statiche sui router Spoke
I comandi da eseguire sono quindi i seguenti:
1) Su tutte le interfacce "tunnel X" dei router Hub e Spoke, abilitare la modalità "point-to-multipoint" con il comando "ip ospf network point-to-multipoint".
2) Sulle interfacce "tunnel X" dei soli router Hub, disabilitare l'invia dei LSA OSPF con il comando "ip ospf database-filter all out".
3) Configurare sui router Spoke delle default-route statiche verso gli Hub, eventualmente di tipo floating (ossia, con diversa distanza amministrativa).
Riporto di seguito le configurazioni dei router H1 e SP1 della rete test. Come sempre, le configurazioni di H2 e SP2 sono analoghe e vengono lasciate come esercizio. Per semplicità, anche qui nella configurazione ho omesso il comando per l'autenticazione dei messaggi NHRP e sui router Spoke i comandi dei timer che regolano la registrazione delle associazioni <Indirizzo IP logico ; Indirizzo NBMA>.
 
hostname SP1
!  NOTA: La configurazione delle interfacce "tunnel 1" e "tunnel 11" è identica a quella già illustrata per il protocollo EIGRP, con la sola differenza che è necessario aggiungere il comando "ip ospf network point-to-multipoint".
!
router ospf 100
  router-id 1.1.1.1
  redistribute connected subnets
  network 20.0.0.0 0.0.0.255 area 1
  network 30.0.0.0 0.0.0.255 area 1
!
ip route 0.0.0.0 0.0.0.0 Tunnel1
ip route 0.0.0.0 0.0.0.0 Tunnel11 10
 
Nella configurazione delle (floating) default-route statiche, ho ipotizzato di utilizzare come Hub primario H1, e di utilizzare H2 come Hub di backup. Qualora si volessero utilizzare le due default-route statiche in Load Balancing, è sufficente eliminare la distanza amministrativa nella seconda default-route.
 
hostname H1
!
interface Tunnel11
  ip address 20.0.0.11 255.255.255.0
  ip nhrp map multicast dynamic
  ip nhrp network-id 200
  ip ospf network point-to-multipoint
  ip ospf database-filter all out
  tunnel source FastEthernet0/1
  tunnel mode gre multipoint
!
router ospf 100
  router-id 11.11.11.11
  redistribute connected subnets
  network 20.0.0.0 0.0.0.255 area 1
 
NOTA 1: sia nella configurazione dei router Spoke che in quella dei router Hub, per annunciare le reti direttamente connesse ho utilizzato un comando di redistribuzione, piuttosto che inserire i prefissi nel processo OSPF attraverso il comando "network ...". La ragione è che, come gli esperti di OSPF sanno, è molto più efficiente annunciare i prefissi via redistribuzione, piuttosto che inserirli nel processo OSPF. Anche se il risultato finale è equivalente.
 
NOTA 2: nella configurazione ho utilizzato un'area OSPF standard. A volte, per maggiore scalabilità, potrebbe essere conveniente configurare aree NSSA (non aree Stub, altrimenti non sarebbe possibile la redistribuzione sui router con almeno un'interfaccia nell'area !).
 
Con queste configurazioni, sulla tabella di routing di H1 compaiono i prefissi annunciati (via OSPF) dai router Spoke:
 
H1# show ip route ospf 100 | i O E2
O E2     50.0.11.0/24 [110/20] via 20.0.0.1, 00:18:42, Tunnel11
O E2     50.0.12.0/24 [110/20] via 20.0.0.2, 00:17:10, Tunnel11
 
Infine, anche qui, per verificare che il traffico Spoke-Spoke fluisce effettivamente attraverso il router Hub H1, si può eseguire un classico traceroute:
 
SP1# traceroute 50.0.12.12 source 50.0.11.11
Type escape sequence to abort.
Tracing the route to 50.0.12.12
VRF info: (vrf in name/id, vrf out name/id)
  1 20.0.0.11 42 msec 44 msec 38 msec
  2 20.0.0.2 48 msec 55 msec 42 msec
 
Concludendo, per abilitare OSPF in uno scenario DMVPN fase 1, utilizzare i seguenti accorgimenti:
1) Abilitare sulle interfacce "tunnel X" di tutti i router, la modalità OSPF su reti NBMA "point-to-multipoint".
2) Disabilitare sui soli router Hub la propagazione dei LSA OSPF.
3) Configurare sui router Spoke delle default-route statiche verso i router Hub, eventualmente di tipo floating.  
 
Attenzione che il punto 3), purtroppo necessario se utilizzate il punto 2), richiede configurazioni di default-route statiche su tutti i router Spoke, che potrebbero essere centinaia. A onor del vero è comunque possibile utilizzare il "copia e incolla", con un template di configurazione unico.
 
ROUTING VIA BGP
Infine il caro vecchio BGP. Il BGP ormai viene utilizzato dappertutto, poteva mancare sul modello DMVPN ? Certamente no, e forse è anche l'alternativa migliore.
Qualora si decida di utilizzare il BGP, e nella prossima sezione cercherò di dare qualche motivazione, la prima decisione da affrontare è se utilizzare sessioni iBGP o eBGP. In teoria si possono utilizzare entrambi i tipi. Utilizzare sessioni iBGP è sicuramente molto più semplice nel caso di DMVPN Fase 1, mentre richiede qualche accorgimento aggiuntivo nel caso di DMVPN Fase 2. L'utilizzo di sessioni eBGP richiede l'assegnazione di un diverso numero di AS a ciascun router e questo potrebbe esere un rompicapo quando si ha che fare con centinaia o migliaia di Spoke. Ci sono vari modi di aggirare il problema, il BGP è ricco di funzioni che consentono di effettuare configurazioni scalabili. Poi, molto è legato alla diversa gestione del BGP Next-Hop sulle sessioni iBGP ed eBGP. Quello che voglio fare in questo post che tratta del DMVPN Fase 1, è applicare entrambe le soluzioni e valutare sul campo pregi e difetti.
Per utilizzare sessioni iBGP bisogna scegliere un (unico) numero di AS. Tipicamente si sceglie un numero di AS privato, ma non è obbligatorio. Poi bisogna configurare sessioni iBGP tra router Hub e router Spoke (non sessioni Spoke-Spoke). Per rendere la configurazione scalabile, è possibile utilizzare il trucchetto dei BGP Dynamic Neighbor, introdotto nelle versioni più recenti dell'IOS Cisco (nel JUNOS era presente da molto tempo). Questo fa risparmiare moltissime righe di configurazione e, aspetto più interessante, consente di introdurre nuovi Spoke senza alcuna nuova configurazione sugli Hub. Infine, poiché lo scenario è DMVPN Fase 1, è sufficiente, come già fatto per EIGRP e OSPF, far annunciare ai router Hub una default-route BGP verso i router Spoke.
Con il solito nostro scenario di rete, queste sono le configurazioni da effettuare sui router SP1 e H1:
 
hostname SP1
! La configurazione delle interfacce "tunnel 1" e "tunnel 11" è identica a quella già illustrata per il protocollo EIGRP.
!
router bgp 65101
  redistribute connected route-map ALLOW-DC
  neighbor 20.0.0.11 remote-as 65101
  neighbor 30.0.0.11 remote-as 65101
!
ip prefix-list NET-DC seq 5 permit 50.0.0.0/16 le 32
!
route-map ALLOW-DC permit 10
  match ip address prefix-list NET-DC
 
La configurazione del BGP è abbastanza classica e può essere utilizzata come template di configurazione per tutti i router Spoke. L'unica cosa che va valutata è la replicabilità della prefix-list, ma se uno ha fatto un piano di numerazione serio ...
 
hostname H1
!
interface Tunnel11
  ip address 20.0.0.11 255.255.255.0
  ip nhrp map multicast dynamic
  ip nhrp network-id 200
  tunnel source FastEthernet0/1
  tunnel mode gre multipoint
!
router bgp 65101
  neighbor SPOKE peer-group
  neighbor SPOKE remote-as 65101
  neighbor SPOKE default-originate
  bgp listen limit 200
  bgp listen range 20.0.0.0/24 peer-group SPOKE
 
La configurazione di H1 utilizza i già citati BGP Dynamic Neighbors. Il comando chiave è "bgp listen range 20.0.0.0/24 peer-group SPOKE", che richiede la definizione di un BGP peer-group. Il comando consente di accettare tutte le sessioni BGP aperte da altri BGP peer, che hanno come estremo remoto un indirizzo IP incluso nella subnet IP 20.0.0.0/24. Il comando "bgp listen limit 200" limita a 200 il numero di sessioni BGP accettate da H1. Non è obbligatorio, poiché vi è un limite comunque, dettato dalla "grandezza" della subnet IP. Però in alcune situazioni potrebbe risultare utile. Tutto dipende da quante sessioni BGP è in grado di supportare il router Hub (e per questo è necessario consultare la documentazione tecnica relativa alla piattaforma in uso).
Faccio notare che con l'utilizzo dei BGP Dynamic Neighbors, l'aggiunta di un nuovo Spoke, purché permessa dal limite massimo di sessioni BGP attivabili, non comporta sul router Hub alcuna riga di configurazione aggiuntiva.
Con queste configurazioni, sulla tabella di routing di H1 compaiono i prefissi annunciati (via iBGP) dai router Spoke:
 
H1# show ip route bgp
... < legenda omessa > ...
Gateway of last resort is not set
 
      50.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
B        50.0.11.0/24 [200/0] via 20.0.0.1, 00:11:55
B        50.0.12.0/24 [200/0] via 20.0.0.2, 00:23:10
 
Anche qui, per verificare che il traffico Spoke-Spoke fluisce effettivamente attraverso il router Hub H1, si può eseguire un classico traceroute:
 
SP1# traceroute 50.0.12.12 source 50.0.11.11
Type escape sequence to abort.
Tracing the route to 50.0.12.12
VRF info: (vrf in name/id, vrf out name/id)
  1 20.0.0.11 37 msec 34 msec 26 msec
  2 20.0.0.2 44 msec 41 msec 45 msec
 
Poi, utilizzando le classiche metriche del BGP è possibile implementare sui router Spoke scenari di tipo primario/backup, oppure si potrebbe abilitare il BGP multipath e utilizzare le due default-route disponibili in Load Balancing. Ma tutto questo esula da questo post, e lo lascio come eventuale esercizio.
Se invece di utilizzare sessioni iBGP si utilizzassero sessioni eBGP, la prima scelta da fare è se utilizzare numeri diversi di AS sugli Spoke o utilizzare lo stesso numero. Utilizzare numeri diversi ha due grossi svantaggi: la complessità di configurazione in presenza di un elevato numero di Spoke e l'impossibilità di utilizzare i BGP Dynamic Neighbors sugli Hub, poiché il loro utilizzo richiede che tutti i BGP peer dinamici appartengano allo stesso AS. Per cui mi sento di sconsigliare l'utilizzo di numeri di AS diversi. Secondo me la soluzione migliore, nel caso di sessioni eBGP, è di utilizzare un numero di AS per i router Hub e un diverso numero di AS per tutti gli Spoke. Nel nostro esempio utilizzerò i numeri 65101 per i router Hub e 65201 per i router Spoke. Le configurazioni del BGP su SP1 e H1 diventano così:
 
hostname SP1
!
router bgp 65201
  redistribute connected route-map ALLOW-DC
  neighbor 20.0.0.11 remote-as 65101
  neighbor 30.0.0.11 remote-as 65101
!
ip prefix-list NET-DC seq 5 permit 50.0.0.0/16 le 32
!
route-map ALLOW-DC permit 10
  match ip address prefix-list NET-DC
 
hostname H1
!
router bgp 65101
  neighbor SPOKE peer-group
  neighbor SPOKE remote-as 65201
  neighbor SPOKE default-originate
  bgp listen limit 200
  bgp listen range 20.0.0.0/24 peer-group SPOKE
!
 
Quindi, con gli accorgimenti giusti, nel modello DMVPN Fase 1, utilizzare sessioni iBGP o eBGP, dal punto di vista della configurazione, non fa grandi differenze. Ad essere pignoli, un po' di differenza c'è sulla segnalazione. Mentre nel caso di sessioni iBGP, grazie alla nota regola dello split-horizon, gli Hub non annunciano ai router Spoke i prefissi annunciati dagli Spoke stessi, nel caso di sessioni eBGP, a causa dell'automatismo nella propagazione degli annunci, i prefissi annunciati dai router Spoke agli Hub, vengono annunciati automaticamenti agli altri router Spoke, ma questi ultimi scarteranno gli annunci ricevuti dagli Hub a causa del controllo dell'AS_PATH. A dire il vero questo comportamento (poco efficiente, i router Juniper ad esempio non inviano in questa situazione i messaggi BGP UPDATE !) può essere evitato con un semplice filtro outbound basato sull'AS_PATH. Ma pochi lo fanno ! 
Si noti infine che se si utilizzassero sui router Spoke numeri di AS diversi, al fine di evitare che i prefissi annunciati dai router Spoke vengano automaticamente propagati agli altri router Spoke, e che questi li installino in Tabella di Routing (non necessario se si invia dagli Hub una default-route) è bene configurare sui router Hub un filtro outbound che consenta l'annuncio della sola default-route (oppure, per i più esperti, uno stupendo filtro basato sull'AS_PATH, con Regular Expression ^$). Tra l'altro questo filtro risolverebbe anche il problema di ottimizzazione appena descritto sopra, nel caso di numeri di AS uguali negli Spoke
In conclusione, nel modello DMVPN Fase 1, nel caso si voglia utilizzare come protocollo di routing il BGP, io consiglio l'utilizzo di sessioni iBGP.
 
QUALE PROTOCOLLO UTILIZZARE ?
Ho illustrato nelle sezioni precedenti tre possibili protocolli di routing per l'utilizzo con le DMVPN Fase 1. Quale scegliere in pratica ? In termini di velocità di convergenza, non vi sono grandi differenze. Io personalemente non utilizzerei OSPF poiché poco scalabile per questo scenario e richiede la configurazione di default-route statiche sui router Spoke, a meno di non inondare questi ultimi con un numero elevato (pari al numero di router della DMVPN) di LSA di tipo 1. E poi non mi fido troppo dell'implementazione Cisco di OSPF su reti NBMA. Nei vecchi documenti, Cisco stessa consigliava di utilizzare sub-interfacce Frame Relay punto-punto in luogo di tutte le varie modalità disponibili !
Poi scarterei l'EIGRP perché poco flessibile per l'applicazione delle politiche di routing. E poi EIGRP è un protocollo proprietario (e a me i protocolli proprietari non piacciono !).
In ultima analisi, io consiglio l'utilizzo del BGP, per la sua elevata flessibilità e ricchezza di metriche e la scarsa occupazione di memoria (ricordo che il BGP è stato progettato per lavorare con centinaia di migliaia di prefissi). Di più, consiglio l'utilizzo di sessioni iBGP. Però, per non incorrerre in incubi notturni, è fondamentale l'utilizzo dei BGP Dynamic Neighbors sugli Hub. Altrimenti, anche io che ho un debole per il BGP, mi sentirei di sconsigliarlo. Ma il problema non si pone, a meno che non abbiate, per gli Hub, piattaforme che li supportano, nel qual caso utilizzate EIGRP !!!
Ovviamente, tutto ciò vale in reti con molti Spoke. In piccole reti "tutto fa brodo".

CONCLUSIONI
In questo post ho cercato di illustrare l'utilizzo di tre ben noti protocolli di routing al modello DMVPN, che era l'argomento mancante nel posto precedente "DMVPN Fase 1 - Parte I".
In realtà dovrei scrivere un post dal titolo "DMVPN Fase 1 - Parte III" trattando anche gli aspetti di sicurezza, ossia, come integrare IPSec nelle configurazioni effettuate. Ma questo in futuro, quando terminerò i post su DMVPN Fase 2 e Fase 3. L'integrazione di IPSec è comune e indipendente dalle varie fasi, per cui sarà trattata in post unico (spero !) dedicato. 
Questo post è il seguito del post precedente "DMVPN FASE 1 - PARTE I". Come citato alla fine di quel post, per completare l'implementazione del modello DMVPN è necessario abilitare un protocollo di routing IP. E qui nascono problematiche interessanti come, quale protocollo scegliere, come configurarlo ? Nelle applicazioni pratiche sono tre i protocolli di interesse: EIGRP, OSPF e BGP.
 
NOTA 1: in teoria può essere utilizzato anche il RIP, ma come noto questo vecchio protocollo ha due ordini di problemi: convergenza lenta e diametro delle rete limitato.
 
NOTA 2: tra i classici protocolli IGP, l'IS-IS non è supportato nel modello DMVPN. Secondo la documentazione Cisco, la ragione per cui IS-IS non è applicabile nel modello DMVPN è che i messaggi IS-IS sono trasportati direttamente dal Livello 2 e non da pacchetti IP ! La frase testuale che ho letto in una presentazione al Cisco Live 2013 dal titolo "Advanced Concepts of DMVPN", è la seguente: "IS-IS cannot be used since it doesn’t run over IP".
Questa ragione in teoria non sta in piedi poiché nei tunnel GRE è possibile trasportare di tutto, anche messaggi IS-IS, ma Cisco forse non aveva voglia di implementare un comando del tipo "ip nhrp map iso [dynamic | indirizzo NBMA]" ... . D'altra parte, nei tunnel GRE p2p, i messaggi IS-IS viaggiano tranquillamente, anche nei router Cisco.
 
Ciascuno di questi protocolli va valutato rispetto a caratteristiche importanti come la scalabilità della configurazione (nelle applicazioni pratiche ci si può tranquillamente trovare davanti a reti con centinaia, se non migliaia di router Spoke) e soprattutto la velocità di convergenza. 
In questo post, partendo dalla rete del post precedente, che riporto per completezza, illustrerò come utilizzare i tre protocolli EIGRP, OSPF e BGP, mettendo in evidenza gli aspetti di scalabilità e convergenza di ciascuna soluzione. In tutti i test successivi, utilizzerò una topologia Dual DMVPN. La rete test è la stessa del post precedente, che riporto qui per completezza.

 
ROUTING VIA EIGRP
L'abilitazione di EIGRP sulla rete test richiede un solo accorgimento fondamentale: disabilitare lo split-horizon sulle interfacce "tunnel X" dei router Hub. Questo è un aspetto ben noto nel funzionamento di EIGRP su reti NBMA. La regola dello split-horizon, quando abilitata, impedisce ai router Hub di annunciare i prefissi ricevuti da un router Spoke, agli altri router Spoke. In altre parole, a ciascun router Spoke viene impedita la visibilità delle reti raggiungibili attraverso gli altri router Spoke.
In realtà non è sempre necessario disabilitare lo split-horizon sulle interfacce "tunnel X" dei router Hub. Poiché il modello DMVPN fase 1 non prevede la comunicazione diretta tra router Spoke, una soluzione molto semplice e altamente scalabile potrebbe quella di far generare ai router Hub una default-route EIGRP, rendendo così inutile la presenza sulla Tabella di Routing dei router Spoke, dei prefissi IP raggiungibili attraverso gli altri router Spoke. In questo caso, disabilitare lo split-horizon non comporta alcunché. Comunque, per tranquillità, considerato che nel modello DMVPN fase 2, come si vedrà (e come è intuitivo) è invece obbligatorio disabilitarlo, consiglio comunque, in uno scenario DMVPN, di disabilitare sempre  lo split-horizon.
Un altro accorgimento classico da adottare, in presenza di topologie Hub-and-Spoke con protocollo di routing EIGRP, è abilitare la funzionalità EIGRP Stub sui router Spoke, per impedire che i router Spoke vengano utilizzati come transito per destinazioni raggiungibili attraverso i router Hub, nel caso di fuori servizio di uno dei due Hub.
Riporto di seguito le configurazioni dei router H1 e SP1 della rete Test. Come sempre, le configurazioni di H2 e SP2 sono analoghe e vengono lasciate come esercizio. Per semplicità, nella configurazione ho omesso il comando per l'autenticazione dei messaggi NHRP e sui router Spoke i comandi dei timer che regolano la registrazione delle associazioni <Indirizzo IP logico ; Indirizzo NBMA>.
 
hostname H1
!
interface Tunnel11
  ip address 20.0.0.11 255.255.255.0
  no ip split-horizon eigrp 200
  ip nhrp map multicast dynamic
  ip nhrp network-id 200
  ip summary-address eigrp 200 0.0.0.0 0.0.0.0
  tunnel source FastEthernet0/1
  tunnel mode gre multipoint
!
router eigrp 200
  no auto-summary
  network 20.0.0.0
  network 50.0.0.0
!
 
Il comando "ip summary-address eigrp 200 0.0.0.0 0.0.0.0" consente di generare una default-route EIGRP, che viene inviata su tutte le adiacenze EIGRP stabilite attraverso l'interfaccia "tunnel 11". Si noti inoltre che, anche se non necessario a causa della generazione della default-route EIGRP, ho disabilito comunque sull'interfaccia "tunnel 11", lo split-horizon.
 
hostname SP1
!
interface Tunnel1
  ip address 20.0.0.1 255.255.255.0
  ip nhrp map multicast 172.16.1.1
  ip nhrp map 20.0.0.11 172.16.1.1
  ip nhrp network-id 200
  ip nhrp nhs 20.0.0.11
  tunnel source FastEthernet2/0
  tunnel destination 172.16.1.1
!
interface Tunnel11
  ip address 30.0.0.1 255.255.255.0
  ip nhrp map multicast 172.16.1.2
  ip nhrp map 30.0.0.11 172.16.1.2
  ip nhrp network-id 300
  ip nhrp nhs 30.0.0.11
  tunnel source FastEthernet2/0
  tunnel destination 172.16.1.2
!
router eigrp 200
  no auto-summary
  network 20.0.0.0
  network 30.0.0.0
  network 50.0.0.0
  eigrp stub 
 
Si noti che le interfacce "tunnel X" configurate sui router Spoke non hanno alcun comando relativo a EIGRP. Si noti inoltre il comando "eigrp stub" all'interno del processo EIGRP, che abilita sul router Spoke SP1 la funzionalità EIGRP Stub. Ricordo che il comando "eigrp stub" consente di default l'annuncio dei prefissi direttamente connessi e delle summary route
Il risultato della configurazione è che il router Spoke SP1 vede due Next-Hop per la default-route annunciata da EIGRP, i tunnel 1 e 11. Ciò significa che i due tunnel 1 e 11 sono utilizzati in Load Balancing
 
SP1# show ip route eigrp
. . . < legenda omessa > . . .
Gateway of last resort is 30.0.0.11 to network 0.0.0.0
 
D*    0.0.0.0/0 [90/26882560] via 30.0.0.11, 00:00:58, Tunnel11
                         [90/26882560] via 20.0.0.11, 00:00:58, Tunnel1
 
Qualora si volesse utilizzare un tunnel come primario (ad esempio il tunnel 1) e l'altro come backup, è sufficiente aumentare il costo complessivo con cui SP1 vede la default-route attraverso il tunnel di backup (ad esempio il tunnel 11), oppure, in modo equivalente, diminuire il costo complessivo con cui SP1 vede la default-route attraverso il tunnel primario.
Per fare questo, ricordo che è buona regola agire sul parametro delay dell'interfaccia "tunnel X". Si potrebbe anche agire sul parametro bandwidth, ma questo è utilizzato anche da altri protocolli e funzioni (es. OSPF per il calcolo delle metriche, meccanismi di QoS, ecc.), per cui è bene non variarlo.
Il parametro delay associato all'interfaccia "tunnel X" si può visualizzare con il classico comando "show interface tunnel X". Ad esempio, per l'interfaccia "tunnel 11" si ottiene:
 
SP1#sh int tunnel 11 | i DLY
  MTU 17916 bytes, BW 100 Kbit/sec, DLY 50000 usec,
 
da cui si evince che il parametro delay è pari a 50.000 microsec. Per aumentare questo valore, ad esempio per raddoppiarlo, si utilizza la seguente configurazione (NOTA: nella configurazione il nuovo valore va espresso in decine di microsec):
 
interface tunnel 11
  delay 10000
 
Una identica configurazione andrebbe fatta sugli altri router Spoke. Il risultato che si ottiene è il seguente:
 
SP1# show ip route eigrp
. . . < legenda omessa > . . .
Gateway of last resort is 20.0.0.11 to network 0.0.0.0
 
D*    0.0.0.0/0 [90/26882560] via 20.0.0.11, 00:15:04, Tunnel1
 
Infine, per verificare che il traffico Spoke-Spoke fluisce effettivamente attraverso il router Hub H1, si può eseguire un classico traceroute:
 
SP1# traceroute 50.0.12.12 source 50.0.11.11
Type escape sequence to abort.
Tracing the route to 50.0.12.12
VRF info: (vrf in name/id, vrf out name/id)
  1 20.0.0.11 34 msec 44 msec 37 msec
  2 20.0.0.2 38 msec *  34 msec
 
"Et voilà", il gioco è fatto !!!
Concludendo, per abilitare EIGRP in uno scenario DMVPN fase 1, utilizzare i seguenti accorgimenti:
1) Disabilitare lo split-horizon sulle interfacce "tunnel X" dei router Hub.
2) Abilitare la funzionalità EIGRP Stub sui router Spoke.
Per una soluzione altamente scalabile:
3) Generare sui router Hub una default-route EIGRP verso i router Spoke. In questo caso non è necessario disabilitare lo split-horizon (ma magari fatelo comunque).
 
ROUTING VIA OSPF
Un secondo protocollo supportato dal modello DMVPN fase 1 è l'OSPF. Nella sua implementazione è però necessario fare molta attenzione agli aspetti di scalabilità. Tutti noi conosciamo la vecchia regoletta Cisco di non realizzare mai aree di più di 50 router. Dicamo che oggi questa regoletta può essere notevolmente ampliata ed arrivare anche ad aree di centinaia di router. Ma tenete conto che in una implementazione reale di un modello DMVPN, i router Spoke non sono mai delle "schegge", e anche i router Hub non sono certo i CRS !!! Quindi io farei molta attenzione ad utlizzare OSPF quando i router Spoke superano qualche centinaio.
Nel modello DMVPN fase 1 comunque qualche accorgimento interessante c'è. Innanzitutto, poiché siamo in presenza di OSPF su una rete NBMA, è necessario scegliere la modalità di funzionamento. La più semplice è in questo caso la point-to-multipoint, che è tra l'altro una modalità standard descritta nella RFC 2328 "OSPF Version 2".  Le ragioni per il suo utilizzo sono che in questa modalità, ogni tunnel GRE viene trattato come fosse un collegamento punto-punto, e quindi non è necessario specificare manualmente i router vicini, né vi è bisogno di eleggere DR e BDR.
Un altro aspetto molto interessante, che ha un impatto molto importante sulla scalabilità, è la possibilità offerta dall'IOS Cisco di bloccare l'invio di LSA OSPF su una particolare interfaccia. Attenzione però, questo comporta un disallineamento dei LSDB all'interno dell'area, ma fortunatamente con una topologia Hub-and-Spoke questo non crea alcun problema. Infatti, disabilitando sui router Hub l'invio di LSA sull'interfaccia "tunnel X", si ha che i router Spoke non riceveranno informazioni sui prefissi raggiungibili dagli altri router Spoke. Ma il problema di connettività può essere risolto, come fatto con il protocollo EIGRP, con una default-route sui router Spoke verso i router Hub. Però attenzione a un aspetto. Se si disabilita sui router Hub l'invio dei LSA OSPF, non è possibile far generare ai router Hub una default-route OSPF. Questo perché la generazione avviene attraverso un LSA di tipo 5, che però non viene inviato se si disabilita sui router Hub l'invio dei LSA OSPF. La soluzione, benché un po' antipatica quando si ha che fare con centinaia di Spoke, è configurare delle default-route statiche sui router Spoke
I comandi da eseguire sono quindi i seguenti:
1) Su tutte le interfacce "tunnel X" dei router Hub e Spoke, abilitare la modalità "point-to-multipoint" con il comando "ip ospf network point-to-multipoint".
2) Sulle interfacce "tunnel X" dei soli router Hub, disabilitare l'invia dei LSA OSPF con il comando "ip ospf database-filter all out".
3) Configurare sui router Spoke delle default-route statiche verso gli Hub, eventualmente di tipo floating (ossia, con diversa distanza amministrativa).
Riporto di seguito le configurazioni dei router H1 e SP1 della rete test. Come sempre, le configurazioni di H2 e SP2 sono analoghe e vengono lasciate come esercizio. Per semplicità, anche qui nella configurazione ho omesso il comando per l'autenticazione dei messaggi NHRP e sui router Spoke i comandi dei timer che regolano la registrazione delle associazioni <Indirizzo IP logico ; Indirizzo NBMA>.
 
hostname SP1
!  NOTA: La configurazione delle interfacce "tunnel 1" e "tunnel 11" è identica a quella già illustrata per il protocollo EIGRP, con la sola differenza che è necessario aggiungere il comando "ip ospf network point-to-multipoint".
!
router ospf 100
  router-id 1.1.1.1
  redistribute connected subnets
  network 20.0.0.0 0.0.0.255 area 1
  network 30.0.0.0 0.0.0.255 area 1
!
ip route 0.0.0.0 0.0.0.0 Tunnel1
ip route 0.0.0.0 0.0.0.0 Tunnel11 10
 
Nella configurazione delle (floating) default-route statiche, ho ipotizzato di utilizzare come Hub primario H1, e di utilizzare H2 come Hub di backup. Qualora si volessero utilizzare le due default-route statiche in Load Balancing, è sufficente eliminare la distanza amministrativa nella seconda default-route.
 
hostname H1
!
interface Tunnel11
  ip address 20.0.0.11 255.255.255.0
  ip nhrp map multicast dynamic
  ip nhrp network-id 200
  ip ospf network point-to-multipoint
  ip ospf database-filter all out
  tunnel source FastEthernet0/1
  tunnel mode gre multipoint
!
router ospf 100
  router-id 11.11.11.11
  redistribute connected subnets
  network 20.0.0.0 0.0.0.255 area 1
 
NOTA 1: sia nella configurazione dei router Spoke che in quella dei router Hub, per annunciare le reti direttamente connesse ho utilizzato un comando di redistribuzione, piuttosto che inserire i prefissi nel processo OSPF attraverso il comando "network ...". La ragione è che, come gli esperti di OSPF sanno, è molto più efficiente annunciare i prefissi via redistribuzione, piuttosto che inserirli nel processo OSPF. Anche se il risultato finale è equivalente.
 
NOTA 2: nella configurazione ho utilizzato un'area OSPF standard. A volte, per maggiore scalabilità, potrebbe essere conveniente configurare aree NSSA (non aree Stub, altrimenti non sarebbe possibile la redistribuzione sui router con almeno un'interfaccia nell'area !).
 
Con queste configurazioni, sulla tabella di routing di H1 compaiono i prefissi annunciati (via OSPF) dai router Spoke:
 
H1# show ip route ospf 100 | i O E2
O E2     50.0.11.0/24 [110/20] via 20.0.0.1, 00:18:42, Tunnel11
O E2     50.0.12.0/24 [110/20] via 20.0.0.2, 00:17:10, Tunnel11
 
Infine, anche qui, per verificare che il traffico Spoke-Spoke fluisce effettivamente attraverso il router Hub H1, si può eseguire un classico traceroute:
 
SP1# traceroute 50.0.12.12 source 50.0.11.11
Type escape sequence to abort.
Tracing the route to 50.0.12.12
VRF info: (vrf in name/id, vrf out name/id)
  1 20.0.0.11 42 msec 44 msec 38 msec
  2 20.0.0.2 48 msec 55 msec 42 msec
 
Concludendo, per abilitare OSPF in uno scenario DMVPN fase 1, utilizzare i seguenti accorgimenti:
1) Abilitare sulle interfacce "tunnel X" di tutti i router, la modalità OSPF su reti NBMA "point-to-multipoint".
2) Disabilitare sui soli router Hub la propagazione dei LSA OSPF.
3) Configurare sui router Spoke delle default-route statiche verso i router Hub, eventualmente di tipo floating.  
 
Attenzione che il punto 3), purtroppo necessario se utilizzate il punto 2), richiede configurazioni di default-route statiche su tutti i router Spoke, che potrebbero essere centinaia. A onor del vero è comunque possibile utilizzare il "copia e incolla", con un template di configurazione unico.
 
ROUTING VIA BGP
Infine il caro vecchio BGP. Il BGP ormai viene utilizzato dappertutto, poteva mancare sul modello DMVPN ? Certamente no, e forse è anche l'alternativa migliore.
Qualora si decida di utilizzare il BGP, e nella prossima sezione cercherò di dare qualche motivazione, la prima decisione da affrontare è se utilizzare sessioni iBGP o eBGP. In teoria si possono utilizzare entrambi i tipi. Utilizzare sessioni iBGP è sicuramente molto più semplice nel caso di DMVPN Fase 1, mentre richiede qualche accorgimento aggiuntivo nel caso di DMVPN Fase 2. L'utilizzo di sessioni eBGP richiede l'assegnazione di un diverso numero di AS a ciascun router e questo potrebbe esere un rompicapo quando si ha che fare con centinaia o migliaia di Spoke. Ci sono vari modi di aggirare il problema, il BGP è ricco di funzioni che consentono di effettuare configurazioni scalabili. Poi, molto è legato alla diversa gestione del BGP Next-Hop sulle sessioni iBGP ed eBGP. Quello che voglio fare in questo post che tratta del DMVPN Fase 1, è applicare entrambe le soluzioni e valutare sul campo pregi e difetti.
Per utilizzare sessioni iBGP bisogna scegliere un (unico) numero di AS. Tipicamente si sceglie un numero di AS privato, ma non è obbligatorio. Poi bisogna configurare sessioni iBGP tra router Hub e router Spoke (non sessioni Spoke-Spoke). Per rendere la configurazione scalabile, è possibile utilizzare il trucchetto dei BGP Dynamic Neighbor, introdotto nelle versioni più recenti dell'IOS Cisco (nel JUNOS era presente da molto tempo). Questo fa risparmiare moltissime righe di configurazione e, aspetto più interessante, consente di introdurre nuovi Spoke senza alcuna nuova configurazione sugli Hub. Infine, poiché lo scenario è DMVPN Fase 1, è sufficiente, come già fatto per EIGRP e OSPF, far annunciare ai router Hub una default-route BGP verso i router Spoke.
Con il solito nostro scenario di rete, queste sono le configurazioni da effettuare sui router SP1 e H1:
 
hostname SP1
! La configurazione delle interfacce "tunnel 1" e "tunnel 11" è identica a quella già illustrata per il protocollo EIGRP.
!
router bgp 65101
  redistribute connected route-map ALLOW-DC
  neighbor 20.0.0.11 remote-as 65101
  neighbor 30.0.0.11 remote-as 65101
!
ip prefix-list NET-DC seq 5 permit 50.0.0.0/16 le 32
!
route-map ALLOW-DC permit 10
  match ip address prefix-list NET-DC
 
La configurazione del BGP è abbastanza classica e può essere utilizzata come template di configurazione per tutti i router Spoke. L'unica cosa che va valutata è la replicabilità della prefix-list, ma se uno ha fatto un piano di numerazione serio ...
 
hostname H1
!
interface Tunnel11
  ip address 20.0.0.11 255.255.255.0
  ip nhrp map multicast dynamic
  ip nhrp network-id 200
  tunnel source FastEthernet0/1
  tunnel mode gre multipoint
!
router bgp 65101
  neighbor SPOKE peer-group
  neighbor SPOKE remote-as 65101
  neighbor SPOKE default-originate
  bgp listen limit 200
  bgp listen range 20.0.0.0/24 peer-group SPOKE
 
La configurazione di H1 utilizza i già citati BGP Dynamic Neighbors. Il comando chiave è "bgp listen range 20.0.0.0/24 peer-group SPOKE", che richiede la definizione di un BGP peer-group. Il comando consente di accettare tutte le sessioni BGP aperte da altri BGP peer, che hanno come estremo remoto un indirizzo IP incluso nella subnet IP 20.0.0.0/24. Il comando "bgp listen limit 200" limita a 200 il numero di sessioni BGP accettate da H1. Non è obbligatorio, poiché vi è un limite comunque, dettato dalla "grandezza" della subnet IP. Però in alcune situazioni potrebbe risultare utile. Tutto dipende da quante sessioni BGP è in grado di supportare il router Hub (e per questo è necessario consultare la documentazione tecnica relativa alla piattaforma in uso).
Faccio notare che con l'utilizzo dei BGP Dynamic Neighbors, l'aggiunta di un nuovo Spoke, purché permessa dal limite massimo di sessioni BGP attivabili, non comporta sul router Hub alcuna riga di configurazione aggiuntiva.
Con queste configurazioni, sulla tabella di routing di H1 compaiono i prefissi annunciati (via iBGP) dai router Spoke:
 
H1# show ip route bgp
... < legenda omessa > ...
Gateway of last resort is not set
 
      50.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
B        50.0.11.0/24 [200/0] via 20.0.0.1, 00:11:55
B        50.0.12.0/24 [200/0] via 20.0.0.2, 00:23:10
 
Anche qui, per verificare che il traffico Spoke-Spoke fluisce effettivamente attraverso il router Hub H1, si può eseguire un classico traceroute:
 
SP1# traceroute 50.0.12.12 source 50.0.11.11
Type escape sequence to abort.
Tracing the route to 50.0.12.12
VRF info: (vrf in name/id, vrf out name/id)
  1 20.0.0.11 37 msec 34 msec 26 msec
  2 20.0.0.2 44 msec 41 msec 45 msec
 
Poi, utilizzando le classiche metriche del BGP è possibile implementare sui router Spoke scenari di tipo primario/backup, oppure si potrebbe abilitare il BGP multipath e utilizzare le due default-route disponibili in Load Balancing. Ma tutto questo esula da questo post, e lo lascio come eventuale esercizio.
Se invece di utilizzare sessioni iBGP si utilizzassero sessioni eBGP, la prima scelta da fare è se utilizzare numeri diversi di AS sugli Spoke o utilizzare lo stesso numero. Utilizzare numeri diversi ha due grossi svantaggi: la complessità di configurazione in presenza di un elevato numero di Spoke e l'impossibilità di utilizzare i BGP Dynamic Neighbors sugli Hub, poiché il loro utilizzo richiede che tutti i BGP peer dinamici appartengano allo stesso AS. Per cui mi sento di sconsigliare l'utilizzo di numeri di AS diversi. Secondo me la soluzione migliore, nel caso di sessioni eBGP, è di utilizzare un numero di AS per i router Hub e un diverso numero di AS per tutti gli Spoke. Nel nostro esempio utilizzerò i numeri 65101 per i router Hub e 65201 per i router Spoke. Le configurazioni del BGP su SP1 e H1 diventano così:
 
hostname SP1
!
router bgp 65201
  redistribute connected route-map ALLOW-DC
  neighbor 20.0.0.11 remote-as 65101
  neighbor 30.0.0.11 remote-as 65101
!
ip prefix-list NET-DC seq 5 permit 50.0.0.0/16 le 32
!
route-map ALLOW-DC permit 10
  match ip address prefix-list NET-DC
 
hostname H1
!
router bgp 65101
  neighbor SPOKE peer-group
  neighbor SPOKE remote-as 65201
  neighbor SPOKE default-originate
  bgp listen limit 200
  bgp listen range 20.0.0.0/24 peer-group SPOKE
!
 
Quindi, con gli accorgimenti giusti, nel modello DMVPN Fase 1, utilizzare sessioni iBGP o eBGP, dal punto di vista della configurazione, non fa grandi differenze. Ad essere pignoli, un po' di differenza c'è sulla segnalazione. Mentre nel caso di sessioni iBGP, grazie alla nota regola dello split-horizon, gli Hub non annunciano ai router Spoke i prefissi annunciati dagli Spoke stessi, nel caso di sessioni eBGP, a causa dell'automatismo nella propagazione degli annunci, i prefissi annunciati dai router Spoke agli Hub, vengono annunciati automaticamenti agli altri router Spoke, ma questi ultimi scarteranno gli annunci ricevuti dagli Hub a causa del controllo dell'AS_PATH. A dire il vero questo comportamento (poco efficiente, i router Juniper ad esempio non inviano in questa situazione i messaggi BGP UPDATE !) può essere evitato con un semplice filtro outbound basato sull'AS_PATH. Ma pochi lo fanno ! 
Si noti infine che se si utilizzassero sui router Spoke numeri di AS diversi, al fine di evitare che i prefissi annunciati dai router Spoke vengano automaticamente propagati agli altri router Spoke, e che questi li installino in Tabella di Routing (non necessario se si invia dagli Hub una default-route) è bene configurare sui router Hub un filtro outbound che consenta l'annuncio della sola default-route (oppure, per i più esperti, uno stupendo filtro basato sull'AS_PATH, con Regular Expression ^$). Tra l'altro questo filtro risolverebbe anche il problema di ottimizzazione appena descritto sopra, nel caso di numeri di AS uguali negli Spoke
In conclusione, nel modello DMVPN Fase 1, nel caso si voglia utilizzare come protocollo di routing il BGP, io consiglio l'utilizzo di sessioni iBGP.
 
QUALE PROTOCOLLO UTILIZZARE ?
Ho illustrato nelle sezioni precedenti tre possibili protocolli di routing per l'utilizzo con le DMVPN Fase 1. Quale scegliere in pratica ? In termini di velocità di convergenza, non vi sono grandi differenze. Io personalemente non utilizzerei OSPF poiché poco scalabile per questo scenario e richiede la configurazione di default-route statiche sui router Spoke, a meno di non inondare questi ultimi con un numero elevato (pari al numero di router della DMVPN) di LSA di tipo 1. E poi non mi fido troppo dell'implementazione Cisco di OSPF su reti NBMA. Nei vecchi documenti, Cisco stessa consigliava di utilizzare sub-interfacce Frame Relay punto-punto in luogo di tutte le varie modalità disponibili !
Poi scarterei l'EIGRP perché poco flessibile per l'applicazione delle politiche di routing. E poi EIGRP è un protocollo proprietario (e a me i protocolli proprietari non piacciono !).
In ultima analisi, io consiglio l'utilizzo del BGP, per la sua elevata flessibilità e ricchezza di metriche e la scarsa occupazione di memoria (ricordo che il BGP è stato progettato per lavorare con centinaia di migliaia di prefissi). Di più, consiglio l'utilizzo di sessioni iBGP. Però, per non incorrerre in incubi notturni, è fondamentale l'utilizzo dei BGP Dynamic Neighbors sugli Hub. Altrimenti, anche io che ho un debole per il BGP, mi sentirei di sconsigliarlo. Ma il problema non si pone, a meno che non abbiate, per gli Hub, piattaforme che li supportano, nel qual caso utilizzate EIGRP !!!
Ovviamente, tutto ciò vale in reti con molti Spoke. In piccole reti "tutto fa brodo".

CONCLUSIONI
In questo post ho cercato di illustrare l'utilizzo di tre ben noti protocolli di routing al modello DMVPN, che era l'argomento mancante nel posto precedente "DMVPN Fase 1 - Parte I".
In realtà dovrei scrivere un post dal titolo "DMVPN Fase 1 - Parte III" trattando anche gli aspetti di sicurezza, ossia, come integrare IPSec nelle configurazioni effettuate. Ma questo in futuro, quando terminerò i post su DMVPN Fase 2 e Fase 3. L'integrazione di IPSec è comune e indipendente dalle varie fasi, per cui sarà trattata in post unico (spero !) dedicato. 
Lunedì, 02 Marzo 2015 10:57

LA FUNZIONALITA' BGP DIVERSE PATH

In un post precedente, dedicato alla funzionalità BGP Add-Path, ho spiegato come, con una variazione alla struttura dei messaggi BGP UPDATE, sia possibile per un BGP speaker annunciare più percorsi dello stesso prefisso IP, non solo il best-path. La modifica dei messaggi BGP UPDATE, ricordo, riguarda la struttura del campo NLRI (o MP_REACH_NLRI nel caso di MultiProtocol-BGP), al quale è stato aggiunto un elemento di 4 byte, il Path ID.
 
Questa settimana il capitolo 6 del libro su IS-IS, che tratta un altro argomento chiave: la struttura dei Link State Packet e dei Link State Database.
Nel capitolo vengono illustrati in dettaglio la creazione, la struttura e la diffusione dei LSP e il processo di sincronizzazione dei LSDB. 
Venerdì, 06 Febbraio 2015 09:35

LA FUNZIONALITA' BGP ADD-PATH

Alla fine del Post dedicato alla funzionalità BGP Best External ho descritto un esempio, in uno scenario L3VPN in presenza di Route Reflector, dove con un semplice truchetto è possibile fare in modo di avere in una VRF più annunci dello stesso prefisso IP, anche in presenza di una politica di routing primario/backup.
Piccola premessa: scrivo questo Post con una settimana di ritardo poiché sono stato oggetto della poco cordiale visita del virus HxNy (con x e y ignoti), che mi ha steso a letto per 5 gg. con la febbre alta. L'avevo detto nel primo Post, la vecchiaia incombe !!!
Uno dei tanti miti che circondano IPv6 è che "IPv6 elimina completamente il bisogno del NAT". In teoria è vero, poiché IPv6 ha una disponibilità virtualmente infinita di indirizzi IP, e quindi non vi è alcuna ragione di economizzare sul loro utilizzo. Ricordo che il NAT in ambiente IPv4 (anche noto come NAT44) è nato proprio per ridurre sensibilmente l'utilizzo di indirizzi IPv4 pubblici. Senza l'introduzione del NAT44, l'Internet così come la conosciamo oggi non sarebbe stata possibile, a causa della scarsità degli indirizzi IPv4 pubblici.
Questa settimana il capitolo 5 del libro su IS-IS, che tratta un argomento chiave: la formazione delle adiacenze e i tipi (due).
Mercoledì, 07 Gennaio 2015 16:39

LA FUNZIONALITA' "BGP BEST EXTERNAL"

Abbiamo visto in un precedente Post, che la funzionalità BGP PIC consente di velocizzare la convergenza del BGP tramite l'installazione nella FIB di un percorso di backup. Affinché questo accada è necessaria, ovviamente, l'esistenza di un percorso BGP di backup. In molti casi questo avviene di default, ma in altrettanti casi importanti nelle applicazioni pratiche, ciò non si verifica.
 
SCENARIO DI RIFERIMENTO
Vediamo ad esempio cosa accade di default nel classico caso di un AS single-homed, con doppio collegamento a due router di un altro AS, di cui uno viene utilizzato come primario e l'altro come backup. Per contestualizzare meglio lo scenario, farò riferimento a un servizio L3VPN BGP/MPLS, ma ciò che illustrerò è valido anche in un contesto di semplice accesso a Internet fornito da un ISP a un Cliente.
Lo scenario complessivo è riportato nella figura seguente.
 
 
Il router CE-12 ha un doppio collegamento con i router PE-1 e PE-2. Come protocollo di routing PE-CE, come sovente avviene nelle applicazioni pratiche, viene utilizzato il BGP. La politica di routing desiderata è che il collegamento CE-12 <--> PE-1 sia utilizzato come primario (indicato nella figura con la lettera P), e l'altro come backup (indicato con la lettera B).
La realizzazione di questa politica utilizza strumenti classici del BGP. Per quanto riguarda il traffico outbound (da sito 12 della VPN-A verso la rete dell'ISP), è possibile utilizzare l'attributo standard Local Preference (NOTA: in ambiente Cisco, in uno scenario come quello della figura, sarebbe possibile anche utilizzare il parametro proprietario weight, ma io mi sento di sconsigliarlo vivamente primo perché non è standard e poi perché non essendo propagato tramite gli annunci iBGP, ha applicazioni limitate al solo scenario di un CE con due o più collegamenti verso uno o più PE). Per il traffico inbound invece vi sono varie alternative tra cui l'utilizzo lato CE del MED o dell'AS_PATH Prepending, o lato PE del Local Preference. Quest'ultima soluzione viene spesso utilizzata dagli ISP, in modo secondo me molto elegante, congiuntamente all'utilizzo dell'attributo BGP Community lato CE. L'idea è molto  semplice: partendo dalla ovvia osservazione che il punto di ingresso in un AS può essere determinato attraverso una opportuna scelta del punto di uscita di un altro AS, previo accordo tra AS è possibile, tramite un annuncio eBGP, comunicare ad un altro AS di assegnare un appropriato valore di Local Preference (LP) all’annuncio. Così facendo, si dà la possibilità ad un AS di scegliersi il punto di ingresso, chiedendo all’altro AS di far uscire il traffico dal proprio AS in un punto opportuno. Lo strumento per comunicare ad un AS l’opportuna assegnazione del LP, è l’attributo BGP Community. Questo elegante metodo è stato illustrato nella RFC 1998 An Application of the BGP Community Attribute in Multi-home Routing, e rappresenta una delle applicazioni più interessanti dell’attributo BGP Community.
Vediamo ora cosa accade in pratica nello scenario descritto sopra. Supponiamo che a fronte di un determinato valore dell’attributo BGP Community ricevuto, agli annunci della "NET X" ricevuti da CE-12 il router PE-1 assegni LP=200 e il router PE-2 LP=150 (NOTA: in realtà si potrebbe semplificare la procedura assegnando un solo valore di LP e sfruttando il valore di default LP=100 che quasi tutti i costruttori utilizzano, ma per maggiore chiarezza utilizzerò assegnazioni "personalizzate" in entrambi i PE).
Supporrò inoltre che venga stabilita prima la sessione eBGP tra CE-12 e PE-1 e poi quella tra CE-12 e PE-2. Il risultato finale sarebbe comunque identico se si ipotizzasse il contrario.
Gli annunci eBGP, secondo le regole dell'attributo LP, si propagano all’interno dell’AS dell'ISP attraverso le sessioni MP-iBGP, lasciando inalterati i valori di LP (NOTA: in realtà, come noto, in uno scenario L3VPN vengono propagati annunci del prefisso VPN-IPv4 RD:<NET X>, dove RD è il valore di Route Distinguisher, impostato via configurazione manuale). In particolare, l'annuncio ricevuto da PE-1, al quale viene assegnato il valore di LP=200, verrà propagato a PE-2 e PE-3 con LP=200. Entrambi questi router sceglieranno come best-path BGP l'unico percorso annunciato.
Quando, dopo che la sessione eBGP tra CE-12 e PE-2 raggiunge lo stato Established, PE-2 riceve l'annuncio eBGP della "NET X" da CE-12, avrà a disposizione due annunci e quindi esegue il processo di selezione BGP. Poiché all'annuncio eBGP è assegnato un valore LP=150 mentre l'annuncio MP-iBGP ricevuto da PE-1 ha LP=200, viene eletto best-path il percorso che ha BGP Next-Hop PE-1. Per la regola dello split horizon BGP, questo best-path non viene annunciato ai router PE-1 e PE-3, i quali quindi si troveranno internamente un solo annuncio MP-iBGP per la "NET X".
Cosa accade in caso di fuori servizio del collegamento primario tra CE-12 e PE-1 ? Bene, la convergenza verso il collegamento di backup avviene per PE-1 e PE-3 interamente sul piano di controllo, mentre per PE-2 può avvenire anche sul piano dati abilitando la funzionalità PIC. La sequenza degli eventi è classica ed è già stata vista in precedenti Post, comunque "repetita iuvant (sed continuata secant)". Il router PE-1, appena rilevato il fuori servizio del collegamento primario, grazie alla funzionalità BGP fast external fall-over (o al BFD, se applicato), chiude immediatamente la sessione eBGP con CE-12 e invia un messaggio BGP UPDATE a PE-2 e PE-3 per ritirare la NET X, non più raggiungibile (vedi figura seguente). 
 
 
Il messaggio raggiunge PE-2, il quale avendo in memoria un secondo annuncio (l'annuncio eBGP ricevuto da CE-12), converge immediatamente sul percorso eBGP (NOTA: la convergenza avviene sul piano dati nel caso su PE-2 sia abilitata la funzionalità BGP PIC, sul piano di controllo se non abilitata). In ogni caso, PIC o non PIC, PE-2 elegge il nuovo BGP best-path e lo annuncia a PE-1 e PE-3. A questo punto, sia PE-1 che PE-3 avranno il nuovo percorso disponibile e il traffico dall'AS dell'ISP verso il sito 12 della VPN-A utilizzerà il collegamento di backup.
 
 
Tutto è bene quel che finisce bene quindi. In realtà, il film è finito bene, ... ma ci ha messo un sacco di tempo ! La musica sarebbe stata diversa se PE-1 e PE-3 avessero avuto a disposizione il percorso di backup. PIC o non PIC, la convergenza in ogni caso sarebbe stata più veloce. Con il BGP PIC abilitato, ancora più veloce.
 
LA FUNZIONALITA' BGP BEST EXTERNAL
Come è possibile fare in modo che PE-1 e PE-3 abbiano a disposizione anche il percorso di backup ? Bene, sarebbe sufficiente variare un po' il comportamento di default del BGP nel seguente modo: consentire al router PE-2 di annunciare comunque il percorso eBGP, anche se questo non è best-path. Così facendo, sia PE-1 che PE-3 si troverebbero in memoria oltre al best-path scelto da PE-1, anche un secondo percorso, che è quello eBGP propagato da PE-2. Questa variazione nel comportamento di default del BGP viene detta funzionalità BGP Best External e comunque riguarda gli annunci eBGP non best-path. Per questa ragione non è applicabile in uno scenario in cui sono presenti Route Reflector. In presenza di Route Reflector è necessario utilizzare altre tecniche (Add-Path, Diverse Path), che tratterò in Post successivi.
E' curioso notare che nella specifica originale del BGPv4 (RFC 1771) questo comportamento era già previsto, ma non è mai stato implementato dai costruttori, che invece, per evitare possibili routing e forwarding loop e un consumo eccessivo di memoria a causa del maggior numero di annunci, annunciano di default il solo best-path. Nel nostro scenario l'applicazione della regola originale, dal punto di vista dei loop è comunque innocua e il consumo di memoria trascurabile.
 
IMPLEMENTAZIONI CISCO E JUNIPER
Nei ruoter Cisco, la funzionalità BGP Best External si attiva nell'IOS/IOS XE, con la seguente configurazione:
 
router bgp numero-AS
...
address-family {ipv4 [unicast | vrf nome-VRF] | vpnv4}
 bgp advertise-best-external
 
mentre nell'IOS-XR con la configurazione:
 
router bgp numero-AS
...
address-family ...
  advertise best-external
 
con il comando che può essere eseguito praticamente per tutte le address-family. Nella sua versione più completa, il comando è disponibile nell'IOS a partire dalle versioni 12.2(33)SRE, 15.2(3)T, 15.2(4)S, 15.1(1)SY, nell'IOS XE a partire dalla versione 3.2S e nell'IOS-XR a partire dalla versione 4.0.0.
Nei router Juniper la configurazione da eseguire è la seguente:
 
[edit protocols bgp group nome-gruppo]
  advertise-external {conditional}
 
dove l'opzione conditional consente l'annuncio del secondo percorso se e solo se il processo di selezione, nella determinazione del best-path, arriva al punto in cui si confronta l'attributo MED. Come conseguenza con l'utilizzo dell'opzione conditional si ha che un annuncio esterno non best-path che ha un AS_PATH più lungo del best-path, non viene propagato.
Nel JUNOS la funzionalità BGP Best External è disponibile a partire dalla versione 9.3.
 
ESEMPIO
Questa volta, per evitare che i miei amici di Juniper mi dicano che nei miei Post sono troppo Cisco-oriented, illustrerò un esempio in ambiente Juniper. Lo scenario di rete e il relativo piano di numerazione è riportato nella figura seguente.

 
Riportiamo per brevità le sole configurazioni rilevanti del router PE-2, che è l'unico nel nostro esempio che richiede l'abilitazione della funzionalità BGP Best External (anche se nella pratica il comando poi si mette su tutti i PE).
 
[edit protocols bgp]
tt@PE-2# show
group IBGP {
    type internal;
    local-address 192.168.0.2;
    advertise-external;
    family inet-vpn {
        unicast;
    }
    neighbor 192.168.0.1;
    neighbor 192.168.0.3;
}
 
[edit routing-instances SSGRR]
tt@PE-2# show
instance-type vrf;
interface fe-0/0/1.0;
route-distinguisher 3269:1;
vrf-target target:3269:1;
protocols {
    bgp {
        group CE {
            type external;
            peer-as 65201;
            as-override;
            neighbor 10.1.21.2;
        }
    }
}
 
Sul router PE-1 abbiamo assegnato a tutti gli annunci provenienti da CE1-1 un LP=200, per fare in modo che il collegamento tra PE-1 e CE-12 sia utilizzato come primario.
 
[edit policy-options policy-statement SETLP]
tt@PE-1# show
then {
    local-preference 200;
}
 
[edit routing-instances SSGRR]
tt@PE-1# show
instance-type vrf;
interface fe-0/0/1.0;
route-distinguisher 3269:1;
vrf-target target:3269:1;
protocols {
    bgp {
        group CE {
            type external;
            import SETLP;
            peer-as 65201;
            as-override;
            neighbor 10.1.11.2;
        }
    }
}
 
Vediamo ora i percorsi presenti nella tabella di routing associata alla VRF SSGRR su PE-3, verso la rete 10.1/16 annunciata da CE-12, prima e dopo l'applicazione della funzionalità BGP Best External.
 
Prima:  
 
tt@PE-3> show route table SSGRR.inet.0 10.1/16 exact
SSGRR.inet.0: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
10.1.0.0/16  *[BGP/170] 00:06:23, localpref 200, from 192.168.0.1
                      AS path: 65201 I
                    > to 172.30.1.1 via fe-0/0/1.0, Push 300000, Push 299808(top)
 
 
Dopo:
 
tt@PE-3> show route table SSGRR.inet.0 10.1/16 exact
SSGRR.inet.0: 6 destinations, 7 routes (6 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
10.1.0.0/16 *[BGP/170] 00:08:14, localpref 200, from 192.168.0.1
                      AS path: 65201 I
                    > to 172.30.1.1 via fe-0/0/1.0, Push 300000, Push 299808(top)
                     [BGP/170] 00:00:06, localpref 100, from 192.168.0.2
                      AS path: 65201 I
                    > to 172.30.1.1 via fe-0/0/1.0, Push 300016, Push 299824(top)
 
Come si può notare, prima dell'applicazione della funzionalità BGP Best External, PE-3 ha in memoria un solo percorso, quello annunciato da PE-1. Dopo l'applicazione invece, PE-3 si trova oltre al percorso annunciato da PE-1, anche un percorso annunciato da PE-2, percorso che per PE-2 non è best-path. Quest'ultimo è per PE-2 il percorso eBGP.
 
ESEMPIO CON ROUTE REFLECTOR
Nell'esempio del paragrafo precedente, abbiamo accuratamente evitato l'utilizzo di Route Reflector (RR). Ma questo nelle applicazioni pratiche è uno scenario realistico solo in presenza di pochissimi PE (4, al massimo 5). Ho già detto che in presenza di RR è necessario utilizzare altre funzionalità, come Add-Path e Diverse Path, che tratterò nel seguito.
Ma nel (solo) caso delle L3VPN BGP/MPLS è possibile utilizzare comunque la funzionalità BGP Best External, insieme a un trucchetto semplice semplice: si assegnano alle due VRF dove sono attestati i due collegamenti del sito VPN, due diversi Route Distinguisher (RD). Così facendo in qualche modo si "imbroglia" il BGP, facendogli credere di essere in presenza di due NLRI diversi. Ma in realtà ad essere diversa è la sola componente RD del prefisso VPN-IPv4, mentre la componente IP è identica.
Cosa accade è presto detto. Facendo riferimento alla prima figura in alto, nell'ipotesi di presenza di un RR, grazie alla funzionalità BGP Best External abilitata su PE-2, questo riceverà due annunci del prefisso NET X, uno da PE-1 e l'altro da PE-2 (quest'ultimo grazie alla funzionalità BGP Best External). L'annuncio ricevuto da PE-1 è in realtà l'annuncio del prefisso VPN-IPv4 RD1:<NET X>, mentre analogamente, quello ricevuto da PE2 è in realtà del prefisso VPN-IPv4 RD2:<NET X> (con RD1 diverso da RD2). Per cui il RR vedrà due NLRI diversi, e ciascun percorso sarà eletto best-path. Per cui il RR rifletterà ai suoi RR-Client (tutti i router PE, anche quello da cui viene ricevuto il best-path !) due best-path diversi. E così su tutte le VRF dell'istanza VPN si avranno due percorsi verso il prefisso VPN NET X, uno con BGP Next-Hop PE-1 e l'altro con BGP Next-Hop PE-2. Tra i due viene ovviamente eletto come best-path il percorso con BGP Next-Hop PE-1, avendo il relativo annuncio un LP più elevato (200 contro 150, sempre facendo riferimento allo scenario iniziale con l'aggiunta di un RR). A parte qualche dettaglio, nulla cambierebbe nella sostanza se invece di un singolo RR se ne avessero due (o anche più). 
Vale la pena utilizzare questo trucchetto, invece di funzionalità più generali e più eleganti come Add-Path o Diverse Path ? Secondo me no, per la semplice ragione che l'applicazione ha validità limitata all'ambito di servizi L3VPN e per reti con pochi siti VPN. E' impensabile che un grande ISP con migliaia di siti con collegamenti ridondati possa utilizzare un simile trucchetto. Sarebbe un incubo da un punto di vista gestionale !!! Però io conosco una grande rete Enterprise che implementa servizi L3VPN per soli (pochi) Clienti interni, che lo utilizza con successo.
E allora perché ho voluto illustrarlo ? La ragione, come vedremo in futuro, è che la funzionalità Add-Path si basa su un ragionamento molto simile.
 
CONCLUSIONI
Con questo Post ho iniziato la seconda (e ultima) trilogia che riguarda la convergenza del BGP. La funzionalità che ho descritto ha senso implementarla sempre, ma trova la sua applicazione naturale congiuntamente all'implementazione della funzionalità BGP PIC.
Nei prossimi due Post che completeranno questa trilogia tratterò le funzionalità Add-Path e Diverse Path.
Siete nuovi al BGP, oppure avete bisogno di ulteriori approfondimenti ? Acquistate il mio libro "BGP: dalla teoria alla pratica" (al prezzo speciale di 30 Euro per gli utenti registrati al sito, spese di spedizione gratuite). Oppure seguite i nostro corsi IPN246 e IPN247.
 
 
 
 
 
Mercoledì, 24 Dicembre 2014 06:51

AUGURI

Carissimi Lettori del blog,
vi auguro un Buon Natale e come dico ogni anno ai miei Amici, "noi speriamo che ce la caviamo" anche nel 2016.
Volevo chiudere l’anno con un nuovo post sul modello EVPN, giusto per completare la trilogia, ma gli impegni di lavoro non mi hanno dato il tempo di scriverlo. Sarà pronto per il ritorno dalle solenni “abbuffate” natalizie e di fine anno.
Quest’anno ho scritto 24 post sugli argomenti più disparati. Tra questi ci sono vari capitoli del libro su IS-IS (brutto acronimo di questi tempi !), che è arrivato al Capitolo 9. Ne mancano due, praticamente pronti, che pubblicherò nel 2016.
Lo spirito del blog è quello di tenervi aggiornati su cose nuove e interessanti nei campi che mi sono più familiari. Ci sono molte novità in arrivo, il mondo del networking sta conoscendo nuovi stimoli e si stanno affacciando sulla scena molte novità, soprattutto legate alle nuove tecnologie dei Data Center e della virtualizzazione. Cercherò, per quanto mi è possibile, di tenervi sempre aggiornati. Purtroppo le cose da scrivere sarebbero infinite e il tempo è tiranno (e chissà, forse anche l’energia inizia inesorabilmente a calare).
Se pensate che questo blog possa essere utile anche a vostri colleghi e/o amici, fate pubblicità. Non costa niente, è solo un servizio che la Reiss Romoli srl, mette a disposizione per diffondere la cultura dell'Internetworking IP.
Di nuovo Buon Natale e auguri per un ottimo 2016 (e speriamo che questa sia la volta buona, il PIL Italiano è previsto in crescita del 1,5% nel 2016 ...). 

Il tuo IPv4: 52.14.253.170

Newsletter

Nome:
Email: