What is BGP Route Reflector Configuration : Explained
Friday, September 8, 2023
Avoiding network loops in a network is of utmost importance. iBGP uses the split horizon rule to avoid loops. However, due to the Split horizon rule, all the iBGP neighbours must be in a full mesh topology.But why should the iBGP neighbours be in a full mesh topology?
Split Horizon states that routers that learn BGP Routes from iBGP peers should not advertise that to another iBGP peer.
Let’s understand this with the help of an example: –

Imagine a topology given in the figure.
R2 and R3 are iBGP peers, R3 and R4 are iBGP peers, R2 and R1 are into eBGP.
R2 advertises a route received from R1 to R3, but R3 shall not advertise the routes to R4 because R4 and R3 are also iBGP peers, and the SPLIT HORIZON rule applies to them.
If R4 wants to learn that particular route, R4 and R2 must also be an iBGP peer.
Every router has to be an iBGP peer with the router that learns about the routes from the eBGP peer.
So, the updated topology would look like this-

Hence, in the case of iBGP, we need to make full mesh neighborship so that each router learns routes received from eBGP.
Creating a full mesh neighborship in case of a small network looks fine. However, as the network grows, the full mesh becomes impractical due to the sheer number of connections required, leading to scalability and management issues.
How to avoid full Mesh Neighborship?
Route Reflector is the method that helps to avoid the full mesh neighborship and reduce the number of BGP peering within an AS.
In the case of route reflector, routers get configured as Client and Server. The server is responsible for advertising the traffic to all the clients in a topology.
Topology with and without route reflector configured would look like this:-


Now each router needs to have an iBGP peering with just a server.
What is the role of routers in BGP Route Reflector Configuration?
The role of routers in BGP Route Reflector Configuration is as follows-
Route Reflector (RR): The Route Reflector, also known as the Server, is responsible for reflecting BGP routes. The server receives BGP updates, stores them, and then reflects those updates to other routers accordingly. It also communicates with non-client routers directly or through client routers.
Client Routers: These are BGP routers that form a peering relationship with a Route Reflector. They advertise their routes to the Route Reflector, which then reflects these routes to other clients. Client routers do not peer directly with each other; instead, they peer with the Route Reflector. We need to configure the router as a client.
Non-Client Routers: These are BGP routers that do not peer directly with other non-client routers. They receive BGP routes from Route Reflectors, either directly or through client routers.
Based on the types of routers, we can have the following cases: -
Case – 1: If a route comes from a Client, the Route Reflector reflects it to all other clients and non-clients.

Case – 2: If a route comes from a non-client, the Route reflector reflects it to all the clients but not the non-clients.

Case – 3: If a route comes from an eBGP peer, the Route reflector reflects it to all the clients and non-clients.

Configuration

