{"id":4952,"date":"2026-03-04T11:48:58","date_gmt":"2026-03-04T11:48:58","guid":{"rendered":"https:\/\/geekmungus.co.uk\/?p=4952"},"modified":"2026-03-04T11:48:58","modified_gmt":"2026-03-04T11:48:58","slug":"bgp-test-lab-part-9-internal-bgp-ibgp-three-router-configuration-route-reflector-rr","status":"publish","type":"post","link":"https:\/\/geekmungus.co.uk\/?p=4952","title":{"rendered":"BGP Test Lab &#8211; Part 9 &#8211; Internal BGP (iBGP) &#8211; Three Router Configuration (Route Reflector, RR)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">We&#8217;re now going to investigate Route Reflectors and how and when they can be used. Route Reflectors are for use within&nbsp;iBGP&nbsp;only, they are never used for&nbsp;eBGP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A Route Reflector (RR) is:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">An&nbsp;iBGP&nbsp;router, that is specifically allowed to re-advertise&nbsp;iBGP-learned&nbsp;routes to other&nbsp;iBGP&nbsp;peers (within the AS), and is designed to remove&nbsp;the iBGP&nbsp;full-mesh requirement (amongst other things).<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">If you remember,&nbsp;iBGP has&nbsp;the rule:&nbsp;\u201cDo&nbsp;not re-advertise routes learned from another&nbsp;iBGP peer.\u201d&nbsp;If you use Route Reflectors&nbsp;RRs, these are the exception to this rule. Using Route Reflectors can help your network scale up to 10+ routers without reaching a significant overhead. For example, the&nbsp;iBGP&nbsp;full-mesh requirements means that the number of sessions required increases very rapidly, and thus the complexity (potential blast radius), memory and CPU usage to maintain these states.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Routers<\/th><th>Sessions<\/th><\/tr><\/thead><tbody><tr><td>5<\/td><td>10<\/td><\/tr><tr><td>10<\/td><td>45<\/td><\/tr><tr><td>50<\/td><td>1,225<\/td><\/tr><tr><td>100<\/td><td>4,950<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So what about loops? How does the Route Reflector avoid introducing routes where iBGP has not other mechanism other than the rule: \u201cDo not re-advertise routes learned from another iBGP peer.\u201d (a.k.a the Split Horizon iBGP Rule) Essentially it uses the Router ID of the original iBGP source, if a router sees its own ID it drops the route to ensure it doesn&#8217;t add loop.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Topology<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">To show how the Route Reflectors work, we&#8217;re adding another Router into the topology, this Router, Router E, is going to be an addition to the AS Blue (65001), with a single connection to Router A.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"795\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-14-1024x795.png\" alt=\"\" class=\"wp-image-4953\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-14-1024x795.png 1024w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-14-300x233.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-14-768x596.png 768w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-14.png 1047w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">However, due to the limitations of Router E and the link between them, Router E will not be able to form a full-mesh (via the Loopback IPs of all the routers) like the other Routers can, it will only have a single BGP Neighbour peer as Router A.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The implication of this is that some routes from Router G and Router B, namely their LAN networks will be unable to be learned by Router E, because of the&nbsp;iBGP&nbsp;(Split Horizon) rule: \u201cDo not re-advertise routes learned from another&nbsp;iBGP peer.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is where the Route Reflector mechanism can come in to safely distribute the routes learned within the AS Blue (65001) even to a Router such as Router E which is effectively a Router on a stick.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-PrepareTopology\">Prepare Topology<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Before we can get on with the configuration, we need to perform some basic configuration steps to get Router E ready and connected to the network.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-RouterE\">Router E<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>create vlan \"RE-RA\"\nconfigure vlan \"RE-RA\" ipaddress 192.168.100.34\/30\nenable ipforwarding vlan \"RE-RA\"\nconfigure vlan \"RE-RA\" add port 1 untagged\n\ncreate vlan \"RouterE-LAN1\" tag 1007\nconfigure vlan \"RouterE-LAN1\" ipaddress 10.1.3.1\/24\nenable ipforwarding \"RouterE-LAN1\"\nenable loopback-mode vlan \"RouterE-LAN1\"\n\ncreate vlan \"RouterE-LP\"\nconfigure vlan RouterE-LP tag 1115\nenable loopback-mode vlan RouterE-LP\nconfigure vlan RouterE-LP ipaddress 1.1.1.5 255.255.255.255\nenable ipforwarding vlan RouterE-LP\n\nconfigure ospf routerid 1.1.1.5\nenable ospf\nconfigure ospf add vlan RE-RA area 0.0.0.0 link-type point-to-point \nconfigure ospf add vlan RouterE-LP area 0.0.0.0 passive\n\nconfigure bgp AS-number 65001\nconfigure bgp routerid 1.1.1.5\nenable bgp\n\ncreate bgp neighbor 1.1.1.1 remote-AS-number 65001\nconfigure bgp neighbor 1.1.1.1 source-interface ipaddress 1.1.1.5\nenable bgp neighbor 1.1.1.1\n\nconfigure bgp add network 10.1.3.0\/24<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Router A<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>create vlan \"RA-RE\"\nconfigure vlan \"RA-RE\" ipaddress 192.168.100.33\/30\nenable ipforwarding vlan \"RA-RE\"\nconfigure vlan \"RA-RE\" add port 1 untagged\n\nconfigure ospf add vlan RA-RE area 0.0.0.0 link-type point-to-point  \n\ncreate bgp neighbor 1.1.1.5 remote-AS-number 65001\nconfigure bgp neighbor 1.1.1.5 source-interface ipaddress 1.1.1.1\nenable bgp neighbor 1.1.1.5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">We are setting up the OSPF adjacency additionally to ensure that Router E when it learns a route via&nbsp;iBGP&nbsp;it has the necessary internal underlay routing information available to ensure the routes become &#8220;feasible&#8221; to BGP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before going further ensure that Router E and Router A can see each other via OSPF and BGP, and Router E is showing the routes learned via OSPF, you&#8217;ll notice however it&#8217;s not seeing some of the AS Blue (65001) LAN networks, namely Router G&#8217;s and Router B&#8217;s, this is because these routes are being learned via&nbsp;iBGP, and thus not re-advertised.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-RouteReflector\">Route Reflector<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The Route Reflector is just a way to ensure that all the member routers of the AS that exchange routes via&nbsp;iBGP can&nbsp;get the updates even if there is no &#8220;full-mesh&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;<strong>Route Reflector (RR)<\/strong>&nbsp;is the centralised hub (Router) which collects and then redistributes routing information within the AS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is then a&nbsp;<strong>Route Reflector Client (RRC)<\/strong>&nbsp;which is one of the&nbsp;iBGP Routers&nbsp;within the AS that must peer directly with the Route Reflector (RR) and will receive (some or) all of its (iBGP) routes from the Route Reflector.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, there is a&nbsp;<strong>Non-Client&nbsp;iBGP&nbsp;Peer<\/strong>&nbsp;which is a router within the AS that has not been configured as either an RR or an RRC.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And this is the key thing, each router does not need to be &#8220;fully-meshed&#8221; will all the other routers within the AS, which is one of the requirements&nbsp;of iBGP, it instead should just be peered to the Route Reflector (RR) Router, however you may have a need for on odd occasions it to be peered with other Routers directly, but will still get the full list of routes (via iBGP) as long as it can peer directly with the Route Reflector.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-KeyPoints\">Key Points<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Key Point 1, when we say peered directly, this doesn&#8217;t necessarily mean directly, i.e. we don&#8217;t mean it must be physically connected, adjacent at Layer 2 or one hop away, we mean there must&nbsp;be a&nbsp;direct BGP Neighbour peering\/session between the RR and the RRC, and this peering can flow across an intermediate router (if required). What you can&#8217;t have is Router A BGP peering with Router B, which BGP peers with Router C and have Router C be a RR and Router A be a RRC of Router C; that is not a direct BGP peering in BGP terms; therefore only Router B would be the RRC, and thus get the routes, Router A in this case would not!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Key Point 2, although you can have client BGP Routers (RRC) that peer directly to other client BGP Routers (RRC), it is not recommended, it makes it difficult to diagnose problems or understand behaviour in different failure scenarios. Essentially a Route Reflector Client (RRC) Router should only peer with the Route Reflector (RR) Router and not directly to other Route Reflector Client (RRC) Routers; it doesn&#8217;t need to (typically), all the routes an RRC would to operate need would be delivered to it by the Route Reflector.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Key Point 3, a single Route Reflector (RR) is a single point of failure within an AS, even if you have redundant paths within your network, if your Route Reflector becomes unavailable your network will partially or fully fail. Therefore, you must have redundant Router Reflectors (RR) Routers within your AS, and therefore each Route Reflector Client (RRC) must peer directly with these two Routers (acting as Route Reflectors RR); additionally these Route Reflector (RR) Routers must be configured with the same Cluster ID, so they act as if they were one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Key Point 4, where you have a Non-Client&nbsp;iBGP&nbsp;Peer that would need to be peered directly to all the other&nbsp;iBGP Routers&nbsp;within the AS (for it to essentially be a full-mesh), and to get all the routes, but you must consider the Route Reflector Advertising Rules below when considering this design.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-RouteReflectorAdvertisingRules\">Route Reflector Advertising Rules<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A route learned from a\u00a0<strong>Non-Client\u00a0iBGP Peer<\/strong>\u00a0is advertised to all\u00a0<strong>RR Clients<\/strong>, but not to other\u00a0<strong>Non-Client\u00a0iBGP Peers<\/strong>.\u00a0Note that if it did advertise to Non-Client iBGP Peers it would break the\u00a0iBGP Split\u00a0Horizon rule.<\/li>\n\n\n\n<li>A route learned from an\u00a0<strong>RR Client (RRC)<\/strong>\u00a0is advertised to both\u00a0<strong>RR Clients (RRC)<\/strong>\u00a0and\u00a0<strong>Non-Client\u00a0iBGP Peers<\/strong>.\u00a0Note that here, even the RR Client (RRC) that originated the route will also get the route (from the Route Reflector), but, it will discard it because it seems that route is from itself.<\/li>\n\n\n\n<li>A route learned from an\u00a0<strong>eBGP\u00a0Peer (Neighbour)<\/strong>\u00a0is advertised to both\u00a0<strong>RR Clients<\/strong>\u00a0and\u00a0<strong>Non-Client\u00a0iBGP\u00a0Peers<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-AdditionalConcepts\">Additional Concepts<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Route Reflector and Route Reflector Clients are manually configured, so you need to choose which are which.<\/li>\n\n\n\n<li>Multiple Route Reflectors can be configured for redundancy, and potentially load balancing, in a production environment this is very much what you&#8217;d need to do.<\/li>\n\n\n\n<li>The Originator ID and Cluster List are examined to prevent routing loops.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-Example1-SingleRouteReflector(RR)\">Example 1 &#8211; Single Route Reflector (RR)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ll start with a simple single Route Reflector configuration. In our example, as mentioned before, we&#8217;ve got ourselves a problem. Router E is connected only via a single physical link to Router A. In our example we&#8217;re pretending that Router E does not have the capability to create a full-mesh, firstly it has only a single physical link, although as we found in earlier articles, this doesn&#8217;t matter, because the actual peering should be made based on something like a Loopback IP Address (e.g. the RouterID) and then carry these Loopback IP Addresses around with an IGP (like OSPF or EIGRP).&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;re not attempting to give an example of a production network here, this is just a lab to explore Route Reflectors and see how they work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So, back to it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If we didn&#8217;t configure a Router Reflector (RR) on Router A, Router E would not learn all the routes it needed to. It would only learn the routes directly from Router A, it would not learn for example the Router G LAN (10.1.2.0\/24) or Router B LAN (10.1.1.0\/24), because these would be learned by Router A by&nbsp;iBGP&nbsp;and as we know, the split horizon rule would kick in:&nbsp;\u201cDo&nbsp;not re-advertise routes learned from another&nbsp;iBGP&nbsp;peer&#8221;; thus meaning Router E would not learn these routes!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"808\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-15-1024x808.png\" alt=\"\" class=\"wp-image-4954\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-15-1024x808.png 1024w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-15-300x237.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-15-768x606.png 768w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-15.png 1041w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-VerifyBrokenState\">Verify Broken State<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">So let&#8217;s use Route Reflectors and see what can happen. But before that if we example the Router E routes we see the following, which confirms the problem. We are only seeing the Router A LAN (10.1.0.0\/24), but not Router G and Router B&#8217;s LANs (10.1.1.0\/24) and (10.1.2.0\/24). But we are seeing the routes learned via&nbsp;eBGP, because remember the&nbsp;iBGP&nbsp;split horizon rule, and in this case the 10.2.0.0\/24, 10.2.1.0\/24 and 10.2.2.0\/24 routes were learned via&nbsp;eBGP, not&nbsp;iBGP, thus not subject to the rule.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"721\" height=\"187\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-16.png\" alt=\"\" class=\"wp-image-4955\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-16.png 721w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-16-300x78.png 300w\" sizes=\"auto, (max-width: 721px) 100vw, 721px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Additionally, if we look at Router G&#8217;s routes we see another problem, and that is that Router E&#8217;s LAN (10.1.3.0\/24) is not showing up in the route table either, so although traffic going via Router A (or Router A&#8217;s LAN) can reach Router E&#8217;s LAN (10.1.3.0\/24) none of the other routers within the AS Blue (Router G and Router B) can, because&#8230;.you guessed it the&nbsp;iBGP split&nbsp;horizon rule.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So let&#8217;s get this broken configuration working.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-RouterA.1\">Router A<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Adding a route reflector client is pretty easy, you configure the Route Reflector Client on the Route Reflector router, in this case Router A. You don&#8217;t need to configure anything on Route Reflector Client (i.e. Router E in this example), as long as you have the&nbsp;iBGP neighbour&nbsp;peer configured, you&#8217;re all set.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>configure bgp neighbor 1.1.1.5 route-reflector-client<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now on Router A, notice the &#8220;r&#8221; next to the Router E BGP Neighbour peer: 1.1.1.5, that means it is considered a Route Reflector client.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"676\" height=\"212\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-17.png\" alt=\"\" class=\"wp-image-4956\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-17.png 676w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-17-300x94.png 300w\" sizes=\"auto, (max-width: 676px) 100vw, 676px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-Verify\">Verify<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">And when we check on Router E, after the Route Reflector is configured with the Route Reflector Client, we see all the routes from AS Blue as expected.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"755\" height=\"303\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-18.png\" alt=\"\" class=\"wp-image-4957\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-18.png 755w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-18-300x120.png 300w\" sizes=\"auto, (max-width: 755px) 100vw, 755px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">But, what about the other way round? Is Router G for example seeing Router E&#8217;s LAN (10.1.3.0\/24). The answer is yes it is (an explanation of why will follow in a moment).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"737\" height=\"353\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-19.png\" alt=\"\" class=\"wp-image-4958\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-19.png 737w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-19-300x144.png 300w\" sizes=\"auto, (max-width: 737px) 100vw, 737px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So how and why is this route from Router E actually appearing? Well, remember the Route Reflector advertising rules mentions earlier, its rule 2:&nbsp;<em>&#8220;A route learned from an&nbsp;<strong>RR Client (RRC)<\/strong>&nbsp;is advertised to both&nbsp;<strong>RR Clients (RRC)<\/strong>&nbsp;and&nbsp;<strong>Non-Client&nbsp;iBGP&nbsp;Peers<\/strong>.&#8221;<\/em>&nbsp;So this is why, Router A (Route Reflector) learned the route from Router E (a Route Reflector Client), and therefore has advertised it on to Router G (and B), because even though these two routers are Non-Client iBGP Peers (thus not Route Reflector clients), they get the routes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But remember, the rules of&nbsp;iBGP still&nbsp;apply for Router G and Router B, because they are fully meshed with Router A, the Route Reflector doesn&#8217;t change anything for a Non-Client&nbsp;iBGP Peer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-Example2-TwoRouteReflector(RR)-RedundantPair\">Example 2 &#8211; Two Route Reflector (RR) &#8211; Redundant Pair<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ll go a bit deeper now. So what we&#8217;re going to do is make Router G a Route Reflector Client too, so we can see a redundant pair working.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Due to the limitations of our lab, we&#8217;re going to have a slightly weird, and useless from Router E&#8217;s point of view, because if Router A was to go down, sure Router B would take over (to provide service for Router G), but Router E would be left isolated. Anyway, we&#8217;re going to set up Router A and Router B as Route Reflectors, configured as a redundant pair.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"816\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-20-1024x816.png\" alt=\"\" class=\"wp-image-4959\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-20-1024x816.png 1024w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-20-300x239.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-20-768x612.png 768w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-20.png 1036w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">But there is a key point with this:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A Route Reflector Client to be a client of a Route Reflector must peer with it (the RR) as a BGP Neighbour.<\/li>\n\n\n\n<li>And that therefore means&#8230;.that if you have a redundant pair of Route Reflectors, each Route Reflector Client must be peered directly with both of the Route Reflector routers.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">What that means for our example is that oddly Router E will need to be configured with a BGP Neighbour (peering) to Router B (and vice versa).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Additionally, this is a bit of an odd configuration because with only 3 Routers (well, 4 if you could Router E), we don&#8217;t need Route Reflectors because we have a full mesh configured, but if you say had 10 routers, configuring the full-mesh would need 45 BGP Neighbour peering, which be a lot of configuration, and potentially a lot of links!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-RouterE.1\">Router E<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Add a BGP Neighbour peering to Router B.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>create bgp neighbor 1.1.1.2 remote-AS-number 65001\nconfigure bgp neighbor 1.1.1.2 source-interface ipaddress 1.1.1.5\nenable bgp neighbor 1.1.1.2<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-RouterB\">Router B<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Add a BGP Neighbour peering to Router E.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>create bgp neighbor 1.1.1.5 remote-AS-number 65001\nconfigure bgp neighbor 1.1.1.5 source-interface ipaddress 1.1.1.2\nenable bgp neighbor 1.1.1.5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">However, before we can go any further, we must ensure that the two Route Reflectors will work as a redundant pair. To do this we specify the BGP Cluster ID.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-RouterA.2\">Router A<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Configure Router E and Router G as Route Reflector clients, and configure the BGP Cluster ID so that the two Route Reflectors (Router A and B) won&#8217;t step on each other&#8217;s toes!<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>disable bgp\nconfigure bgp cluster-id 1\nenable bgp\n\nconfigure bgp neighbor 1.1.1.5 route-reflector-client\nconfigure bgp neighbor 1.1.1.7 route-reflector-client<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-RouterB.1\">Router B<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Configure Router E and Router G as Route Reflector clients, and configure the BGP Cluster ID so that the two Route Reflectors (Router A and B) won&#8217;t step on each other&#8217;s toes!<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>disable bgp\nconfigure bgp cluster-id 1\nenable bgp\n\nconfigure bgp neighbor 1.1.1.5 route-reflector-client\nconfigure bgp neighbor 1.1.1.7 route-reflector-client<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-Verify.1\">Verify<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Now we can see that Router E has two BGP Neighbour&nbsp;peerings.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"681\" height=\"279\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-21.png\" alt=\"\" class=\"wp-image-4960\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-21.png 681w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-21-300x123.png 300w\" sizes=\"auto, (max-width: 681px) 100vw, 681px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-BreakRouterA-SimulateFailureofRouteReflector\">Break Router A &#8211; Simulate Failure of Route Reflector<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ll break things by disabling BGP on Router A, which will simulate the router going down, but working around the limitations of our lab environment i.e. Router E doesn&#8217;t have a direct physical link to Router B, so we can&#8217;t just reboot Router A; to simulate a failure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We issue a &#8220;disable&nbsp;bgp&#8221; on Router A, then if we check the BGP Neighbours (peers) and BGP routes on Router E, we see the following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"678\" height=\"278\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-22.png\" alt=\"\" class=\"wp-image-4961\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-22.png 678w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-22-300x123.png 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"746\" height=\"288\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-23.png\" alt=\"\" class=\"wp-image-4962\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-23.png 746w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-23-300x116.png 300w\" sizes=\"auto, (max-width: 746px) 100vw, 746px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Notice on the BGP routes, we can see 10.1.1.0\/24 and 10.1.2.0\/24 appearing, this is good, these are the LANs of Router B and Router G respectively, this shows that Router E is still learning the routes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The network route we are most interested in is 10.1.2.0\/24 (Router G&#8217;s LAN), we want to confirm, if this is route has been learnt via Route Reflector, it should have been because remembering if the&nbsp;iBGP&nbsp;split horizon rule, Router B wouldn&#8217;t have advertised this route to Router E&nbsp;via iBGP, because that would break the&nbsp;iBGP Split&nbsp;Horizon rule, so the fact the route appears on Router E means the Route Reflector is still working, but let&#8217;s confirm that with the following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"481\" height=\"601\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-24.png\" alt=\"\" class=\"wp-image-4963\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-24.png 481w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-24-240x300.png 240w\" sizes=\"auto, (max-width: 481px) 100vw, 481px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ah ha! Router E is learning via Route Reflector, you can see the &#8220;RR Cluster ID: 0.0.0.1&#8221; listed against the 10.1.2.0\/24 route, that means it has learned this via the Route Reflector.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the Route Reflector was not working, Router E would not have learned this route, because of&nbsp;the iBGP Split&nbsp;Horizon rule.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-Conclusion\">Conclusion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ve explored the use of Route Reflectors in this article, a mechanism that can be used within growing and large networks to work around the need for a &#8220;full-mesh&#8221;&nbsp;of iBGP&nbsp;routers, which at scale can become unmanageable and sometimes unfeasible to suitably configure. Care must be taken however to ensure that the Route Reflector does not become a single point of failure, but this can be achieved with having multiple Router Reflector routers configured (and use the same Cluster ID) so that they can act as a redundant configuration, with no single point of failure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A quick note on peer groups, you can configure a set of neighbour parameters and then apply them to multiple neighbours. You do not need to configure the common parameters individually on each neighbour.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart9InternalBGP(iBGP)ThreeRouterConfiguration(RouteReflector,RR)-AdditionalInformation\">Additional Information<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=9-9Tw8yIqPM\">https:\/\/www.youtube.com\/watch?v=9-9Tw8yIqPM<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/documentation.extremenetworks.com\/exos_31.3\/GUID-AB4DE6E9-271E-4D62-BF51-BFF7EAC2AB23.shtml\">https:\/\/documentation.extremenetworks.com\/exos_31.3\/GUID-AB4DE6E9-271E-4D62-BF51-BFF7EAC2AB23.shtml<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>We&#8217;re now going to investigate Route Reflectors and how and when they can be used. Route Reflectors are for use within&nbsp;iBGP&nbsp;only, they are never used for&nbsp;eBGP. A Route Reflector (RR) is: An&nbsp;iBGP&nbsp;router, that is specifically allowed to re-advertise&nbsp;iBGP-learned&nbsp;routes to other&nbsp;iBGP&nbsp;peers (within the AS), and is designed to remove&nbsp;the iBGP&nbsp;full-mesh requirement (amongst other things). If you &#8230; <a title=\"BGP Test Lab &#8211; Part 9 &#8211; Internal BGP (iBGP) &#8211; Three Router Configuration (Route Reflector, RR)\" class=\"read-more\" href=\"https:\/\/geekmungus.co.uk\/?p=4952\" aria-label=\"Read more about BGP Test Lab &#8211; Part 9 &#8211; Internal BGP (iBGP) &#8211; Three Router Configuration (Route Reflector, RR)\">Read more<\/a><\/p>\n","protected":false},"author":4,"featured_media":4783,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[62,41,17],"tags":[],"class_list":["post-4952","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bgp","category-extreme-networks","category-networking"],"_links":{"self":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/4952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4952"}],"version-history":[{"count":1,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/4952\/revisions"}],"predecessor-version":[{"id":4964,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/4952\/revisions\/4964"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/media\/4783"}],"wp:attachment":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}