Home / Notes / L3VPN PE-CE Troubleshooting
NOTES · MPLS L3VPN TROUBLESHOOTING

MPLS L3VPN PE-CE Faults: RT Mismatches, Route Leaks and Slow Convergence

A VPN route that won't cross to the far PE, two VPNs that leak into each other, or a network that takes two minutes to reconverge after a PE reboot — most L3VPN tickets fall into a handful of repeatable shapes once the PE-PE BGP session itself is confirmed healthy. This is the diagnostic order that finds the fault fastest, the exact display commands for each stage, and the root causes that account for most of these cases.

By the AtlasCommTech engineering team — 13 years of carrier & enterprise network deployments · Updated July 2026

Why This Starts With a Working BGP Session, Not the VPN Config

Half of what looks like an L3VPN fault is actually a BGP or LDP fault wearing a VPN costume.

If PE-PE IBGP itself won't reach Established, that's a BGP fault tree problem before it's an L3VPN problem — see BGP Neighbor Won't Establish & Route Flapping: A Complete Checklist first. Once that session is confirmed healthy, L3VPN faults split into a few repeatable shapes: a route that never crosses to the far PE at all (local VPN-Target mismatches, IP collisions between VPN instances, missing labels, cross-domain relay problems, or a route reflector filtering it out silently), and a route that does cross but something is still wrong (physical-layer flapping riding underneath an otherwise-correct VPN, or convergence that takes minutes instead of seconds after a PE failure).

What follows is the fault tree this is built on, the checks for each stage with the exact commands to run, the root causes that show up again and again once you're past the first few checks, and a handful of real FAQ answers pulled from actual field cases.

Read the Fault Tree Before You Touch Any Configuration

L3VPN failures split into exactly two shapes: the route never crosses to the far PE, or it does and something still isn't right.

Placing the symptom on this tree first saves a lot of backtracking later — it tells you which of the sections below actually applies to what you're looking at.

L3VPN Fault Route Never Crosses to the Far PE Crosses Fine, Something's Still Wrong Stage 0 · Route never left the CECE-PE session down · route not in the local VPN table Stage 1 · RT / VPN Target or local IP collisionExport/Import mismatch · duplicate IP across VPN instances Stage 2 · Not valid/best, or can't reach a tunnelnext hop unreachable · ASBR Loopback mask · no label Stage 3 · Route reflector silently drops itpolicy vpn-target with no local instance · rr-filter A specific VPN prefix keeps flappingphysical interface flapping under a stable-looking LSP Convergence after a PE failure is slowredundant PEs share one RD · failover waits on IGP

Diagram labels are kept in English for engineering clarity.

Once you know which branch applies, almost every check below is a single display command away from a confirmed cause — the trap is troubleshooting the VPN layer when the actual fault is sitting one layer down, in IGP, LDP or the physical link underneath it.

Working Through Each Stage

Four stages, four different sets of things to look at — and the command that tells you exactly where a route stops being visible.

Stage 0 — Confirm the Route Actually Left the CE

Before touching RT or label configuration, confirm the route is even present in the local VPN routing table on the near PE.

  1. Ping CE-to-CE first. If it succeeds, the CE-to-CE path is fine and the fault sits between the VPN user's host and the CE — check that route separately.
  2. If it fails, run display ip routing-table on both CEs to see whether either has a route to the other at all.
  3. On the PE, run display ip routing-table vpn-instance vpn-instance-name to confirm the CE's route actually made it into the PE's VPN routing table — if it isn't there, the CE-PE session or its route policy is where the fault actually is, not anything downstream.
<PE> display ip routing-table vpn-instance vpna
// confirm the CE-advertised prefix is present before looking at RT, labels, or the far PE at all

Stage 1 — RT / VPN Target Match and Local Crossing

The route is in the local VPN table, the PE-PE BGP session is Established, but the far PE still doesn't have it — check the RT match itself, and a less obvious local one.

  1. Run display ip vpn-instance verbose on both PEs and confirm this PE's Export VPN Target matches the far PE's Import VPN Target, and vice versa.
  2. If two VPNs deliberately share the same RT for controlled cross-VPN reachability, also confirm the two VPN instances aren't bound to identical local IP addresses on the same PE — local route crossing silently prefers the direct local route over the imported BGP route when the addressing collides, and the crossed VPN only works one direction.
<PE> display ip vpn-instance verbose
VPN-Instance Name and ID : vpn1, 1
  Route Distinguisher : 100:1
  Export VPN Targets :  100:1
  Import VPN Targets :  1:1
// Export/Import Targets compared directly against the far PE's own values

<PE1> display ip interface brief
Interface           IP Address/Mask     Physical  Protocol  VPN
10GE0/0/1            10.1.1.2/30         up        up        VPN-A
10GE0/0/2            10.1.1.2/30         up        up        VPN-B
// same IP bound to two different VPN instances -- local crossing picks the wrong route

Stage 2 — Route Present But Not Valid/Best, or Can't Reach a Tunnel

The route shows up in the BGP VPNv4 table on the far PE, but it never gets installed — the reason is almost always the next hop, the tunnel, or a missing label.

  1. Run display bgp vpnv4 vpn-instance vpn-instance-name routing-table <prefix> and confirm the route shows valid and best — if not, check whether the IP routing table has a route to the BGP next hop (Original nexthop) at all.
  2. Run display bgp vpnv4 all routing-table <prefix> and look for a Relay Tunnel Out-Interface field (confirms the route can actually iterate to an LSP) and a Label information field (confirms a private label was allocated) — a route can be valid and best and still never get used if either is missing.
  3. For a cross-domain Option-B design specifically, check every intermediate ASBR's Loopback mask along the path — LDP only allocates labels for /32 host routes by default, so a Loopback configured with any other mask silently breaks label allocation for that FEC, and the LSP toward it never completes even though BGP itself shows the route as present.
<HUAWEI> display bgp vpnv4 vpn-instance vpna routing-table 1.1.1.1
 Relay IP Nexthop   : 10.1.1.2
 Original nexthop   : 3.3.3.3
 ..., valid, internal, best, select, active, pre 255

<HUAWEI> display bgp vpnv4 all routing-table 10.2.1.2
 Label information (Received/Applied): 13316/NULL
 Relay IP Out-Interface: 10GE0/0/1
 Relay Tunnel Out-Interface: 10GE0/0/1
// both fields present -- route can reach a real LSP with a real label

// cross-domain Option-B fix: ASBR Loopback was 1.1.1.2 255.255.255.252 (/30)
[ASBR1] interface loopback 0
[ASBR1-LoopBack0] ip address 1.1.1.2 32
[ASBR1] reset mpls ldp

Stage 3 — A Route Reflector Silently Drops It

Both PEs' configuration looks correct in isolation — the filtering is happening on the RR sitting between them.

  1. On the RR, check display current-configuration configuration bgp under ipv4-family vpnv4 for policy vpn-target — this enables VPN-Target filtering on the RR itself, and if the RR has no local VPN instance configured for that RT, it silently drops every route carrying it.
  2. Check display ip extcommunity-filter for a deny rule matching this route's RT, referenced by rr-filter under the RR's BGP-VPNv4 view — often a leftover from an earlier, narrower reflection policy.
<RR> display ip extcommunity-filter
Extended Community filter Number 1
index: 10     deny rt : 100:1
index: 20     permit rt : 200:1
// RT 100:1 is being denied -- this PE's Export VPN Target never gets reflected

[RR] ip extcommunity-filter 1 permit rt 100:1
[RR] bgp 100
[RR-bgp] ipv4-family vpnv4
[RR-bgp-af-vpnv4] undo rr-filter
[RR-bgp-af-vpnv4] rr-filter 1

Quality: Flapping Routes and Slow Convergence

The VPN configuration is correct — the fault is one layer down, or in how failover actually happens.

  1. If a specific VPN prefix flaps continuously with the VPN, RT and BGP configuration all clean, work down from the route type: confirm the IGP neighbor is stable, then check display mpls lsp include <prefix>/32 for an LDP LSP with a short uptime next to an RSVP/TE LSP that's been stable for a long time — that mismatch points at the LDP session, not the VPN.
  2. Check display interface on the link the unstable LDP session actually rides — a physical interface bouncing up/down is the layer where this class of fault usually really lives.
  3. If convergence after a PE reboot takes on the order of minutes rather than seconds, check whether the redundant PEs advertising the same CE prefix share an identical Route Distinguisher — if so, their VPNv4 routes are treated as a single BGP path rather than two independent equal-cost ones, and failover has to wait for the RR to confirm the old PE's session is actually gone via full IGP convergence.
