Accueil / Notes techniques / Échec d'établissement du tunnel VXLAN

Le tunnel VXLAN ne s'établit pas : voisins EVPN, routes Inclusive et VPN Target

Un tunnel VXLAN qui ne monte jamais du tout est une panne différente de celui qui est actif mais oscille, ou actif mais auquel il manque une route. Voici l'ordre couche par couche qui la trouve — le voisin BGP EVPN, la route qui construit réellement le tunnel, et le croisement VPN Target qui décide si cette route est acceptée.

Par Yuwen Zhang (Atlas), fondateur d'AtlasCommTech — 13 ans de déploiements de réseaux opérateurs et d'entreprise · Mis à jour en juillet 2026

Trois couches, réparties par type de tunnel

Un tunnel qui ne s'établit jamais échoue exactement à l'une de trois couches, et la couche dépend qu'il s'agisse d'un tunnel L2 ou L3.

Dans un fabric à passerelle distribuée BGP EVPN VXLAN, le tunnel entre deux VTEP n'est pas configuré directement — il est construit dynamiquement une fois la bonne route reçue. Un tunnel L2 est construit à partir d'une route Inclusive Multicast de type 3 ; un tunnel L3 est construit à partir d'une route IP Prefix de type 5 (aussi appelée route IRB). L'une ou l'autre route n'est acceptée que si la liste d'import VPN Target locale chevauche ce que le côté distant a exporté. Un tunnel qui ne s'établit pas du tout échoue alors à l'une de ces trois couches exactement : le voisin BGP EVPN lui-même, la route qui construit ce type de tunnel précis, ou le croisement VPN Target qui décide si la route est admise.

C'est différent d'un tunnel qui monte puis tombe plus tard, ou d'un tunnel qui existe mais dont une route précise à l'intérieur manque — ce sont des pannes qui leur sont propres, référencées en croisement à la fin de cette note. Voici la répartition en trois couches, les vérifications display bgp evpn pour les tunnels L2 et L3 côte à côte, les causes derrière chaque couche, et des réponses éprouvées sur le terrain.

Lisez la répartition avant de toucher à la configuration

Les échecs d'établissement de tunnel VXLAN se répartissent d'abord par type de tunnel — L2 ou L3 — puis par les mêmes trois couches sous-jacentes aux deux.

Un tunnel L2 et un tunnel L3 partagent la couche 1 (le voisin BGP EVPN) mais divergent à la couche 2, car ils sont construits à partir de deux types de routes EVPN différents, avec deux commandes de configuration différentes à vérifier.

VXLAN Tunnel Won't Establish L2 Tunnel -- Type 3 Inclusive Route L3 Tunnel -- Type 5 IP Prefix Route Layer 1 · BGP EVPN neighbor not Establishedshared with the L3 branch -- loopback reachability, TCP session Layer 2 · Inclusive Multicast route not learnedNVE source address, generated locally, received remotely Layer 3 · VPN Target doesn't cross (EVPN instance)no evpn keyword at this level -- import/export-extcommunity Layer 1 · BGP EVPN neighbor not Establishedshared with the L2 branch -- same session, same checks Layer 2 · IP Prefix route not learnedVbdif gateway subnet, generated locally, received remotely Layer 3 · VPN Target doesn't cross (VPN instance)evpn keyword required -- export/import-extcommunity evpn

Les légendes du schéma restent en anglais pour la clarté technique.

La couche 1 est partagée — corrigez le voisin une fois et les deux types de tunnel en bénéficient. Les couches 2 et 3 sont propres au type de tunnel que vous traquez, et les commandes diffèrent réellement entre elles.

Parcourir chaque couche

Une couche partagée, puis deux couches propres à chaque tunnel avec leur propre type de route et leur propre commande VPN Target.

Couche 1 — Le voisin BGP EVPN n'atteint jamais Established

