BGP_Reflector_Top2

A router configure to be a BGP Route Reflector can take a route learned from one iBGP Peer and advertise it to another iBGP Peer, which basically is the equivalent of “no ip split-horizon” only BGP style!

iBGP Peers that send routes to the route reflector are called “clients”, and when the Reflector receives routes from clients, it reflects the routes to other clients all the while the clients have no idea they are getting their routes from a Route Reflector.

Now as seen in the Topology I’ve changed it so the Spoke routers Peer to the Hub to avoid creating a full mesh network, and the Hub will reflect routes advertised from R2 to R3 and vice versa. Also note that R2 does not have an interface in the Ethernet segment to R4 in this lab.

A BGP Speaker with a Peering does not HAVE to be a client, these are known as “nonclients”, however they do require a TCP connection to every other router in the AS (which we are trying to avoid in the first place with the reflector).

So let’s get into the configuration, all the Peerings are already configured, so I’ll start by configuring 4.4.4.4/32 to be advertised by R4, verify its in the ip bgp table, and move along to configuring R1 as the Route Reflector:

R4

R4(config-router)#network 4.4.4.4 mask 255.255.255.255
R4(config-router)#^Z
R4#
*Apr 16 08:22:56.783: %SYS-5-CONFIG_I: Configured from console by console
R4#sh ip bgp
BGP table version is 2, local router ID is 44.4.4.4
Status codes: s suppressed, d damped, h history, * valid, > best, i – internal,
              r RIB-failure, S Stale, m multipath, b backup-path, x best-external, f RT-Filter
Origin codes: i – IGP, e – EGP, ? – incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 4.4.4.4/32       0.0.0.0                        0                        32768 i
R4#

R3

R3#sh ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i – internal,
              r RIB-failure, S Stale
Origin codes: i – IGP, e – EGP, ? – incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 4.4.4.4/32       172.12.23.4              0                                 0 4 i
R3#

R1

R1#sh ip bgp
BGP table version is 1, local router ID is 172.16.11.1
Status codes: s suppressed, d damped, h history, * valid, > best, i – internal,
              r RIB-failure, S Stale
Origin codes: i – IGP, e – EGP, ? – incomplete

   Network          Next Hop            Metric LocPrf Weight Path
* i4.4.4.4/32       172.12.23.4              0           100                 0 4 i
R1#sh ip bgp 4.4.4.4
BGP routing table entry for 4.4.4.4/32, version 0
Paths: (1 available, no best path)
  Not advertised to any peer
  4
    172.12.23.4 (inaccessible) from 172.12.123.3 (3.3.3.3)
      Origin IGP, metric 0, localpref 100, valid, internal
R1#

So there are a few things going on here. First we note the route is valid, but does not have it’s fellow >, and we need to see both of those for a route in the ip bgp table. Also it shows “Not advertied to any peer router” which indicates BGP Split-Horizon in effect for that route, and finally (inaccessible) meaning it does not have a route to the destination network.

Also we have the expected BGP behavior of an iBGP Peer not advertising its interface as the Next Hop due to the route coming from a non-local AS, which we would either do some static routing, or the easier option issuing “neighbor 172.12.123.1 next-hop-self” on R3 so routes from remote AS’s are reachable.

So lets fix that issue:

R3(config)#router bgp 123
R3(config-router)#neighbor 172.12.123.1 next-hop-self
R3(config-router)#
ASR#1
[Resuming connection 1 to r1 … ]

R1#clear ip bgp * soft in
R1#sh ip bgp
BGP table version is 2, local router ID is 172.16.11.1
Status codes: s suppressed, d damped, h history, * valid, > best, i – internal,
              r RIB-failure, S Stale
Origin codes: i – IGP, e – EGP, ? – incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*>i4.4.4.4/32       172.12.123.3             0    100      0 4 i
R1#

Now we are on the right track here, however:

