connormcf.com / blog
blog | work

FRRouting: nexthop_set failed, resetting connection

Calendar
Person cm
Tag frr, routing, linux

Fixing nexthop_set failed with Free Range Routing BGP

I've been using FRRouting for routers running BGP for a bit now and it's worked pretty nicely - however I've ran into some odd issues at times.

Typically when I use it, I'll manage the network interfaces with FRR itself to keep everything in a nice single configuration file opposed to jumping between it and NetworkManager.

I ran into some issues where some customers could establish a BGP session without a problem, however others would fail to establish the session and this error would show up on our side.

bgpd[3367]: [VX6SM-8YE5W][EC 33554460] 2001:0db8::1: nexthop_set failed, resetting connection - intf 0x2462550
bgpd[3367]: [NQGZV-Y3W62][EC 100663299] bgp_connect_success: bgp_getsockname(): failed for peer 2001:0db8::1, fd 69
bgpd[3367]: [V1CHF-JSGRR] %NOTIFICATION: sent to neighbor 2001:0db8::1 5/0 (Neighbor Events Error/Unspecific) 0 bytes

Your peers may see something along the lines of this:

Last error:       Received: Finite state machine error

The issue is that when using FRR to manage your interfaces, you lose NetworkManager being nice and adding IPv6 link-local addresses to your interfaces for you. In turn, FRR internally doesn't know where to look for the nexthop which results in this error.

Solution

The solution is nice and simple, add the link-local address to the interfaces you're using in your FRR configuration. There are tools online [1] you can use to convert the MAC address of your NIC to an IPv6 link-local address using EUI-64.

Once you have it, add it to your configuration file. For example, if the MAC address for interface em1 was 00:53:00:be:ee:ef - you would do as follows:

interface em1
  ! [..]
  ipv6 address fe80::253:0ff:febe:eeef/64
exit

Restart or reload the FRR configuration and it should be sorted.