Aucun des deux types de tunnel ne peut rien construire avant que cette couche soit solide — vérifiez-la d'abord, que vous traquiez une panne L2 ou L3.

  1. Exécutez display bgp evpn peer. Established avec un PrefRcv non nul signifie que la couche voisin est correcte ; passez directement à la couche 2 pour le type de tunnel concerné.
  2. Si le pair n'est pas Established, trouvez l'adresse source que chaque côté utilise pour la session TCP BGP (généralement une Loopback) avec display current-configuration configuration bgp, puis confirmez que les deux loopbacks peuvent réellement se joindre : ping -a <loopback-local> <loopback-distant>.
  3. Si les loopbacks ne peuvent pas se joindre, la panne se situe dans le routage IGP entre les deux VTEP, pas du tout dans BGP ou l'EVPN — corrigez-la d'abord.
  4. Si les loopbacks se joignent bien, vérifiez display tcp status pour la session entre les deux Router ID ; si elle n'est pas proprement Established, quelque chose sur le chemin (une ACL, une limite CPCAR, un middlebox) abandonne les paquets TCP de BGP eux-mêmes.
<VTEP2> display bgp evpn peer
BGP local router ID : 10.3.3.3
Local AS number : 100
Total number of peers : 2        Peers in established state : 2

 Peer          V      AS MsgRcvd MsgSent OutQ Up/Down             State PrefRcv

 10.1.1.1      4      100    4010    4016     0 0066h46m Established     1
 10.2.2.2      4      100    4009    4010     0 0066h40m Established     4

<VTEP2> ping -a 10.2.2.2 10.3.3.3
Reply from 10.3.3.3: bytes=32 time=1ms TTL=126
Ping statistics for 10.3.3.3:
   Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)
// loopback-to-loopback reachable -> if peer still isn't Established, check TCP session state next

<VTEP2> display tcp status
TCPCB Tid/Soid Local Add:port   Foreign Add:port      VPNID State
49f3370c 262/8 10.2.2.2:53342     10.3.3.3:179       0      Established
49f339f4 262/7 10.2.2.2:55160   10.1.1.1:179       0      Established
// clean Established state here -> the neighbor layer is not the problem

Couche 2, tunnels L2 — route Inclusive Multicast (type 3) non apprise

Un tunnel L2 entre deux VTEP est construit entièrement à partir de ce seul type de route — s'il n'est pas là, le tunnel non plus.

  1. Trouvez l'adresse source NVE propre à ce VTEP (display current-configuration interface nve 1) et son masque (display ip interface brief), puis recherchez la route Inclusive au format M:L:X.X.X.X — M vaut toujours 0, L est la longueur de masque de l'adresse source, X.X.X.X est l'adresse source elle-même.
  2. Confirmez que la route est générée localement : display bgp evpn all routing-table inclusive-route <M:L:X.X.X.X>. Une entrée locale affiche From: 0.0.0.0 et liste Advertised to such N peers.
  3. Effectuez la même recherche pour l'adresse source du VTEP distant, sur ce VTEP. Si elle manque, soit la route n'a pas été générée côté distant, soit elle n'atteint pas celui-ci — revérifiez la couche voisin et toute route-policy entre les deux.
  4. Si la route est présente à la fois localement et à distance, le tunnel L2 devrait se construire — passez à la vérification VPN Target de la couche 3.
<VTEP2> display current-configuration interface nve 1
interface Nve1
 source 10.2.2.2
 vni 10 head-end peer-list protocol bgp

<VTEP2> display bgp evpn all routing-table inclusive-route 0:32:10.2.2.2
Total routes of Route Distinguisher(1:10): 1
BGP routing table entry information of 0:32:10.2.2.2:
Imported route.
From: 0.0.0.0 (0.0.0.0)
Ext-Community: RT <1 : 100>, RT <10 : 1>, Tunnel Type <VxLan(8)>
Route Type: 3 (Inclusive Multicast Route)
Advertised to such 2 peers:
   10.3.3.3
   10.1.1.1
// From: 0.0.0.0 = generated locally; check the same prefix for the remote VTEP's source address next

Couche 2, tunnels L3 — route IP Prefix (type 5) non apprise

Un tunnel L3 est construit à partir de la route IP Prefix de la passerelle — même idée, type de route et commande différents.

  1. Trouvez l'adresse de passerelle Vbdif et le masque pour le sous-réseau en question : display current-configuration interface vbdif <ID-BD>. L'équipement génère automatiquement la route IP Prefix à partir de cette adresse de passerelle.
  2. Recherchez la route au format L:X.X.X.X:M (L vaut toujours 0, X.X.X.X:M est le sous-réseau de la passerelle) : display bgp evpn all routing-table prefix-route <L:X.X.X.X:M>.
  3. Confirmez que le même préfixe apparaît sous l'entrée VPN-Instance correspondante, pas seulement dans la famille d'adresses EVPN — un tunnel L3 a besoin que la route soit résolue dans la table de routage propre de l'instance VPN, pas seulement visible au niveau EVPN.
  4. Si elle manque côté distant, retravaillez la couche 1 pour ce pair ; si elle est présente à distance mais manquante localement, passez à la vérification VPN Target.