R1#sh ip bgp 4.4.4.4
BGP routing table entry for 4.4.4.4/32, version 2
Paths: (1 available, best #1, table Default-IP-Routing-Table)
  Not advertised to any peer
  4
    172.12.123.3 from 172.12.123.3 (3.3.3.3)
      Origin IGP, metric 0, localpref 100, valid, internal, best
R1#

Split Horizon is still blocking the route from propagating to iBGP Peers, so I won’t bother with R2’s output, because there is nothing to show as indicated. However, lets advertise it’s loopback as well here and verify it on R1 so we can see if we can get it both routes advertising both ways:

R2#
R2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R2(config)#router bgp 123
R2(config-router)#network 2.2.2.2 mask 255.255.255.255
R2(config-router)#^Z
R2#wr
Building configuration…

ASR#1
[Resuming connection 1 to r1 … ]

R1#sh ip bgp
BGP table version is 3, local router ID is 172.16.11.1
Status codes: s suppressed, d damped, h history, * valid, > best, i – internal,
              r RIB-failure, S Stale
Origin codes: i – IGP, e – EGP, ? – incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*>i2.2.2.2/32       172.12.123.2             0    100      0 i
*>i4.4.4.4/32       172.12.123.3             0    100      0 4 i
R1#sh ip bgp 2.2.2.2

BGP routing table entry for 2.2.2.2/32, version 3
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Flag: 0x820
  Not advertised to any peer
  Local
    172.12.123.2 from 172.12.123.2 (2.2.2.2)
      Origin IGP, metric 0, localpref 100, valid, internal, best
R1#

To solve this we could Peer R2 and R3 to make a full mesh, but we want to stay away from that, because of the scalability issues if we add 20 or 30 more routers into the mix in a real world or CCIE Lab environment.

So for that very reason, we will choose option 2, configuring R1 as a Route Reflector, and I’ll have to include some ? output to point out the most obvious command in IOS help:

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#router bgp 123
R1(config-router)#neighbor 172.12.123.2 ?
  activate                 Enable the Address Family for this Neighbor
  advertise-map            specify route-map for conditional advertisement
  advertisement-interval   Minimum interval between sending BGP routing updates
  allowas-in               Accept as-path with my AS present in it
  capability               Advertise capability to the peer
  default-originate        Originate default route to this neighbor
  description              Neighbor specific description
  disable-connected-check  One-hop away EBGP peer using loopback address
  distribute-list          Filter updates to/from this neighbor
  dmzlink-bw               Propagate the DMZ link bandwidth
  ebgp-multihop            Allow EBGP neighbors not on directly connected
                           networks
  fall-over                session fall on peer route lost
  filter-list              Establish BGP filters
  inherit                  Inherit a template
  local-as                 Specify a local-as number
  maximum-prefix           Maximum number of prefixes accepted from this peer
  next-hop-self            Disable the next hop calculation for this neighbor
  next-hop-unchanged       Propagate the iBGP paths’s next hop unchanged for
                           this neighbor
  password                 Set a password
  peer-group               Member of the peer-group
  prefix-list              Filter updates to/from this neighbor
  remote-as                Specify a BGP neighbor
  remove-private-as        Remove private AS number from outbound updates
  route-map                Apply route map to neighbor
  route-reflector-client   Configure a neighbor as Route Reflector client
  send-community           Send Community attribute to this neighbor
  shutdown                 Administratively shut down this neighbor
  soft-reconfiguration     Per neighbor soft reconfiguration
  timers                   BGP per neighbor timers
  translate-update         Translate Update to MBGP format
  transport                Transport options
  ttl-security             BGP ttl security check
  unsuppress-map           Route-map to selectively unsuppress suppressed
                           routes
  update-source            Source of routing updates
  version                  Set the BGP version to match a neighbor
  weight                   Set default weight for routes from this neighbor

R1(config-router)#neighbor 172.12.123.2 route-reflector-client
R1(config-router)#
*Mar 31 13:47:18.106: %BGP-5-ADJCHANGE: neighbor 172.12.123.2 Down RR client config change
R1(config-router)#
*Mar 31 13:47:20.330: %BGP-5-ADJCHANGE: neighbor 172.12.123.2 Up
R1(config-router)#neighbor 172.12.123.3 route-reflector-client
R1(config-router)#
*Mar 31 13:47:42.627: %BGP-5-ADJCHANGE: neighbor 172.12.123.3 Down RR client config change
R1(config-router)#
*Mar 31 13:47:44.850: %BGP-5-ADJCHANGE: neighbor 172.12.123.3 Up
R1(config-router)#

As usual, we see the neighbor command come into play here, and the captain obvious of commands to configure this to be a reflector to that neighbor “route-reflector-client” which is pretty self explanatory.

As can be seen, it needs to be configured for each “client” in the network, and does drop the Adjacency to that Neighbor very briefly, as seen in the time stamps it was down for about 2 seconds before the neighbor was back up.

So with that being configured, lets take a look around at our clients, and over at R4:

R2#sh ip bgp
BGP table version is 5, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i – internal,
              r RIB-failure, S Stale
Origin codes: i – IGP, e – EGP, ? – incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 2.2.2.2/32       0.0.0.0                  0         32768 i
*>i4.4.4.4/32       172.12.123.3             0    100      0 4 i
R2#
ASR#3
[Resuming connection 3 to r3 … ]

*Mar  2 18:24:30.291: %SYS-5-CONFIG_I: Configured from console by console[OK]
R3#sh ip bgp
BGP table version is 5, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i – internal,
              r RIB-failure, S Stale
Origin codes: i – IGP, e – EGP, ? – incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*>i2.2.2.2/32       172.12.123.2             0          100               0 i
*> 4.4.4.4/32       172.12.23.4                0                               0 4 i
R3#
ASR#4
[Resuming connection 4 to r4 … ]

R4#sh ip bgp
BGP table version is 3, local router ID is 44.4.4.4
Status codes: s suppressed, d damped, h history, * valid, > best, i – internal,
              r RIB-failure, S Stale, m multipath, b backup-path, x best-external, f RT-Filter
Origin codes: i – IGP, e – EGP, ? – incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 2.2.2.2/32       172.12.23.3                            0 123 i
*> 4.4.4.4/32       0.0.0.0                  0         32768 i
R4#

Looks good all around!

Now the verification command for this is “sh ip bgp neighbor” which I will spare the output, but it will be found under each neighbors individual segments as “Route-Reflector Client”, as and you can also see “Last reset due to RR client config change” – So remember to view this information use “sh ip bgp nei” !

So one more topic to cover before moving onto the next topic, is that Route Reflectors do not reflect routes to everyone, and how the Route Reflectors handles a route update depending on the type of BGP router that sent it.

Here is a list to memorize to save time troubleshooting issues caused be these behaviors:

  • Updates from Route Reflector clients are sent to all clients and nonclient Peers
  • Updates sent from eBGP Peers are sent to all client and nonclient Peers
  • Updates from nonclient Peers are sent to all clients but not all nonclient Peers

So if you have nonclient peers in a Route Reflector topology, it is a red flag to watch out for that behavior of the Route reflector, eBGP and clients are good to go but nonclients will cause some chaos in the network.

That is all for that, onto Prefix lists as I believe the final BGP Topic outside of maybe some miscellaneous / helpful information 🙂 Almost there!