<DeviceA> display mpls lsp include 1.1.1.1 32
LSP Information: RSVP LSP ... TimeStamp: 1825411sec   // stable for a long time
LSP Information: LDP LSP  ... TimeStamp: 10sec         // this one keeps resetting

[PE3] ip vpn-instance vpn-access
[PE3-vpn-instance-vpn-access] route-distinguisher 22:1
// distinct RD per PE turns the equal-cost VPNv4 paths into two independently comparable routes

6 Root Causes That Show Up Again and Again

Once the stages above have told you where the problem sits, these six account for most of what's actually wrong.

1. Two VPNs Share an RT On Purpose, But Also Share an IP Address By Accident

SYMPTOMA deliberately shared-RT VPN, set up so two VPN instances can reach each other, only works in one direction.

CAUSELocal cross-import picks the wrong route when two VPN instances on the same PE happen to bind their interfaces to identical IP addresses. The PE prefers the local direct route over the imported BGP route during local route crossing, so the crossed VPN never actually resolves in that direction, even though the RTs match correctly.

FIXGive each VPN instance distinct local IP addressing, then rebuild the affected BGP peer once the addressing changes.

<PE1> display ip interface brief
10GE0/0/1   10.1.1.2/30   up   up   VPN-A
10GE0/0/2   10.1.1.2/30   up   up   VPN-B    // duplicate -- rebind to a distinct subnet

2. RR Configured With policy vpn-target But No Matching Local VPN Instance

SYMPTOMTwo PEs behind a redundant pair of route reflectors can't see each other's VPNv4 routes at all, with nothing obviously wrong at either PE.

CAUSEpolicy vpn-target under ipv4-family vpnv4 tells the RR to apply VPN-Target filtering to what it accepts. If the RR itself has no VPN instance configured for that RT, it silently accepts nothing carrying that Import Target — a filtering feature that only makes sense on a PE, quietly misapplied to a pure route-reflector role.

FIXEither remove policy vpn-target on the RR so it accepts and reflects everything (the common approach for a pure RR), or add a matching VPN instance on the RR purely to give it the RT to match against.

[RR] bgp 100
[RR-bgp] ipv4-family vpnv4
[RR-bgp-af-vpnv4] undo policy vpn-target

3. Cross-Domain Option-B: an ASBR Loopback That Isn't a /32

SYMPTOMAn Option-B VPNv4 route works in one direction across the domain boundary but not the other.

CAUSELDP only allocates labels for /32 host routes by default. If an intermediate ASBR's Loopback is configured with a shorter mask, LDP can't build a label for that FEC, the LSP toward it never completes, and the far PE's otherwise-present VPNv4 route is never installed — because its underlying LSP isn't valid, not because anything in the VPN configuration is wrong.

FIXCorrect the Loopback mask to /32 on the affected ASBR and reset mpls ldp to force re-signaling.

[ASBR1] interface loopback 0
[ASBR1-LoopBack0] ip address 1.1.1.2 32
[ASBR1] reset mpls ldp

4. A Leftover extcommunity-filter Blocks One RT's Reflection Selectively

SYMPTOMThe route reflector accepts a VPNv4 route from one PE, but only some of the RR's other clients ever learn it.

CAUSEAn ip extcommunity-filter referenced by rr-filter under the RR's BGP-VPNv4 view denies that specific RT — often left behind from an earlier, narrower reflection policy that was never revisited when new VPN instances were added to the network.

FIXAdd a permit entry for the RT (or remove the filter reference entirely) and reapply rr-filter.

<RR> display ip extcommunity-filter
index: 10   deny rt : 100:1
[RR] ip extcommunity-filter 1 permit rt 100:1
[RR-bgp-af-vpnv4] undo rr-filter
[RR-bgp-af-vpnv4] rr-filter 1

5. Route Flapping That's Actually a Physical Link Under the LDP/IGP Layer

SYMPTOMA specific VPN prefix flaps continuously even though the VPN configuration, RT and BGP session all check out clean.

CAUSEThe private route rides an LSP whose IGP neighbor and TE tunnel are stable, but the LDP session underneath is bouncing because the physical interface it runs over is repeatedly flapping up and down — something no amount of VPN-layer troubleshooting will ever surface.

FIXWork down from the route type — BGP, then IGP, then LDP/RSVP, then the physical interface — rather than assuming the fault sits in the layer where the symptom is visible; once found, treat it as a physical or optics fault, not a VPN one.