Let us first configure BGP-
R1(config)#router bgp 100
R1(config-router)#neighbor 192.168.23.2 remote-as 100
R1(config-router)#neighbor 192.168.24.2 remote-as 100
R2(config)#router bgp 100
R2(config-router)#neighbor 192.168.23.1 remote-as 100
R2(config-router)#neighbor 192.168.35.2 remote-as 100
R3(config)#router bgp 100
R3(config-router)#neighbor 192.168.35.1 remote-as 100
R3(config-router)#neighbor 192.168.45.2 remote-as 100
R4(config)#router bgp 100
R4(config-router)#neighbor 192.168.45.1 remote-as 100 R4(config-router)#neighbor 192.168.24.2 remote-as 100
Let’s add a loopback 200.1.1.1 at R1, add it to BGP, and see if R3 can get this network in its BGP table.
R1(config)#interface loopback 1
R1(config-if)#ip address 200.1.1.1 255.255.255.0
R1(config-if)#exit R1(config)#router bgp 100
R1(config-router)#network 200.1.1.0
Let’s verify BGP for R2, R3 and R4
R2#show ip bgp
BGP table version is 2, local router ID is 192.168.35.1
Status codes: s suppressed, d damped, h history, * valid, > best, i – internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
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 200.1.1.0 192.168.23.1 0 100 0 i
R2#show ip route
Codes: L – local, C – connected, S – static, R – RIP, M – mobile, B – BGP
D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area
N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2
E1 – OSPF external type 1, E2 – OSPF external type 2
i – IS-IS, su – IS-IS summary, L1 – IS-IS level-1, L2 – IS-IS level-2
ia – IS-IS inter area, * – candidate default, U – per-user static route
o – ODR, P – periodic downloaded static route, H – NHRP, l – LISP
+ – replicated route, % – next hop override
Gateway of last resort is not set
192.168.23.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.23.0/24 is directly connected, FastEthernet0/0
L 192.168.23.2/32 is directly connected, FastEthernet0/0
192.168.35.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.35.0/24 is directly connected, FastEthernet1/0
L 192.168.35.1/32 is directly connected, FastEthernet1/0
B 200.1.1.0/24 [200/0] via 192.168.23.1, 00:02:50
R3#show ip bgp
R3#
R3#show ip route
Codes: L – local, C – connected, S – static, R – RIP, M – mobile, B – BGP
D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area
N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2
E1 – OSPF external type 1, E2 – OSPF external type 2
i – IS-IS, su – IS-IS summary, L1 – IS-IS level-1, L2 – IS-IS level-2
ia – IS-IS inter area, * – candidate default, U – per-user static route
o – ODR, P – periodic downloaded static route, H – NHRP, l – LISP
+ – replicated route, % – next hop override
Gateway of last resort is not set
192.168.35.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.35.0/24 is directly connected, FastEthernet1/0
L 192.168.35.2/32 is directly connected, FastEthernet1/0
192.168.45.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.45.0/24 is directly connected, FastEthernet0/0
L 192.168.45.1/32 is directly connected, FastEthernet0/0
Loopback route of R1 i.e., 200.1.1.0/24 is not present in R3 since it is not a peer with R1.
R4#show ip bgp
BGP table version is 2, local router ID is 192.168.45.2
Status codes: s suppressed, d damped, h history, * valid, > best, i – internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
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 200.1.1.0 192.168.24.1 0 100 0 i
R4#show ip route
Codes: L – local, C – connected, S – static, R – RIP, M – mobile, B – BGP
D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area
N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2
E1 – OSPF external type 1, E2 – OSPF external type 2
i – IS-IS, su – IS-IS summary, L1 – IS-IS level-1, L2 – IS-IS level-2
ia – IS-IS inter area, * – candidate default, U – per-user static route
o – ODR, P – periodic downloaded static route, H – NHRP, l – LISP
+ – replicated route, % – next hop override
Gateway of last resort is not set
192.168.24.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.24.0/24 is directly connected, FastEthernet1/0
L 192.168.24.2/32 is directly connected, FastEthernet1/0
192.168.45.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.45.0/24 is directly connected, FastEthernet0/0
L 192.168.45.2/32 is directly connected, FastEthernet0/0
B 200.1.1.0/24 [200/0] via 192.168.24.1, 00:05:55
Route Reflector Configuration: -
Let us configure Route Reflector in a way that R1 and R3 become the clients.
R2(config)#router bgp 100
R2(config-router)#neighbor 192.168.23.1 route-reflector-client
R2(config-router)#neighbor 192.168.35.2 route-reflector-client
R4(config)#router bgp 100
R4(config-router)#neighbor 192.168.24.1 route-reflector-client
R4(config-router)#neighbor 192.168.45.1 route-reflector-client
Verification: -
R3#show ip bgp
BGP table version is 1, local router ID is 192.168.45.1
Status codes: s suppressed, d damped, h history, * valid, > best, i – internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
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 200.1.1.0 192.168.24.1 0 100 0 i
R3#show ip bgp 200.1.1.1
BGP routing table entry for 200.1.1.0/24, version 0
Paths: (2 available, no best path)
Not advertised to any peer
Refresh Epoch 2
Local
192.168.24.1 (inaccessible) from 192.168.45.2 (192.168.45.2)
Origin IGP, metric 0, localpref 100, valid, internal
Originator: 192.168.24.1, Cluster list: 192.168.45.2
rx pathid: 0, tx pathid: 0
Refresh Epoch 2
Local
192.168.23.1 (inaccessible) from 192.168.35.1 (192.168.35.1)
Origin IGP, metric 0, localpref 100, valid, internal
Originator: 192.168.24.1, Cluster list: 192.168.35.1
rx pathid: 0, tx pathid: 0
See the magic of Route Reflector. We can now see 200.1.1.0 in the BGP and routing table of R3.
In this way, we can get rid of full mesh neighborship using the concept of route reflector.