<VTEP2> display current-configuration interface vbdif 10
interface Vbdif10
 ip binding vpn-instance vpn1
 ip address 192.168.10.1 255.255.255.0

<VTEP2> display bgp evpn all routing-table prefix-route 0:24:192.168.20.0
Total routes of Route Distinguisher(3:100): 1
BGP routing table entry information of 0:192.168.20.0:24:
Ext-Community: RT <1 : 100>, Tunnel Type <VxLan(8)>
Route Type: 5 (Ip Prefix Route)

VPN-Instance vpn1, Router ID 10.2.2.2:
BGP routing table entry information of 192.168.20.0/24:
Relay Tunnel Out-Interface: VXLAN
// showing up under VPN-Instance vpn1, not just the EVPN address family, is what confirms the L3 tunnel can actually use it

Couche 3 — Le VPN Target ne se croise pas (commande différente pour chaque type de tunnel)

La route est arrivée ; le côté local doit encore la laisser entrer — et la commande qui contrôle cela diffère entre tunnels L2 et L3.

  1. Pour un tunnel L2, comparez les valeurs Ext-Community RT de la route Inclusive reçue à l'instance EVPN de ce VTEP : display current-configuration configuration evpn-instance <nom>. Cherchez vpn-target ... import-extcommunity (pas de mot-clé evpn à la fin).
  2. Pour un tunnel L3, comparez plutôt les valeurs Ext-Community RT de la route IP Prefix reçue à l'instance VPN de ce VTEP : display current-configuration configuration vpn-instance <nom>. Cherchez vpn-target ... import-extcommunity evpn — notez le mot-clé evpn final, facile à oublier par habitude si vous avez l'habitude de taper la forme L2.
  3. Dans les deux cas, une seule valeur RT doit se chevaucher entre ce qui a été reçu et ce qui est configuré pour l'import — s'il n'y a aucun chevauchement du tout, ajoutez la valeur manquante à la ligne import-extcommunity concernée plutôt que de modifier le côté distant.
// L2 -- EVPN instance, no "evpn" keyword
<VTEP2> display current-configuration configuration evpn-instance evpn10
evpn vpn-instance evpn10 bd-mode
 vpn-target 1:100 10:1 export-extcommunity
 vpn-target 10:1 import-extcommunity

// L3 -- VPN instance, "evpn" keyword required
<VTEP2> display current-configuration configuration vpn-instance vpn1
ip vpn-instance vpn1
 ipv4-family
  vpn-target 1:100 export-extcommunity evpn
  vpn-target 1:100 import-extcommunity evpn
 vxlan vni 100

5 causes qui reviennent sans cesse

Une fois que les trois couches ci-dessus ont indiqué où se situe le problème, ces cinq causes expliquent l'essentiel de ce qui ne va vraiment pas.

1. Le voisin BGP EVPN n'atteint jamais Established car les loopbacks ne peuvent pas router l'une vers l'autre

SYMPTÔMEdisplay bgp evpn peer montre un pair bloqué indéfiniment dans un état non-Established, et rien en aval — ni route Inclusive, ni route IP Prefix — n'a de quoi se construire.

CAUSELes routes de construction des tunnels L2 et L3 circulent toutes deux sur la même session BGP EVPN, et cette session est sourcée depuis une Loopback sur chaque VTEP. Si l'IGP entre les deux VTEP ne porte pas réellement de route vers la Loopback du pair, la session TCP derrière BGP ne peut absolument pas se former, et cela ressemble à un problème EVPN alors que c'est réellement un problème IGP.

SOLUTIONFaites un Ping depuis l'adresse source Loopback locale directement vers la distante (ping -a <local> <distant>) avant de toucher à toute configuration EVPN ou VPN-target — si cela échoue, corrigez d'abord la route IGP.

2. Quelque chose sur le chemin abandonne silencieusement la session TCP BGP

