domenica 6 marzo 2016

Inter-VXLAN Routing

In un post precedente sull'integrazione L2/L3 del modello EVPN, ho trattato con dovizia di particolari come avviene l'inter-VLAN routing nel modello EVPN, illustrando le due modalità possibili, simmetrica e asimmetrica.

Successivamente, in un altro post ho invece illustrato come sia possibile utilizzare EVPN come piano di controllo delle VXLAN. Per motivi di spazio ho dovuto lasciare da parte un argomento: come avviene il routing tra VXLAN (inter-VXLAN routing). E' ora  colmare questa lacuna e illustrare come le modalità simmetrica e asimmetrica viste per l'inter-VLAN routing nel modello EVPN, si applicano al modello VXLAN con piano di controllo EVPN (NOTA: l'inter-vxlan routing, nel caso di utilizzo di MAC Learning basato sul routing multicast o su unicaxt-only VXLAN, segue logiche analoghe e per certi versi più semplici). 

La teoria è ampiamente trattata nel draft IETF "draft-ietf-bess-evpn-inter-subnet-forwarding". I due principali vendor di apparati di internetworking, Cisco e Juniper, supportano entrambi VXLAN con piano di controllo EVPN, ma per l'inter-vxlan routing adottano soluzioni diverse: Cisco utilizza la modalità simmetrica, Juniper la modalità asimmetrica. Ciascuna modalità ha i suoi vantaggi e svantaggi, che saranno messi in luce nel seguito. Ho letto in un documento Cisco che ci sarebbe (uso non a caso il condizionale) un accordo tra i vari vendor per convergere verso la modalità simmetrica, aspetto importante per l'interlavoro. Ma al momento ognuno fa le sue scelte in modo autonomo.

<MAC; IP> LEARNING LOCALE (RICHIAMI)
Prima di vedere il funzionamento dell'inter-vxlan routing, è bene richiamare cosa accade a valle del <MAC; IP> learning locale, aspetto già visto in un precedente post (vedi sezione su "PIANO DI CONTROLLO L2/L3 INTEGRATO").

Quando una funzione VTEP (che svolge il ruolo di PE del modello EVPN) apprende (via GARP, RARP, ecc.) un’associazione <MAC; IP> da un Host (CE) parte di una EVI, questa esegue sul piano di controllo due azioni:
  • Installa nella tabella MAC-VRF associata alla EVI, la coppia <MAC; Porta> e nella VRF IP associata, una Host route IP (/32 in IPv4, /128 in IPv6) che ha come Next-Hop l’interfaccia IRB associata al segmento VXLAN, e come protocollo EVPN.
  • Annuncia alle VTEP remote l’associazione <MAC; IP>, attraverso un annuncio BGP EVPN con NLRI di tipo 2 (MAC/IP Advertisement). 
A valle di questo, qualora la funzione VTEP debba per un qualche motivo effettuare un lookup a livello IP, esegue il lookup sulla VRF IP. Poiché il Next-Hop risulta essere una interfaccia IRB associata a una EVI, va a cercare le informazioni per l'inoltro nella EVI stessa. 

E qui finisce la storia (per il momento). Questo modo di procedere è utilizzato sul piano dati da entrambe le modalità di forwarding.

INTER-VXLAN ROUTING ASIMMETRICO
L'idea è molto semplice, si tratta solo di utilizzare la teoria esposta nel post sul modello EVPN dove è stato trattato l'inter-VLAN routing , e calarla nelle VXLAN. 

L'idea base della modalità asimmetrica è che la VTEP di ingresso esegue sia routing che bridging, mentre la VTEP di uscita solo bridging (da qui il nome asimmetrica). La figura seguente ne illustra  il funzionamento del piano dati.



Nella figura, un Host H1 del segmento VXLAN identificato dal VNI 10, attestato a un dispositivo dove risiede la funzione VTEP 1, invia un pacchetto IP a un Host H2 del segmento VXLAN identificato dal VNI 20, attestato a un dispositivo dove risiede la funzione VTEP 32 (NOTA: gli Host non sono necessariamente Host fisici, ma potrebbero essere macchine virtuali create su un server; così come i dispositivi dove risiedono le funzioni VTEP non sono necessariamente macchine fisiche, ma potrebbero essere ad esempio, degli switch virtuali definiti in un Hypervisor di un server). 

L’Host H1 invia il pacchetto IP incapsulato, come da copione classico, in una trama Ethernet con MAC sorgente il proprio MAC (= MAC-1) e MAC destinazione l’indirizzo MAC del default gateway (= MAC-DG). Come H1 abbia appreso l’indirizzo MAC-DG è anche questo un classico, utilizza il protocollo ARP, con la VTEP 1 che eventualmente svolge la funzione di Proxy ARP

La trama Ethernet viene intercettata dalla funzione VTEP 1, che esegue un primo lookup sulla tabella MAC-VRF associata alla EVI. Poiché l'indirizzo MAC destinazione è quello del default gateway del segmento VXLAN con VNI 10, ossia l'indirizzo MAC dell'interfaccia IRB associata al segmento VXLAN con VNI 10, viene effettuato un secondo lookup sulla VRF IP associata. Le informazioni per l’inoltro contenute nella VRF IP in corrispondenza dell’indirizzo IP destinazione (IP-2), sono il Next-Hop (= VTEP 32), il MAC dell’Host H2 (= MAC-2) e il VNI a cui appartiene MAC-2 (= 20). 

A questo punto, la funzione VTEP 1 incapsula il pacchetto IP originale in una trama Ethernet con MAC sorgente MAC-DG, MAC destinazione MAC-2 e incapsula la trama con una intestazione VXLAN avente come parametri fondamentali:
  • Indirizzo IP sorgente: indirizzo della VTEP 1.
  • Indirizzo IP destinazione: indirizzo della VTEP 32.
  • VNI: VNI a cui appartiene MAC-2 (= 20).
Il pacchetto VXLAN così formato arriva al dispositivo dove è definita la funzione VTEP 32. Questa utilizza il valore VNI = 20, come da funzionamento classico delle VXLAN, per effettuare un lookup sulla tabella MAC-VRF associata alla VXLAN con VNI = 20 (EVI-2). Quest’ultimo lookup consente di individuare l’interfaccia uscente. Così, tolta l'intera intestazione VXLAN, la trama Ethernet risultante viene inviata direttamente ad H2 e il gioco è fatto. (NOTA: il fatto che la VTEP 1, che svolge il ruolo di PE del modello EVPN, utilizzi un incapsulamento VXLAN, piuttosto che un altro tipo di incapsulamento, deriva dal fatto che a tutti gli annunci BGP EVPN, di qualsiasi tipo, viene aggiunta la BGP Encapsulation Extended Community, che specifica il tipo di incapsulamento da utilizzare (vedi il post precedente sul piano di controllo delle VXLAN). Il tipo di incapsulamento è identificato da un valore numerico standard (es. VXLAN = 8, NVGRE = 9, MPLS = 10, ecc.)).

INTER-VXLAN ROUTING SIMMETRICO
L'inter-vxlan routing nella modalità simmetrica, è più complesso e richiede dei parametri aggiuntivi:
  • Un indirizzo MAC associato a ciascuna VTEP, utilizzato come MAC destinazione interno per i pacchetti instradati a Livello 3. Viene spesso indicato come "Indirizzo MAC del Router".
  • Un L3-VNI associato alle singole VRF dei tenant. Questo L3-VNI deve essere identico su tutte le VRF dello stesso tenant (ma diverso da tenant a tenant). Tutti i pacchetti instradati a Livello 3 tra diversi domini di bridging dello stesso tenant, vengono incapsulati con una intestazione VXLAN con VNI pari al L3-VNI. Sulla VTEP destinazione, il L3-VNI serve a determinare la VRF del tenant.
Poiché la complessità dell'inter-vxlan routing simmetrico è maggiore rispetto a quello asimmetrico, cercherò di illustrarne il funzionamento in modo dettagliato, partendo dal piano di controllo, e quindi illustrando il piano dati. 

Nel far questo farò riferimento allo stesso esempio utilizzato nella sezione precedente, dove un Host H1, appartenente al segmento VXLAN identificato dal VNI 10, invia un pacchetto un Host H2, appartenente al segmento VXLAN identificato dal VNI 20. Entrambi i segmenti VXLAN appartengono allo stesso tenant, e nella VRF IP associata, alla fine del processo di segnalazione sul piano di controllo, si troveranno anche le interfacce virtuali IRB utilizzate per l'inter-vxlan routing.

Il piano di controllo procede in modo simile a quanto già illustrato per il modello EVPN, con qualche differenza dovuta al contesto. Ciascuna VTEP, una volta appresa localmente la coppia <MAC; IP> di H1 e H2, invia un annuncio BGP EVPN di tipo 2 (MAC/IP Advertisement Route), con i seguenti campi:
  • RD e ESI configurati manualmente o determinati automaticamente.
  • Ethernet Tag = 0 (nell'ipotesi abbastanza frequente nelle applicazioni di servizio VLAN-based).
  • Associazione <MAC; IP> dell'Host (<MAC-1; IP-1> o <MAC-2; IP-2>).
  • MPLS Label1 = VNI a cui appartiene l'Host. (NOTA: anche se il campo si chiama "MPLS Label1", come già visto in questo post, nel caso di utilizzo di EVPN come piano di controllo per le VXLAN, questo trasporta il valore di VNI a cui appartiene l'Host).
  • MPLS Label2 = L3-VNI del tenant. (NOTA: questo campo non viene utilizzato nella modalità asimmetrica).
Agli annunci vengono quindi aggiunti due Route Target (RT) e due Extended Community:
  • Un RT associato alla propria EVI: consente di importare gli annunci BGP EVPN nella EVI corretta.
  • Un RT associato alla propria VRF IP: consente di importare gli annunci BGP EVPN nella VRF associata al tenant.  
  • Una Encapsulation Extended Community, che specifica il tipo di incapsulamento da utilizzare.
  • Una nuova "Router’s MAC Extended Community", che contiene l'indirizzo MAC associato a ciascuna VTEP, il cui formato è riportato nella figura seguente (NOTA: questa nuova Extended Community non viene utilizzata nell'inter-vlan routing classico, illustrato in questo post).


