Cluster-Id

Scenario to verify BGP cluster-id parameter configuration for Route Reflectors.

In iBGP networks, the split-horizon rule prevents a router from re-announcing routes learned from one iBGP peer to another iBGP peer. This creates a full-mesh requirement that does not scale well in large networks. Route Reflectors (RR) solve this problem by reflecting routes between their clients, eliminating the need for a full mesh.

The cluster-id parameter identifies a cluster of Route Reflectors. By default, the cluster-id equals the router-id of the RR. When you have redundant Route Reflectors serving the same clients, you should configure them with the same cluster-id to prevent routing loops. The cluster-id is included in the CLUSTER_LIST attribute of reflected routes, and if a router receives a route with its own cluster-id in the list, it discards the route to prevent loops.

Test BGP Cluster ID

Description

This test demonstrates the effect of cluster-id and route reflection in iBGP. First, without route-reflector configuration, the iBGP split-horizon rule prevents DUT0 from re-announcing routes learned from DUT1 to DUT2. DUT1 has redistribute connected configured, so it announces its network 10.10.0.0/24. Then, after configuring DUT0 as a Route Reflector with cluster-id 10.10.10.1 and marking both neighbors as route-reflector-client, the route gets reflected and DUT2 receives it with the cluster-id in the attributes.

Scenario

Note

First we configure iBGP without route-reflector to observe the split-horizon rule.

Step 1: Set the following configuration in DUT0 :

set interfaces ethernet eth0 address 10.10.0.1/24
set interfaces ethernet eth1 address 20.20.0.1/24
set protocols bgp 100 neighbor client1 remote-address 10.10.0.2
set protocols bgp 100 neighbor client1 remote-as 100
set protocols bgp 100 neighbor client2 remote-address 20.20.0.2
set protocols bgp 100 neighbor client2 remote-as 100
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 2: Set the following configuration in DUT1 :

set interfaces ethernet eth0 address 10.10.0.2/24
set protocols bgp 100 neighbor rr remote-address 10.10.0.1
set protocols bgp 100 neighbor rr remote-as 100
set protocols bgp 100 redistribute connected
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 3: Set the following configuration in DUT2 :

set interfaces ethernet eth1 address 20.20.0.2/24
set protocols bgp 100 neighbor rr remote-address 20.20.0.1
set protocols bgp 100 neighbor rr remote-as 100
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Attention

Verify iBGP sessions establish between DUT0 and both clients.

Step 4: Run command protocols bgp show ip summary at DUT0 and check if output matches the following regular expressions:

10.10.0.2.*Established[\s\S]+20.20.0.2.*Established
Show output
IPv4 Unicast Summary:
BGP router identifier 20.20.0.1, local AS number 100 VRF default vrf-id 0
BGP table version 1
RIB entries 1, using 128 bytes of memory
Peers 2, using 47 KiB of memory

Neighbor        LocalAddr       V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down        State   PfxRcd   PfxSnt Desc
10.10.0.2       10.10.0.1       4        100         4         4        1    0    0 00:00:02  Established        1        0 FRRouting/10.4.1
20.20.0.2       20.20.0.1       4        100         3         4        1    0    0 00:00:01  Established        0        0 FRRouting/10.4.1

Total number of neighbors 2

Attention

Verify DUT0 receives route 10.10.0.0/24 from DUT1 via redistribute connected.

Step 5: Run command protocols bgp show ip at DUT0 and check if output matches the following regular expressions:

10.10.0.0/24.*10.10.0.2
Show output
BGP table version is 1, local router ID is 20.20.0.1, vrf id 0
Default local pref 100, local AS 100
local address -
Status codes:  s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *ui 10.10.0.0/24     10.10.0.2                0    100      0 ?

Displayed 1 routes and 1 total paths

Note

Without route-reflector, DUT2 does NOT receive the route due to iBGP split-horizon rule.

Step 6: Run command protocols bgp show ip at DUT2 and check if output does not match the following regular expressions:

10.10.0.0/24
Show output
No BGP prefixes displayed, 0 exist

Note

Now we configure DUT0 as Route Reflector with cluster-id and mark neighbors as clients.

Step 7: Modify the following configuration lines in DUT0 :

set protocols bgp 100 neighbor client1 route-reflector-client
set protocols bgp 100 neighbor client2 route-reflector-client
set protocols bgp 100 parameters cluster-id 10.10.10.1

Attention

Verify iBGP sessions remain established after configuration change.

Step 8: Run command protocols bgp show ip summary at DUT0 and check if output matches the following regular expressions:

10.10.0.2.*Established[\s\S]+20.20.0.2.*Established
Show output
IPv4 Unicast Summary:
BGP router identifier 20.20.0.1, local AS number 100 VRF default vrf-id 0
BGP table version 3
RIB entries 1, using 128 bytes of memory
Peers 2, using 47 KiB of memory

Neighbor        LocalAddr       V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down        State   PfxRcd   PfxSnt Desc
10.10.0.2       10.10.0.1       4        100         8         9        3    0    0 00:00:03  Established        1        1 FRRouting/10.4.1
20.20.0.2       20.20.0.1       4        100         6         9        0    0    0 00:00:01  Established        0        0 FRRouting/10.4.1

Total number of neighbors 2

Attention

Verify DUT2 now receives the reflected route 10.10.0.0/24.

Step 9: Run command protocols bgp show ip at DUT2 and check if output matches the following regular expressions:

10.10.0.0/24.*10.10.0.2
Show output
BGP table version is 0, local router ID is 20.20.0.2, vrf id 0
Default local pref 100, local AS 100
local address -
Status codes:  s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
   i 10.10.0.0/24     10.10.0.2                0    100      0 ?

Displayed 1 routes and 1 total paths

Attention

Verify the route on DUT2 contains the cluster-id 10.10.10.1 in attributes.

Step 10: Run command protocols bgp show ip 10.10.0.0/24 at DUT2 and check if output contains the following tokens:

Originator: 10.10.0.2, Cluster list: 10.10.10.1
Show output
BGP routing table entry for 10.10.0.0/24, version 0
Paths: (1 available, no best path)
  Not advertised to any peer
  Local
    10.10.0.2 (inaccessible, import-check enabled) from 20.20.0.1 (10.10.0.2)
      Origin incomplete, metric 0, localpref 100, invalid, internal
      Originator: 10.10.0.2, Cluster list: 10.10.10.1
      Last update: Thu Mar  5 14:54:26 2026