SYMPTÔMELes deux Loopbacks se ping mutuellement sans problème, mais display bgp evpn peer n'atteint toujours pas Established.

CAUSELa joignabilité entre les deux loopbacks confirme que le routage va bien, mais ne confirme pas que la session TCP BGP elle-même survit au chemin — une ACL de défense CPU, une limite de débit CPCAR, ou un middlebox quelque part entre les deux peut abandonner discrètement le trafic du port TCP 179 tandis que l'ICMP passe encore proprement.

SOLUTIONVérifiez display tcp status pour l'état réel de la session entre les deux Router ID ; si elle n'est pas proprement Established, cherchez des limites CPCAR ou des ACL sur le chemin qui affectent spécifiquement le port TCP 179, pas seulement la joignabilité générale.

3. La route Inclusive du tunnel L2 se génère bien localement mais n'est jamais acceptée à distance

SYMPTÔMEdisplay bgp evpn all routing-table inclusive-route sur le VTEP d'origine montre la route avec From: 0.0.0.0 et la liste comme annoncée au pair distant — mais la recherche du VTEP distant lui-même pour le même préfixe ne remonte rien.

CAUSELa route Inclusive Multicast du tunnel L2 n'est acceptée côté distant que si l'import-extcommunity de l'instance EVPN de ce VTEP partage une valeur avec le RT avec lequel la route a été exportée — sans chevauchement, la route est abandonnée silencieusement à l'arrivée, sans erreur d'un côté ni de l'autre.

SOLUTIONComparez l'import-extcommunity de l'instance evpn du VTEP distant directement aux valeurs Ext-Community RT affichées sur la route annoncée du côté d'origine, pas à ce que vous supposez avoir été configuré.

4. La route Prefix du tunnel L3 est configurée à un niveau totalement erroné

SYMPTÔMELa route IP Prefix semble correctement générée et apparaît même dans la famille d'adresses EVPN sur le VTEP récepteur, mais le tunnel vers cette passerelle ne se construit toujours pas et le sous-réseau reste injoignable.

CAUSEUn tunnel L3 a besoin que son VPN Target soit configuré sous l'ipv4-family de l'instance VPN avec le mot-clé evpn final (vpn-target ... export-extcommunity evpn / import-extcommunity evpn) — le configurer comme un simple vpn-target sans ce mot-clé, ou le configurer sous l'instance EVPN à la place (là où appartient la forme L2), laisse la route visible au niveau EVPN mais jamais résolue dans la table de routage propre de l'instance VPN.

SOLUTIONConfirmez avec display current-configuration configuration vpn-instance <nom> que les lignes export/import-extcommunity portent bien toutes deux le mot-clé evpn, et que la route apparaît spécifiquement sous l'entrée VPN-Instance dans la sortie de la table de routage, pas seulement dans la section famille d'adresses EVPN au-dessus.

5. Les tunnels L2 et L3 vers le même pair échouent indépendamment — corriger l'un ne corrige pas l'autre

SYMPTÔMEAprès avoir résolu un problème d'établissement de tunnel L2 entre deux VTEP, le tunnel L3 entre les deux mêmes équipements ne monte toujours pas, et cela donne l'impression que la correction précédente n'a pas fonctionné.

CAUSELes deux types de tunnel ne partagent que la couche voisin BGP EVPN — tout ce qui est au-dessus (le type de route, le niveau de configuration VPN Target, la commande import/export spécifique) est indépendant entre L2 et L3. Corriger une incompatibilité RT au niveau de l'instance EVPN ne fait rien pour une incompatibilité RT au niveau de l'instance VPN sur le même boîtier.

SOLUTIONTraitez une correction L2 et une correction L3 comme deux tickets distincts sur la même paire de voisins, et relancez les vérifications de couche 2 et couche 3 pour chaque type de tunnel séparément, même après que l'autre a été confirmé fonctionnel.

Conceptions de solutions associées

Six questions qui reviennent constamment

Tirées directement du terrain — celles pour lesquelles il vaut la peine d'avoir une réponse prête.

display bgp evpn peer montre Established — pourquoi le tunnel n'est-il pas encore là ?