Alla ricezione di questi annunci BGP EVPN di tipo 2, ciascuna VTEP esegue le seguenti operazioni:

  • Utilizza i due RT per inserire le informazioni contenute nell'annuncio nelle MAC-VRF e IP VRF corrispondenti. 
  • Importa l'indirizzo MAC annunciato nella MAC-VRF associata alla EVI (questo avviene, come ben noto, confrontando il RT configurato nella EVI come RT-import, con i RT presenti nell'annuncio). Il BGP Next-Hop associato all'indirizzo MAC è l’indirizzo IP della VTEP remota che invia l’annuncio (NOTA: i BGP Next-Hop potrebbero essere più di uno nel caso di Host multi-homed). Il VNI associato all'indirizzo MAC è il valore contenuto nel campo "MPLS Label1" dell'annuncio.
  • Poiché l'annuncio contiene le due Extended Community "Encapsulation" (con valore 8 = VXLAN) e "Router’s MAC", la VTEP ricevente, importa nella VRF IP (utilizzando il RT associato alla VRF IP), l'indirizzo IP associato all'indirizzo MAC (come Host Route, ossia /32 se IPv4, /128 se IPv6), l'indirizzo MAC contenuto nella "Router’s MAC Extended Community " e il valore L3-VNI contenuto nel campo "MPLS Label2" dell'annuncio. Anche qui, Il BGP Next-Hop associato è l’indirizzo IP della VTEP remota che invia l’annuncio.
