BGP next-hop self behavior changed from 7.20

Hi all

i have a network with a simple set of routers where ospf redistribute the loopback addresses between all nodes and two nodes act as iBGP route reflectors and as border router with our internet supplier.

On rr-clients nodes our private customer addresses are advertised to the reflectors via ibgp and reflectors advertise back the default route received from eBGP to the rr-clients.

You can find a subset of the bgp configuration of route reflectors.

/routing bgp template
add afi=ip as=4201201000 input.filter=bgp-in-from-external name=EBGP-LEPIDA-IPv4 output.filter-chain=bgp-out-to-external .network=ip-customer-static .redistribute=static,vpn router-id=100.100.0.60

add afi=ip as=4201201000 input.filter=bgp-in-from-ibgp name=IBGP-IPv4 nexthop-choice=force-self output.default-originate=if-installed .filter-chain=bgp-out-to-ibgp .network=ip-customer-static .redistribute=static,vpn router-id=100.100.0.60

add afi=ip as=4201201000 input.filter=bgp-in-from-clients name=IBGP-RR-CLIENT-IPv4 nexthop-choice=force-self output.default-originate=if-installed .filter-chain=bgp-out-to-clients .network=ip-customer-static .redistribute=static,vpn router-id=100.100.0.60

/routing bgp connection
add afi=ip as=4201201000 connect=yes disabled=no input.filter=bgp-in-from-external listen=yes local.address=100.64.248.14 .role=ebgp multihop=yes name=EPEER-LEPIDA-A nexthop-choice=force-self output.default-originate=if-installed .filter-chain=bgp-out-to-external .network=ip-customer-static .redistribute=static,vpn remote.address=100.64.248.9/32 .as=64999 .port=179 router-id=100.100.0.60 routing-table=main templates=EBGP-LEPIDA-IPv4

add afi=ip as=4201201000 connect=yes disabled=no input.filter=bgp-in-from-clients listen=yes local.address=100.100.0.60 .role=ibgp-rr name=PEER-CLIENT-PE-VIGORSO-CST nexthop-choice=force-self output.default-originate=if-installed .filter-chain=bgp-out-to-clients .network=ip-customer-static .redistribute=static,vpn remote.address=100.100.0.32/32 .as=4201201000 .port=179 router-id=100.100.0.60 routing-table=main templates=IBGP-RR-CLIENT-IPv4

add afi=ip as=4201201000 connect=yes disabled=no input.filter=bgp-in-from-clients listen=yes local.address=100.100.0.60 .role=ibgp-rr name=PEER-CLIENT-PE-CALDERINO-CST nexthop-choice=force-self output.default-originate=if-installed .filter-chain=bgp-out-to-clients .network=ip-customer-static .redistribute=static,vpn remote.address=100.100.0.30/32 .as=4201201000 .port=179 router-id=100.100.0.60 routing-table=main templates=IBGP-RR-CLIENT-IPv4

Actually the route reflectors run on 7.19.4 and when i tried to update them to the 7.20 i noticed that the behavior of next-hop-self had been changed from 7.19.
Now all next-hop addresses for all routes advertised to ibgp-rr-clients are overwritten with RR self address also the reflected routes.

In the documentation i find the following sentence:

Also note that the next-hop is not changed on route reflection, except when it's set in the filter.

My filters do not modify next-hop.

With this issue the data between clients are forced to passthrough the route reflectors itself.

I see that in 7.20 was added the following note

*) bgp - fixed nexthop force-self for IPv4 and IPv6;

maybe the behavior of force-self had been modified to change all next-hop address instead of only ebgp received routes.

In our network design we cannot use other nexthop-choise options because we cannot use igp to resolve external nexthops, we always used next-hop force-self also from 6.x routeros version to overcome this problem.

A possible work around could be using default as next-hop choice option and marking ebgp received routes in input and set with a filter on ibgp sessions the correct gateway ,
but it doesn't seem like an optimal solution, expecially when there was a specifically option in bgp sessions.

I am available if you need others informations.

Thanks and regards

2 Likes