BGP Next Hop Self

One potential issue with iBGP is that it doesn’t change the next hop IP address. Sometimes this can cause reachability issues. Let’s look at an example:

BGP Next Hop Self Demo Topology

Above we have R1 and R2 in AS 12 running iBGP. R3 is in AS 3 and we use eBGP between R2 and R3. Once we advertise network 3.3.3.0 /24 on R3 in BGP then R2 will learn this prefix and stores it in its BGP table, the next hop IP adress will be 192.168.23.3.

Once R1 learns about prefix 3.3.3.0 /24 then the next hop IP address will remain 192.168.23.3. When R1 doesn’t know how to reach this IP address then it will fail to install 3.3.3.0 /24 in its routing table.

Let’s take a look at the configuration, I’ll show you two methods how we can deal with this issue.

Configuration

Here’s the BGP configuraton that we will use:

R1(config)#router bgp 12
R1(config-router)#neighbor 192.168.12.2 remote-as 12
R2(config)#router bgp 12
R2(config-router)#neighbor 192.168.12.1 remote-as 12
R2(config-router)#neighbor 192.168.23.3 remote-as 3
R3(config)#router bgp 3
R3(config-router)#neighbor 192.168.23.2 remote-as 12
R3(config-router)#network 3.3.3.0 mask 255.255.255.0

The configuration is pretty straight forward. We use iBGP between R1/R2 and eBGP between R2/R3. On R3 we advertised 3.3.3.0 /24 in BGP. Let’s take a look at the BGP tables:

R2#show ip bgp
BGP table version is 2, local router ID is 192.168.23.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
*> 3.3.3.0/24       192.168.23.3             0             0 3 i

R2 has installed 3.3.3.0 /24 in its BGP table and it is a valid route, the next hop is 192.168.23.3. Let’s check R1:

R1#show ip bgp
BGP table version is 1, local router ID is 192.168.12.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
* i3.3.3.0/24       192.168.23.3             0    100      0 3 i

R1 learns the prefix but it’s unable to install it in the routing table:

R1#show ip route bgp

The problem here is that the next hop IP address is 192.168.23.3. Does R1 have any clue how to reach this address?

R1#show ip route
Codes: 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

Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, FastEthernet0/0

R1 doesn’t know so it’s impossible to install 3.3.3.0 /24 in the routing table. How can we fix this? I’ll show you two different methods.

Advertise Network

The first solution is simple, we can advertise the network in iBGP (or an IGP if you use one) so that R1 is able to reach the next hop. Let’s advertise 192.168.23.0 /24 in BGP:

R2(config)#router bgp 12
R2(config-router)#network 192.168.23.0 mask 255.255.255.0

Now take a look at R1:

R1#show ip bgp
BGP table version is 3, local router ID is 192.168.12.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
*>i3.3.3.0/24       192.168.23.3             0    100      0 3 i
*>i192.168.23.0     192.168.12.2             0    100      0 i

R1 learns about 192.168.23.0 /24 so now it knows how to reach the next hop for 3.3.3.0 /24. It can now install this network in the routing table:

R1#show ip route bgp
     3.0.0.0/24 is subnetted, 1 subnets
B       3.3.3.0 [200/0] via 192.168.23.3, 00:16:20
B    192.168.23.0/24 [200/0] via 192.168.12.2, 00:16:25

Configurations

Want to take a look for yourself? Here you will find the configuration of each device.

R1

hostname R1
!
interface fastEthernet0/0
 ip address 192.168.12.1 255.255.255.0
!
router bgp 12
 neighbor 192.168.12.2 remote-as 12
!
end

R2

hostname R2
!
interface fastEthernet1/0
 ip address 192.168.12.2 255.255.255.0
!
interface fastEthernet0/1
 ip address 192.168.23.1 255.255.255.0
!
router bgp 12
 neighbor 192.168.12.1 remote-as 12
 neighbor 192.168.23.3 remote-as 3
 neighbor 192.168.12.1 next-hop-self
 network 192.168.23.0 mask 255.255.255.0
!
end

R3

hostname R3
!
interface fastEthernet0/0
 ip address 192.168.23.3 255.255.255.0
!
router bgp 3
 neighbor 192.168.23.2 remote-as 12
 network 3.3.3.0 mask 255.255.255.0
!
end


This will work but there is another solution that is easier. Let’s clean up before we continue:

R2(config)#router bgp 12
R2(config-router)#no network 192.168.23.0 mask 255.255.255.0

Now we can try something else…

We're Sorry, Full Content Access is for Members Only...

If you like to keep on reading, Become a Member Now! Here is why:

  • Learn any CCNA, CCNP and CCIE R&S Topic. Explained As Simple As Possible.
  • Try for Just $1. The Best Dollar You've Ever Spent on Your Cisco Career!
  • Full Access to our 662 Lessons. More Lessons Added Every Week!
  • Content created by Rene Molenaar (CCIE #41726)

519 Sign Ups in the last 30 days

satisfaction-guaranteed
100% Satisfaction Guaranteed!
You may cancel your monthly membership at any time.
No Questions Asked!

Forum Replies

  1. Nicholas,
    The reason for this is why BGP is different from other routing protocols. In fact, it is legitimate to view BGP not as a routing protocol at all, but instead as an application that supplies you with what’s called NLRI (Network Layer Reachability Information). Think of it this way: While routing protocols tell you HOW to get somewhere (they are always concerned with the next hop on a hop-by-hop basis), BGP tells you WHERE you need to go, but not how. It is up to the router to figure out how to get to the destination supplied by BGP, by looking at i

    ... Continue reading in our forum

  2. Hi Hoan,

    iBGP uses split horizon which means that it won’t advertise prefixes to iBGP neighbors that is has learned from other iBGP neighbors. You can read more about it here:

    Internal BGP explained

    Rene

  3. Hello Brian

    It’s nice to see how you are working through the problem and we can “read your thoughts” along the way.

    So, having answered your own original question, here’s the question that I’ll try to answer:

    You must remember one of the fundamental laws of rou

    ... Continue reading in our forum

  4. OMG!

    So I can apply that rule to routes? Meaning as long as it can get there it will be added just not reachable because it knows how to get there but not the way back.

    That does make perfect sense…gosh… I should have thought about that or at least posed it as a question. I was thinking that it probably had to do with some rule I had learned at some point about TCP/IP and traffic movement but just didn’t think of what was right in front of me. I hate when I do that but that happens a lot lol…

    Ok now that makes sense and I can put it in a nice little box and label it lol… thanks!

  5. Yeah, so to summarise:

    Learned from eBGP -> Advertise to eBGP -> Next-hop-self automatic

    Learned from eBGP -> Advertise to iBGP -> “Next-hop-self” required

    Learned from iBGP -> Advertise to iBGP -> “Next-hop-self all” required

48 more replies! Ask a question or join the discussion by visiting our Community Forum