La sequenza delle operazioni è riassunta nell'esempio della figura seguente. Nella figura sono evidenziati i campi più importanti dell'annuncio BGP EVPN di tipo 2 e il contenuto finale della VRF IP. Le informazioni memorizzate nella VRF IP, sono l'elemento chiave nel funzionamento dell'inter-vxlan routing asimmetrico.




Nella figura, il valore di L3-VNI è stato posto a 1020 e il valore dell'indirizzo MAC del Router è indicato con MAC-32. Quando l'annuncio arriva alla VTEP 1, questa lo importa nella sola VRF IP, poiché si ipotizza che non vi sia sulla VTEP 1 alcun Host appartenente alla VNI 20. 

Vediamo ora come tutte queste informazioni sono utilizzate dal piano dati, illustrato nella figura seguente.  

 


Nella figura, un Host H1 del segmento VXLAN identificato dal VNI 10, attestato a un dispositivo dove risiede la funzione VTEP 1, invia un pacchetto IP a un Host H2 del segmento VXLAN identificato dal VNI 20, attestato a un dispositivo dove risiede la funzione VTEP 32. L’Host H1 invia il pacchetto IP incapsulato, come da copione classico, in una trama Ethernet con MAC sorgente il proprio MAC (= MAC-1) e MAC destinazione l’indirizzo MAC del default gateway (= MAC-DG). 

