BGP Route Reflectors — Scaling iBGP Beyond Full-Mesh
How Route Reflectors break the iBGP full-mesh requirement, letting one router re-advertise iBGP routes to clients. Cluster-id, hierarchical RRs, redundant RR design, and the loop-prevention attributes ORIGINATOR_ID and CLUSTER_LIST.
- iBGP has a **full-mesh rule**: every iBGP router must peer with every other iBGP router in the AS (because iBGP doesn't re-advertise routes learned from another iBGP peer).
- **Route Reflectors** break the rule. An RR takes iBGP routes from one client and re-advertises them to other clients. N routers → N peerings to the RR instead of N(N−1)/2 in full mesh.
- Loop prevention: routes carry **ORIGINATOR_ID** (originating RR) and **CLUSTER_LIST** (which RR clusters the route traversed). Reflectors drop routes whose lists include their own cluster-id.
The one-sentence mental model
iBGP is broken by default at scale. Every internal router must talk to every other → N routers = N(N−1)/2 iBGP sessions. At 100 routers that’s 4,950 sessions. Route Reflectors solve it: designate one (or a few) as reflectors, everyone peers only with the reflectors, RRs relay routes between clients.
The rule that causes the pain
Split-horizon rule for iBGP: a router that learns a route via iBGP will NOT re-advertise it to other iBGP peers.
This prevents iBGP loops (there’s no AS-path prepending inside an AS to detect loops via path). But it forces every iBGP router to hear every route directly from every other, which means a full mesh.
Route Reflectors — the exception
A Route Reflector (RR) is an iBGP router configured to violate the split-horizon rule in a controlled way. When it learns a route from an iBGP peer that is marked as a client, it re-advertises that route to other clients and non-client iBGP peers.
Roles:
- RR (Route Reflector) — does the re-advertisement
- Client — an iBGP router that peers only with the RR (not with every other iBGP router)
- Non-client — a normal iBGP router that isn’t a client of this RR (typically another RR or an iBGP router in a different cluster)
RR advertisement rules:
- Route from eBGP → advertise to clients + non-clients (normal iBGP behavior)
- Route from a client → advertise to all other clients + non-clients (this is the special reflection)
- Route from a non-client → advertise to clients only (not to other non-clients — prevents loops)
Config
router bgp 65001
neighbor 10.0.0.10 remote-as 65001
neighbor 10.0.0.10 route-reflector-client
neighbor 10.0.0.11 remote-as 65001
neighbor 10.0.0.11 route-reflector-client
neighbor 10.0.0.12 remote-as 65001 ! non-client (another RR)
Adding route-reflector-client under a neighbor makes that neighbor a client of this RR. Clients don’t need any special config — they just peer with the RR as normal iBGP.
Cluster-ID for redundant RRs
For redundancy you deploy two RRs in the same location. Both must have the same cluster-id so their reflected routes are seen as coming from one logical cluster.
router bgp 65001
bgp cluster-id 1.1.1.1
By default, cluster-id = RR’s router-id. Set it explicitly when running redundant RRs so both RRs use the same cluster-id.
Loop prevention attributes
Without full-mesh’s AS-path loop check, RR needs its own loop prevention:
- ORIGINATOR_ID — the router-id of the router that first advertised the route into iBGP. If a route comes back to the originating router, it drops it.
- CLUSTER_LIST — list of cluster-ids the route has traversed. An RR checks its own cluster-id against the list; if present, drops the route (already traversed my cluster, would loop).
Both attributes are added by RRs on reflection. Non-RR routers don’t touch them.
Hierarchical RR design
Big networks build hierarchies of RRs:
- Top-tier RRs peer with each other in a full mesh (small set).
- Regional RRs are clients of top-tier RRs, and have local clients under them.
- Edge routers peer only with their regional RR.
Cluster-ids are per-tier or per-region. Loop prevention still holds because CLUSTER_LIST accumulates as you go up the hierarchy.
Alternatives to RRs
- BGP Confederations — split the AS into sub-ASes, each running its own full-mesh iBGP, with eBGP-like peerings between sub-ASes. Less common, more complex.
- Full mesh — still valid for < ~30 routers.
Common exam / real-world mistakes
- Deploying RRs without setting cluster-id on redundant pair. Each RR uses its own router-id as cluster-id → reflected routes look like separate clusters → loops possible during transient states.
- Making an RR a client of another RR. Confusing role model — an RR should peer with other RRs as non-clients (regular iBGP), not as clients.
- Adding a new iBGP router but forgetting to make it a client of the RR. New router won’t get any iBGP routes; nothing looks broken until traffic patterns shift.
- Missing
next-hop-selfon eBGP-facing routers. eBGP next-hops don’t auto-recurse across the AS. Withoutnext-hop-self, iBGP-received routes have unreachable next-hops. - Confusing route-reflection direction. Client → RR is a normal iBGP session. RR → client re-advertises reflected routes. The
route-reflector-clientcommand goes on the RR, not the client.
Verifying
show ip bgp neighbors 10.0.0.10 ! look for "Route reflector client: Yes"
show ip bgp <prefix> ! look for Originator ID and Cluster list
show ip bgp summary ! session count reduced vs full mesh
Cheat strip
Problem iBGP split-horizon → full mesh N(N-1)/2 sessions
Solution Route Reflector — re-advertises routes between clients
Roles RR (does reflection) | Client | Non-client
Config neighbor X route-reflector-client (on the RR)
Cluster bgp cluster-id X.X.X.X (same on redundant RR pair)
Loop prevent ORIGINATOR_ID + CLUSTER_LIST attributes
RR drops routes whose CLUSTER_LIST includes its cluster-id
Design Simple: single RR pair per site
Hierarchical: top-tier RRs + regional RRs + edge clients
Alternative Confederations (rare)
Gotcha remember next-hop-self on eBGP borders
redundant RRs need same cluster-id
Practice — quick check
A scenario each round. Take your time — there's a Next button whether you're right or wrong.
BGP Communities — Tags for Traffic Engineering + Well-Known Values
How BGP communities tag prefixes with metadata that policy uses across ASes. Standard vs extended communities, the four well-known values (no-export, no-advertise, no-export-subconfed, internet), and typical ISP tag patterns.
Cisco Zone-Based Firewall (ZBFW) — Zones, Zone-Pairs, Policy-Maps
How Cisco's Zone-Based Firewall models a router as a set of security zones with policy-maps controlling traffic between them. Zone-pairs, class-based policy, the self zone, and typical enterprise deployments.
Want this drilled into reflex?
1:1 weekly sessions, live feedback on your labs, and US interview prep — built around the CCNP® exam blueprint. Free first session. No card on file until you decide.
Related topics
BGP Basics
Definitive CCNP-level BGP guide — autonomous systems, eBGP vs iBGP, path-vector routing, neighbor states, full best-path selection process, attributes deep dive (AS_PATH, LOCAL_PREF, MED, communities), route reflectors, RPKI, 8 worked scenarios, and the BGP debug workflow.
IP ConnectivityBGP Communities — Tags for Traffic Engineering + Well-Known Values
How BGP communities tag prefixes with metadata that policy uses across ASes. Standard vs extended communities, the four well-known values (no-export, no-advertise, no-export-subconfed, internet), and typical ISP tag patterns.
IP ConnectivityBGP Best-Path Selection — The Full 13-Step Order
The complete BGP path-selection algorithm CCNP ENCOR expects you to recite. Every step in order, with the tie-breaker mnemonic and a worked example for the top three most-common decision points.
Get the free CCNA 12-week roadmap
You're already reading up on BGP Route Reflectors — Scaling iBGP Beyond Full-Mesh. The roadmap is the order I recommend studying every CCNA topic in — with what to lab each week and where BGP Route Reflectors — Scaling iBGP Beyond Full-Mesh fits. A written personal reply, not an autoresponder. Expect it within one business day.
Personal reply from a senior network engineer. No third-party tracking. Unsubscribe any time.