<DeviceA> display mpls ldp session
// LDP session itself shows as bouncing
<DeviceA> display interface 10GE0/0/0
Last physical up time   : 2010-05-20 21:33:42
Last physical down time : 2010-05-20 21:31:58
// physical layer is where the flap actually originates

6. Equal-Cost VPNv4 Paths Share the Same RD, So Failover Waits on IGP

SYMPTOMAfter a PE reboot, downstream PEs take roughly two minutes to relearn a CE's business subnet through the surviving PE, instead of failing over immediately.

CAUSEWhen redundant PEs advertising the same CE prefix all use an identical Route Distinguisher, their VPNv4 routes are treated as the same BGP path rather than two independent equal-cost paths. The route reflectors only forward a new path once they've confirmed the old PE's IGP/BGP session is actually gone, so MPLS VPN convergence rides behind full IGP convergence.

FIXAssign each PE a distinct RD for the VPN instance so both routes exist as independent, comparable paths — one active, one immediately available — or deploy VPN FRR.

[PE3] ip vpn-instance vpn-access
[PE3-vpn-instance-vpn-access] route-distinguisher 22:1
// PE4 keeps its own distinct RD -- PE5/PE6 now hold two independent, comparable paths

Related solution designs

Five Questions That Come Up Constantly

Pulled straight from the field — the ones worth having an answer ready for.

BGP looks Established and LDP looks fine, but a specific VPN prefix still won't cross to the far PE — what's the fastest way to find where it's actually stuck?

Work the chain in order rather than guessing: is the route valid and best in display bgp vpnv4 vpn-instance routing-table (if not, the BGP next hop probably isn't reachable); if valid but not shown as sent, check the outbound policy at the sender and the inbound policy at the receiver; if it's been sent and received, check whether it iterates to a real tunnel (Relay Tunnel Out-Interface) and actually got a private label (Label information); if all of that is clean, the RT Export/Import match is the next and most common place it dies quietly.

The route crosses fine PE1→PE2 but not PE2→PE1 — how can a fault be one-directional?

This almost always means the two directions are actually using different underlying mechanisms that happen to look symmetric in the configuration — a cross-domain Option-B path where only one ASBR's Loopback has the wrong mask, or an IBGP session where only one side is missing peer connect-interface loopback for the session's source interface. Check each direction's path independently rather than assuming a shared root cause.

Export and Import VPN Target look correct on both PEs, but the routes still don't cross — what am I missing?

Confirm the RT match isn't being filtered somewhere between the two PEs rather than at either PE itself — most often a route reflector with policy vpn-target enabled but no local VPN instance for that RT, or a leftover extcommunity-filter tied to rr-filter that predates the current VPN. Both silently drop the route with nothing visible at either PE.

A VPN route flaps continuously even though nobody touched the VPN configuration — where do I actually look?

Below the VPN layer. Confirm the IGP neighbor and the tunnel (LDP or RSVP-TE) carrying that route are themselves stable before assuming anything is wrong with BGP or the VPN instance — an LSP with a short uptime almost always traces back to a flapping physical interface or optics issue one layer further down.

Convergence after a PE failure takes minutes instead of seconds — is that normal for MPLS VPN?

Not if the redundant PEs are supposed to offer two independent equal-cost paths. Check whether they're using the same Route Distinguisher for the VPN instance — if so, their VPNv4 routes are indistinguishable as a single BGP path, and failover has to wait for full IGP convergence before a new path is even visible. Distinct RDs per PE, or VPN FRR, turn that into a near-instant switchover.

Honest Limits of This Note

Honest Limits of This Note

This note is built around the Huawei AR-series router's BGP/MPLS L3VPN fault-classification model and its display bgp vpnv4 / display ip vpn-instance / display mpls lsp commands, plus the field cases behind them. If your PE is a different vendor, the exact commands change, but the underlying logic — RT Export/Import matching, tunnel iteration, route-reflector filtering, RD-driven convergence — carries over directly. It doesn't cover EVPN-based VPN overlays, Option-A/Option-C inter-AS variants in depth, or IPv6 VPN (L3VPNv6) specifics beyond what's noted inline.

Route not crossing, or convergence too slow?

Tell us which PE the route is missing from, or how long failover is actually taking, and we'll help you read the display bgp vpnv4 output.

WhatsApp an engineer →

Related Reading