La trama Ethernet viene intercettata dalla funzione VTEP 1, che esegue un primo lookup sulla tabella MAC-VRF associata alla EVI. Poiché l’interfaccia di uscita risulta essere l'interfaccia (virtuale) IRB associata al segmento VXLAN con VNI 10, viene effettuato un secondo lookup sulla VRF IP. Le informazioni per l’inoltro, contenute nella VRF IP in corrispondenza dell’indirizzo IP destinazione (IP-2), sono il Next-Hop (= IP-VTEP-32), il "Router's MAC" (= MAC-32) e il L3-VNI associato al tenant (= 1020). 

A questo punto, la funzione VTEP 1 incapsula il pacchetto IP originale in una trama Ethernet con MAC sorgente MAC-DG, MAC destinazione MAC-32 e incapsula la trama con una intestazione VXLAN avente come parametri fondamentali:
  • Indirizzo IP sorgente: indirizzo della VTEP 1.
  • Indirizzo IP destinazione: indirizzo della VTEP 32.
  • VNI: L3-VNI associato al tenant (= 1020).
Il pacchetto VXLAN così formato arriva al dispositivo dove è definita la funzione VTEP 32. La funzione VTEP 32 utilizza il valore L3-VNI = 1020, per individuare la VRF IP dove effettuare un primo lookup. A questo punto viene rimossa l'intestazione VXLAN ed effettuato il lookup. Poiché l'indirizzo MAC destinazione (= MAC-32) coincide con il proprio "Router MAC", viene esaminato il pacchetto IP, in particolare l'indirizzo IP destinazione (= IP-2). Il Next-Hop associato è l'interfaccia IRB associata al segmento VXLAN con VNI 20. Per cui viene effettuato un secondo lookup sulla MAC-VRF associata alla EVI-2, a sua volta associata al segmento VXLAN identificato da VNI = 20. Quest’ultimo lookup consente di individuare l’interfaccia uscente e il MAC destinazione (= MAC-2). Così, una volta riscritto il MAC destinazione da MAC-32 a MAC-2, la trama Ethernet risultante viene inviata direttamente ad H2 e il gioco è fatto.

MODALITA' SIMMETRICA O ASIMMETRICA ?
Come sempre accade, quando ci sono due soluzioni alternative per lo stesso problema, nascono due scuole di pensiero. Io mi limiterò qui ad evidenziare vantaggi e svantaggi delle due soluzioni. 

