Optimal Route Reflection: Next Hop Self

Recently, I posted a video short take I did on BGP optimal route reflection. A reader wrote in the comments to that post:

…why can’t Router set next hop self to updates to router E and avoid this suboptimal path?

To answer this question, it is best to return to the scene of the suboptimality—

To describe the problem again: A and C are sending the same route to B, which is a route reflector. B selects the best path from its perspective, which is through B, and sends this route to each of its clients. In this case, E will learn the path with a next hop of A, even though the path through C is closer from E’s perspective. In the video, I discuss several ways to solve this problem; one option I do not talk about is allowing B to set the next hop to itself. Would this work?

Before answering the question, however, it is important to make one observation: I have drawn this network with B as a router in the forwarding path. In many networks, the route reflector is a virtual machine, or a *nix host, and is not capable of forwarding the traffic required to self the next-hop to itself. There are many advantages to intentionally removing the route reflector from the forwarding path. So while setting nexthop-self might work in this situation, it will not work in all situations.

But will it work in this situation? Not necessarily. The shortest path, for D, is through C, rather than through A. B setting its next hop to itself is going to draw E’s traffic towards 100::/64 towards itself, which is still the longer path from E’s perspective. So while there are situations where setting nexthop-self will resolve this problem, this particular network is not one of them.


  1. Harpreet on 10 December 2018 at 1:27 pm

    As always, it was nice explanation. though there seems to be a typo. “B selects the best path from its perspective, which is through B” it should be A 🙂

  2. Gajanan Parwar on 10 December 2018 at 10:39 pm

    Thanks for the inspiration . Very nice to see your articles. It inspires me

  3. José on 18 December 2018 at 8:16 am

    First of all, congratulations for all the good work that you made teaching all of us.

    Thanks for the article; i am working to put this in a network with MP-BGP with VPNv4 and VPNv6 in production; but the only working implementation that i could find for a virtual router is the vMX from Juniper, i was testing the Cisco XRv also, but the Cisco only have this feature for IPv4 family.

    You have some information about some implementation that i can use this with MP-BGP with VPNv4 and VPNv6.