Hi,
Upgraded a route reflector from 1.4 (202305300317), which used FRR 8.5.1, to 1.5 (202403020021), which uses FRR 9.1.0. The configuration was converted perfectly and things simply just worked, expect that IPv6 nexthops are altered when imported and subsequently reflected to route reflector clients.
Sessions are all iBGP, so I wouldn’t have expected the next hop to have been altered. Each participating router simply has an IPv6 address in a subnet common to the participating routers. I hope the following explains our setup:
A ----- RR ----- B
A and B are route reflector clients, with multiprotocol prefixes being exchanged over an IPv4 BGP session. RR is VyOS, where it has an IPv4 loopback IP assigned to ‘lo’ and it has it’s IPv6 IP in a bridge interface. This bridge is connected to other routers that also have their IPs in the same /64 subnet. A and B set the nexthop of IPv6 prefixes as their IPv6 address when sending these to RR.
This worked perfectly in VyOS 1.4 from May last year but VyOS 1.5 is changing the next hop address when reflecting these prefixes to other members.
Herewith an example of an IPv6 default gateway having been accepted by RR:
3710, (Received from a RR-client)
2c0f:dead:beef:0:51:49:31:48 from 51.49.31.48 (51.49.31.48)
Origin IGP, metric 0, localpref 140, valid, internal, best (Local Pref), rpki validation-state: not found
Community: 55514:1013
AddPath ID: RX 0, TX-All 38 TX-Best-Per-AS 0 TX-Best-Selected 0
Advertised to: 51.49.31.48 51.49.31.49 51.49.31.52 51.49.31.50 51.49.31.51 51.49.31.55 51.49.32.45 51.49.32.46
Last update: Tue Mar 12 11:09:25 2024
This however becomes a different next hop on other route reflector clients:
> /ipv6 route print detail where dst-address=::/0
Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, o - ospf, b - bgp, U - unreachable
0 Db dst-address=::/0 gateway=::ffff:51.49.31.54 gateway-status=::ffff:51.49.31.54 unreachable distance=200 scope=40 target-scope=30 bgp-as-path="3710"
bgp-local-pref=140 bgp-med=0 bgp-origin=igp bgp-communities=55514:1013 received-from=bwdur01-rr03
So VyOS installs the right IPv6 route and sets the correct next hop, as received from a route reflector client, but then changes the next hop to ::ffff:51.49.31.54. This is essentially ::ffff:< IPv4 address of peer that introduced prefix to RR >
Herewith redacted configs from the RR VyOS device:
set policy route-map rr_client-in rule 10 action 'permit'
set policy route-map rr_client-out rule 10 action 'permit'
set protocols bgp parameters cluster-id '51.49.31.50'
set protocols bgp parameters log-neighbor-changes
set protocols bgp parameters router-id '51.49.31.54'
set protocols bgp peer-group rr_client address-family ipv4-unicast route-map export 'rr_client-out'
set protocols bgp peer-group rr_client address-family ipv4-unicast route-map import 'rr_client-in'
set protocols bgp peer-group rr_client address-family ipv4-unicast route-reflector-client
set protocols bgp peer-group rr_client address-family ipv4-unicast soft-reconfiguration inbound
set protocols bgp peer-group rr_client address-family ipv6-unicast route-map export 'rr_client-out'
set protocols bgp peer-group rr_client address-family ipv6-unicast route-map import 'rr_client-in'
set protocols bgp peer-group rr_client address-family ipv6-unicast route-reflector-client
set protocols bgp peer-group rr_client address-family ipv6-unicast soft-reconfiguration inbound
set protocols bgp peer-group rr_client remote-as '55514'
set protocols bgp peer-group rr_client update-source 'lo'
set protocols bgp system-as '55514'