La modalità asimmetrica ha il vantaggio di essere molto semplice da implementare e di richiedere un lookup in meno sul switch di uscita (solo lookup L2). Per contro, richiede la memorizzazione sulla VRF del tenant, oltre che degli indirizzi IP di tutti gli Host, anche degli indirizzi MAC associati, anche se sul switch non vi sono Host appartenenti allo stesso segmento VXLAN. E questo potrebbe portare a seri problemi di scalabilità in ambienti tipo Cloud pubblici dove non è difficile avere a che fare con un numero di MAC dell'ordine di qualche milione.

La  modalità simmetrica è invece sicuramente più complessa da implementare poiché richiede ulteriori parametri (un indirizzo MAC associato a ciascuna VTEP e un L3-VNI associato alle singole VRF dei tenant) e un lookup in più sugli switch di uscita. Per contro, a differenza della modalità asimmetrica, non è richiesta la memorizzazione sulla VRF del tenant degli indirizzi MAC, ma solo degli indirizzi IP.

Come all'inizio, ho letto in un documento Cisco che ci sarebbe un accordo tra i vari vendor per convergere verso la modalità simmetrica, aspetto importante per l'interlavoro, ma al momento non è così. Sarebbe auspicabile che qualcuno prendesse la decisione di convergere verso una unica soluzione, per consentire l'interlavoro tra piattaforme di vendor diversi. Le modalità simmetrica e asimmetrica, come è semplice verificare, sono infatti incompatibili, e questo ne rende impossibile l'utilizzo contemporaneo. Solo per fare un classico esempio, far funzionare l'inter-vxlan routing quando le funzioni VTEP sono su piattaforme Cisco e Juniper è mission impossible, perché Juniper utilizza la modalità asimmetrica e Cisco la modalità simmetrica. Una alternativa potrebbe essere che i vendor implementino entrambe le soluzioni, lasciando ai progettisti di rete scegliere quella che ritengono migliore, sulla base della consistenza della rete stessa (banalmente, piccola rete modalità asimmetrica, grande rete modalità simmetrica). 

CONCLUSIONI
L'inter-vxlan routing è l'equivalente del classico inter-vlan routing, che tutti i networker conoscono. Concettualmente semplice, la sua implementazione nello scenario VXLAN con piano di controllo EVPN è però non banale. Sono state sviluppate due soluzioni, modalità simmetrica e asimmetrica, ampiamente descritte in questo post. Le soluzioni sono alternative e non interoperabili. Io ho cercato, oltre che a spiegarne il funzionamento, di mettere in luce vantaggi e svantaggi dell'una e dell'altra soluzione.

Uno potrebbe legittimamente chiedersi come mai esistano due soluzioni alternative per lo stesso problema, tra l'altro supportate da vendor diversi e trattate entrambe dal draft IETF in itinere, citato all'inizio di questo post. Ma di storie come questa negli anni se ne sono viste molte e l'IETF, come tutti i comitati di standardizzazione, sotto sotto è guidato dalle lobbies dei vari vendor. Solo per fare un esempio che mi è familiare, chi di voi ha vissuto l'evoluzione del Traffic Engineering MPLS, saprà che all'inizio erano stati proposti due protocolli di segnalazione: CR-LDP (una estensione del protocollo LDP) e RSVP-TE (una estensione del vecchio protocollo RSVP, sviluppato per il modello di QoS IP "Integrated Services", miseramente fallito). Misteriosamente, uno dei due (CR-LDP) fu "eliminato dalla gara". Se volete sapere il perché, date un'occhiata alla RFC 3468 e soprattutto guardate chi l'ha scritta. Per la cronaca, a me personalmente "garbava" più CR-LDP ... (un protocollo in meno, no soft state, e altro). 

Coming up next ... l'ultimo capitolo (10) del libro su IS-IS (in realtà l'ultimo a essere pubblicato, ma nell'ordine il penultimo). Contiene argomenti estremamente interessanti per l'applicazione pratica di IS-IS. 






Nessun commento:

Posta un commento