BGP Basics – advertising networks into BGP

By | May 13, 2014

The first post in this BGP mini-series looked at setting up BGP peering between routers. Now we’ll take things a step further and actually exchange some routing information between those peers. Here’s the network:
bgp basics - exchanging routes

The basic BGP config on each router looks like this:

R1#sh run | s router
router bgp 1
 no synchronization
 bgp log-neighbor-changes
 neighbor 2.2.2.2 remote-as 23
 neighbor 2.2.2.2 ebgp-multihop 2
 neighbor 2.2.2.2 update-source Loopback0
 neighbor 3.3.3.3 remote-as 23
 neighbor 3.3.3.3 ebgp-multihop 2
 neighbor 3.3.3.3 update-source Loopback0
 no auto-summary

R2#sh run | s router
router bgp 23
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.1.1.1 remote-as 1
 neighbor 1.1.1.1 ebgp-multihop 2
 neighbor 1.1.1.1 update-source Loopback0
 neighbor 3.3.3.3 remote-as 23
 neighbor 3.3.3.3 ebgp-multihop 2
 neighbor 3.3.3.3 update-source Loopback0
 no auto-summary

R3#sh run | s router
router bgp 23
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.1.1.1 remote-as 1
 neighbor 1.1.1.1 ebgp-multihop 2
 neighbor 1.1.1.1 update-source Loopback0
 neighbor 2.2.2.2 remote-as 23
 neighbor 2.2.2.2 ebgp-multihop 2
 neighbor 2.2.2.2 update-source Loopback0
 no auto-summary

We’ve now got peering between all three routers, but no routes are being learned yet via BGP. So far only static and connected routes are shown in the routing tables and we can see this on R1:

R1#sh ip bgp neighbors | i BGP
BGP neighbor is 2.2.2.2,  remote AS 23 external link
  BGP version 4, remote router ID 2.2.2.2
  BGP state = Established, up for 05:17:02
  BGP table version 1, neighbor version 1/0
  External BGP neighbor may be up to 2 hops away.
BGP neighbor is 3.3.3.3,  remote AS 23 external link
  BGP version 4, remote router ID 3.3.3.3
  BGP state = Established, up for 05:16:57
  BGP table version 1, neighbor version 1/0
  External BGP neighbor may be up to 2 hops away.

R1#sh ip route
{output omitted}

Gateway of last resort is not set

     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
     2.0.0.0/32 is subnetted, 1 subnets
S       2.2.2.2 [1/0] via 10.0.12.2
     3.0.0.0/32 is subnetted, 1 subnets
S       3.3.3.3 [1/0] via 10.0.13.3
     10.0.0.0/29 is subnetted, 2 subnets
C       10.0.12.0 is directly connected, FastEthernet0/0
C       10.0.13.0 is directly connected, FastEthernet1/0

There are two main methods of advertising routes into BGP – network statements and redistribution.

Network Statements

On R2 we will use a network statement to advertise the 192.168.2.0 /24 network into BGP (note that bgp network statements use subnet masks rather than wildcard masks):

R2(config)#router bgp 23
R2(config-router)#network 192.168.2.0 mask 255.255.255.0

If we check R1’s BGP table we see that it has learned of 192.168.2.0/24 route, also that the best route is via R2, and that the path is through AS23:

R1#sh ip bgp             
BGP table version is 36, local router ID is 1.1.1.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
*  192.168.2.0      3.3.3.3                                0 23 i
*>                  2.2.2.2                  0             0 23 i

The best route is now also in R1’s routing table (note the administrative distance of 20 for external BGP):

R1#sh ip route bgp
B    192.168.2.0/24 [20/0] via 2.2.2.2, 00:25:55

Redistribution

On R3 we will redistribute connected networks so that we advertise the 192.168.3.0 /24 network into BGP:

R3(config)#router bgp 23         
R3(config-router)#redistribute connected

This works but is a little clumsy. We can now see the 192.168.3.0 /24 network in R1’s routing table, but we also see the 10.0.23.0 /29 transit network between R2 and R3:

R1#show ip route bgp
     10.0.0.0/29 is subnetted, 3 subnets
B       10.0.23.0 [20/0] via 3.3.3.3, 00:01:22
B    192.168.2.0/24 [20/0] via 2.2.2.2, 00:20:27
B    192.168.3.0/24 [20/0] via 3.3.3.3, 00:01:22

Plus we also get some RIB failure messages relating to R3’s other connected networks:

R1#sh ip bgp                                                       
BGP table version is 8, local router ID is 1.1.1.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
r  3.3.3.3/32       2.2.2.2                                0 23 ?
r>                  3.3.3.3                  0             0 23 ?
r  10.0.13.0/29     2.2.2.2                                0 23 ?
r>                  3.3.3.3                  0             0 23 ?
*  10.0.23.0/29     2.2.2.2                                0 23 ?
*>                  3.3.3.3                  0             0 23 ?
*  192.168.2.0      3.3.3.3                                0 23 i
*>                  2.2.2.2                  0             0 23 i
*  192.168.3.0      2.2.2.2                                0 23 ?
*>                  3.3.3.3                  0             0 23 ?

This is because R1 already has a static route to 3.3.3.3/32 and is directly connected to 10.0.13.0/29.

To tidy this up we’ll filter routes using a route map that references an access list to match only the 192.168.3.0/24 network:

R3(config)#route-map R3RouteMap permit 10
R3(config-route-map)#match ip address 10

R3(config)#access-list 10 permit 192.168.3.0 0.0.0.255

R3(config)#router bgp 23 
R3(config-router)#redistribute connected route-map R3RouteMap

Now R1 only learns the route to 192.168.3.0/24 from R3, as the route map is preventing the other networks from being advertised:

R1#sh ip bgp
BGP table version is 17, local router ID is 1.1.1.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
*  192.168.2.0      3.3.3.3                                0 23 i
*>                  2.2.2.2                  0             0 23 i
*  192.168.3.0      2.2.2.2                                0 23 ?
*>                  3.3.3.3                  0             0 23 ?
 

R1#sh ip route bgp
B    192.168.2.0/24 [20/0] via 2.2.2.2, 02:20:54
B    192.168.3.0/24 [20/0] via 3.3.3.3, 02:16:40

As well being less clumsy, this is much more like a real-world scenario where an ISP would be filtering the routes it advertises to a customer or vice versa.

I hope this has been a useful explanation. The next post in this series looks at modifying BGP attributes to inlfuence route selection.

Thanks for reading, and good luck with your CCNP studies!

Rich

Follow Rich on Twitter

2 thoughts on “BGP Basics – advertising networks into BGP

  1. Abbass

    hello Rich,
    little confused. Aren’t R2 and R3 are iBGP peers as they are on same AS? on configuration , you used ebgp-multihop.

    Reply
    1. Chuck

      Hello Abbass, I believe that it is just for illustrative purposes that Rich had chosen to use loop-backs for all bgp neighbor-ship, that’s the reason for using ebgp-multihop. However, ebgp-multhop is only used for external-bgp connectivity, where there is no direct physical connection between two ebgp neighbors.

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *