Trovare una MAC nel database EVPN dimostra che è stata annunciata o ricevuta come rotta, e nulla di più. La tabella di inoltro è una struttura diversa, programmata più tardi, quindi la stessa MAC può comparire in una e mancare nell'altra mentre ogni protocollo si comporta correttamente. Trattare questi due output come copie l'uno dell'altro manda gli ingegneri a caccia di un guasto BGP quando il divario reale è una politica di importazione o un next hop irrisolto. La domanda che vale la pena porsi non è se il fabric conosca la MAC, ma a quale fase ha smesso di passarla avanti.

Due tabelle che rispondono a domande diverse

Su Junos EVPN il database elenca gli indirizzi MAC per istanza insieme a come ciascuno è arrivato: appreso da una porta di accesso, ricevuto in una rotta Type 2 o contrassegnato come parte di un gruppo multihoming. Il riferimento Juniper show evpn database copre i filtri per MAC e per istanza che rendono leggibile la vista. È un riepilogo del piano di controllo con chiave istanza e MAC, non la tabella con cui l'hardware commuta i frame.

La tabella di commutazione è quello stato di inoltro. Entrambi gli output elencano MAC accanto al contesto VLAN o VNI, ed è esattamente per questo che vengono confrontati riga per riga, ed esattamente per questo che il confronto trae in inganno. Una voce nel database dice che la rotta esiste ed è stata accettata nell'istanza; non dice nulla sul fatto che la piattaforma l'abbia installata per l'inoltro.

Una rotta Type 2 trasporta la MAC, un IP opzionale, una label o VNI, un distinguisher di rotta e un next hop che nomina il VTEP remoto. Quattro cose possono rompersi tra il cavo e quella rotta: l'host non viene mai appreso, la rotta non viene mai annunciata, viene rifiutata all'importazione o il suo next hop non si risolve. Ogni guasto lascia un insieme diverso di tabelle popolate, ed è per questo che la sequenza può essere diagnosticata.

L'apprendimento locale avviene ancora per primo

L'ipotesi comune è che EVPN si assuma l'apprendimento delle MAC, quindi un database vuoto deve significare un problema di overlay. L'apprendimento locale gira ancora lato accesso, esattamente come prima che esistesse VXLAN: lo switch apprende la MAC sorgente di un frame consentito nel VLAN e nel servizio corretti, e solo dopo ne origina una Type 2. Un host che non ha inviato alcun frame rilevante non ha nulla da annunciare. Un host i cui frame vengono scartati dall'appartenenza al VLAN, da un filtro o da un membro inattivo di un aggregato appare identico dal punto di vista dell'overlay.

Parti dal punto di attacco e procedi con comandi di sola lettura. L'obiettivo è dimostrare che un frame dell'host ha attraversato il servizio previsto, perché nulla a valle compensa un frame che non è mai arrivato.

show interfaces ge-0/0/1.0
show ethernet-switching interface ge-0/0/1.0
show lacp interfaces ae0

I membri LACP selezionati contano più del fatto che il bundle sia attivo, perché un aggregato può essere attivo su un membro mentre il traffico dell'host viene hashata su un link inattivo o bloccato. I contatori di interfaccia distinguono un host silenzioso da uno che scarta, perché un host che non trasmette mai e un host i cui frame vengono scartati dalla classificazione lasciano la stessa tabella vuota.

Dove si perde una MAC remota

Una MAC remota fallisce nella direzione opposta, e in silenzio. La rotta Type 2 arriva, ma entra in un'istanza solo quando il suo route target e il VNI corrispondono alla configurazione locale, e diventa utilizzabile solo quando il next hop si risolve in un VTEP raggiungibile. Un disallineamento del route target lascia una rotta valida nella tabella BGP che nessuna istanza richiede.

Leggi le tre viste in ordine: presenza della rotta, voce del database, voce di inoltro. I comandi seguenti interrogano la stessa MAC a ogni fase, e l'indirizzo di esempio mantiene gli output confrontabili.

show evpn database instance blue mac-address 02:00:00:00:00:5c extensive
show route table bgp.evpn.0 | match 02:00:00:00:00:5c
show route table bgp.evpn.0 | match 02:00:00:00:00:5c extensive

Questi output rispondono a tre domande separate. Una rotta in bgp.evpn.0 senza voce nel database punta a politica di importazione, route target o configurazione dell'istanza. Una voce nel database senza voce di inoltro punta alla programmazione della piattaforma, che appartiene a un percorso di escalation diverso. Una rotta attiva il cui next hop non si risolve è un problema di trasporto o di label, e nessuna quantità di debug delle MAC lo ripara.

Un riavvio che l'ha risolto dimostra molto poco

Quando un riavvio fa sparire il sintomo, la conclusione tentatrice è che la configurazione debba essere sana. Un riavvio riprogramma ogni tabella da zero, quindi nasconde anche il caso in cui una voce obsoleta oscurava un errore di politica; il guasto tende a tornare al successivo cambiamento, al flap di un link o al ritiro di una rotta.

Prima di qualsiasi finestra di manutenzione, cattura ciò che il riavvio cancellerà. Questi tre comandi bastano per confrontare prima e dopo, e non cambiano nulla sul dispositivo.

show evpn database instance blue
show route table bgp.evpn.0
show version

Archivia questi output con la data e la build del software accanto. Un rapporto successivo secondo cui lo stesso riavvio aveva già funzionato è un indizio più che una prova, e la differenza diventa visibile solo quando qualcuno ha conservato l'output precedente.

Quattro osservazioni che risolvono la maggior parte dei casi

Quattro osservazioni coprono quasi ogni caso: il punto di attacco e il suo servizio, la MAC come valore di esempio, lo stato della rotta e del database, e la build in uso. Scegli una MAC che sia ovviamente un esempio, così nessuno la scambi per un indirizzo di produzione: un primo ottetto 02 contrassegna un indirizzo unicast amministrato localmente, gli ottetti restanti sono liberi, e 02:00:00:00:00:5c è quindi un segnaposto sicuro.

Poi lascia che le risposte indichino la fase che ha fallito. Nessun apprendimento al punto di attacco significa lato accesso; una rotta senza voce nel database significa importazione; una voce nel database senza stato di inoltro significa programmazione. Qualunque sia, consegna gli output raccolti insieme a host, interfaccia, servizio e build, così il prossimo ingegnere può riprodurre il percorso invece di ripetere la query.

Articoli correlati