In some scenarios, BGP and the routing table path to a certain destination
prefix show Exit A, but actual traffic leaves through Exit B. Packet forwarding
to a destination takes place from the routing table, and network operators do
expect to see this behavior. However, in most cases, the next hops of prefixes
in the routing table are not directly connected and packet forwarding
eventually takes place based on the next-hop path. Figure
shows that R1
and R2 are two route reflectors, with R6 and R8 as their clients. R6 is
advertising 100.100.100.0/24 to R2 and R1, and both reflect this advertisement
to R8 with a next hop of 172.16.126.6. Now assume that R8 has a BGP policy that
chooses the path for 100.100.100.0/24 from R2 (the upper path) as the best path
that it will install in its routing table. However, in the same router, R8, the
best IGP path to reach 172.16.126.6 (next hop of 100.100.100.0/24) is through
R1 (the bottom path).
Therefore, forwarding of IP packets in a router
eventually happens by looking at the path for the next hop (172.16.126.6) of
the actual path (100.100.100.0/24). In Cisco IOS Software, recursive lookup is
the term used for finding out the path based on the next hop and the actual
prefix. In some cases, more than one recursive lookup must be done to figure
out the actual physical path that packets take to reach the destination.
Debugs and Verification
The show ip bgp
command output in Figure
shows
the output of 100.100.100.0/24 in R8. The next hop is 172.16.126.6. When
traffic is sent to 100.100.100.0/24, it actually is sent to the interface that
provides a better route for 172.16.126.6.
In R8, 172.16.126.6 is the
next hop for 100.100.100.0/24 advertised by R2 and is considered the best
route; therefore, it will be installed in the IP routing table. Figure
shows that the
best way to reach 172.16.126.6, the next hop of 100.100.100.0/24, is through
R1, not through R2.
The highlighted 172.16.18.1 is the next hop for
172.16.126.6 (next hop of 100.100.100.0/24).

Therefore,
all traffic from or through R8 destined for 100.100.100.0/24 will go though
172.16.18.1 (R1).
The output of a
traceroute done from R8 to 100.100.100.1. shows that
traffic flows through 172.16.18.1, which is R1.
Solution
A
router might provide a route to a BGP neighbor but might never be in a
forwarding path to reach that route. This is because packets are forwarded to
the next-hop address of the actual route, which might not be the same router
that gave the route in the first place.
If routing and forwarding paths
need to match, care must be taken in how next-hop addresses are learned through
IGP. To fix the problem shown in Figure
, R8 should have
an IGP path for 172.16.126.6 (next hop of 100.100.100.0/24) through R2.