Established confirme seulement que la session de plan de contrôle BGP EVPN entre les deux VTEP est active. Le tunnel lui-même a encore besoin que son type de route — Inclusive Multicast pour L2, IP Prefix pour L3 — soit généré, annoncé, reçu, et accepté via le croisement VPN Target. Un voisin sain avec une route manquante ou rejetée ne produit toujours aucun tunnel.

Quelle est la vraie différence entre une route Inclusive Multicast et une route IP Prefix ?

Inclusive Multicast (type de route 3) construit un tunnel VXLAN L2 — elle est liée à l'adresse source NVE du VTEP et ne porte aucune information d'hôte, juste « ce VTEP existe et est joignable pour ce VNI ». IP Prefix (type de route 5) construit un tunnel L3 — elle est liée à un sous-réseau de passerelle (Vbdif) spécifique et c'est ce qu'une passerelle IRB annonce pour que d'autres VTEP puissent router vers ce sous-réseau à travers elle.

Mes valeurs VPN Target sont identiques des deux côtés — pourquoi la route est-elle quand même abandonnée ?

Vérifiez à quel niveau de commande vous l'avez réellement configuré. Pour un tunnel L2, le VPN Target se trouve sous l'instance EVPN (evpn vpn-instance ... vpn-target ... export/import-extcommunity, pas de mot-clé final) ; pour un tunnel L3, il se trouve sous l'ipv4-family de l'instance VPN avec le mot-clé evpn (vpn-target ... export/import-extcommunity evpn). Des numéros RT identiques en apparence configurés au mauvais niveau, ou l'oubli du mot-clé evpn côté L3, produisent exactement ce symptôme.

En quoi un tunnel qui « ne s'établit pas » diffère-t-il d'un tunnel actif mais oscillant, traité dans l'autre note VXLAN ?

Cette note suppose que le tunnel n'a littéralement jamais monté — aucun état Established BGP EVPN, ou aucune route Inclusive/IP Prefix jamais acceptée. Si le tunnel s'est établi puis tombe, oscille, ou monte bien mais qu'une migration de VM ou un flux de trafic spécifique se comporte étrangement, ce sont des vérifications différentes — voir la note Pannes d'overlay VXLAN, qui reprend à partir d'un tunnel qui existe déjà.

Le tunnel ne s'établit pas, mais je ne trouve de route manquante nulle part — que reste-t-il d'autre ?

Si chaque vérification de route de cette note revient propre — voisin Established, route Inclusive ou IP Prefix générée et reçue, VPN Target qui se chevauche — et que le tunnel ne transfère toujours pas de trafic, la panne a dépassé l'établissement du tunnel pour entrer dans une autre catégorie : vérifiez si c'est la route EVPN d'un hôte précis qui manque plutôt que le tunnel lui-même, traité dans la note Route EVPN non apprise.

Puis-je exécuter toutes ces commandes display et ping sur un fabric en production ?

Oui — chaque commande de cette note est en lecture seule, sauf le ping loopback-à-loopback utilisé pour tester la joignabilité, qui ne touche pas au plan de données du fabric. Aucune n'exige de changement de configuration juste pour diagnostiquer, donc il n'y a aucune raison d'attendre une fenêtre de maintenance avant d'exécuter ces vérifications.

Limites honnêtes de cette note

Limites honnêtes de cette note

Cette note s'appuie sur le fabric à passerelle distribuée BGP EVPN de type Huawei CloudEngine et ses commandes display bgp evpn peer / display bgp evpn all routing-table inclusive-route / prefix-route / display current-configuration configuration evpn-instance / vpn-instance, ainsi que sur les cas de terrain qui les sous-tendent. Elle suppose une conception EVPN VXLAN standard à deux niveaux (L2 + L3) et ne couvre pas le provisionnement automatique underlay/overlay orchestré par contrôleur (fabric SDN), où ces mêmes symptômes peuvent remonter au contrôleur plutôt qu'à la configuration d'équipement montrée ici.

Le tunnel entre deux VTEP ne monte toujours pas ?

Dites-nous à quelle couche ça bloque — voisin, route, ou VPN Target — plus s'il s'agit d'un tunnel L2 ou L3, et la sortie display bgp evpn pertinente, et nous vous aiderons à l'interpréter.

WhatsApp avec un ingénieur →

Lectures connexes

Nous n'utilisons des cookies que pour des statistiques anonymes — pas de publicité, pas de suivi intersites.Politique de confidentialité