link-local IPv6 address in BGP.next_hop
Ponikierski, Grzegorz
gponikie at akamai.com
Tue Jan 28 14:27:19 CET 2025
I see I missed one detail which can be confusing. Problem is with sending link-local address from Bird to BGP speaker on remote side and this link-local doesn’t make sense for remote side because they don’t share common subnet. Belove how it looks like from FRR perspective.
FRR: 2025/01/17 23:27:48 BGP: [PS8NX-WWXPH] 23.33.236.254 sent a v6 LL next-hop and there's no peer interface information. Hence, withdrawing
FRR: 2025/01/17 23:27:48 BGP: [RWQFK-BA2JR][EC 33554488] 23.33.236.254: Attribute MP_REACH_NLRI, parse error - treating as withdrawal
FRR: 2025/01/17 23:27:48 BGP: [QWG8G-NT6EJ][EC 33554455] 23.33.236.254(Unknown) rcvd UPDATE with errors in attr(s)!! Withdrawing route.
FRR: 2025/01/17 23:27:48 BGP: [XC334-3GAQ8][EC 33554455] 23.33.236.254 [Error] Update packet error (wrong prefix length 64 for afi 1)
FRR: 2025/01/17 23:27:48 BGP: [HJP7M-20X19][EC 33554455] 23.33.236.254 [Error] Error parsing NLRI
FRR: 2025/01/17 23:27:48 BGP: [HZN6M-XRM1G] %NOTIFICATION: sent to neighbor 23.33.236.254 3/10 (UPDATE Message Error/Invalid Network Field) 0 bytes
Regards,
Grzegorz
From: "Brandon Z." <Brandon at huize.asia>
Date: Tuesday, 28 January 2025 at 01:58
To: "Ponikierski, Grzegorz" <gponikie at akamai.com>
Cc: bird-users <bird-users at network.cz>
Subject: Re: link-local IPv6 address in BGP.next_hop
Hi Grzegorz, I don’t quite understand what you mean, but maybe someone else can. It seems like it announced a non-existent local-link address to another router? Best, Brandon Z. HUIZE LTD www. huize. asia | www. ixp. su | Twitter This e-mail and
ZjQcmQRYFpfptBannerStart
This Message Is From an Untrusted Sender
You have not previously corresponded with this sender.
ZjQcmQRYFpfptBannerEnd
Hi Grzegorz,
I don’t quite understand what you mean, but maybe someone else can. It seems like it announced a non-existent local-link address to another router?
Best,
Brandon Z.
HUIZE LTD
www.huize.asia <https://urldefense.com/v3/__https:/huize.asia/__;!!GjvTz_vk!XyivVwgDc3QoWIOFFzClG1jQBYTYBXjPwglViKFx1CYU9iKVGrPgPRPToOkKRYoLldMsfMchRyjWkXIqjQ$> | www.ixp.su<https://urldefense.com/v3/__https:/www.ixp.su/__;!!GjvTz_vk!XyivVwgDc3QoWIOFFzClG1jQBYTYBXjPwglViKFx1CYU9iKVGrPgPRPToOkKRYoLldMsfMchRyg1_-iFlg$> | Twitter
[Image removed by sender.]
This e-mail and any attachments or any reproduction of this e-mail in whatever manner are confidential and for the use of the addressee(s) only. HUIZE LTD can’t take any liability and guarantee of the text of the email message and virus.
On Tue, 28 Jan 2025 at 01:44, Ponikierski, Grzegorz via Bird-users <bird-users at network.cz<mailto:bird-users at network.cz>> wrote:
Hello all!
I have an interesting case of link-local IPv6 address in BGP.next_hop and I would like to know your opinion about that because I cannot tell with 100% confidence if it’s a bug or a feature. Existence of these link-local addresses causes issues of interoperability between Bird and FRR. I have separate discussion about that with FRR folks. Here I would like to now a Bird perspective. Details below.
On single router with Bird 2.15 I have multiple IPv4 and IPv6 eBGP sessions, which receives prefixes from the Internet, and IPv4 iBGP session, which forwards these prefixes to BGP collector with FRR, which is separate server somewhere in the Internet many hops away in separate ASN. Session with BGP collector uses both ipv4 and ipv6 channels to send both IPv4 and IPv6 prefixes. IPv6 prefixes received via eBGP have both global IPv6 address and link-local IPv6 address like in an example below:
::/0 unicast [2600:1488:6080::8__r01.fra03.ien 2024-12-06] * (100) [AS3356i]
via 2600:1488:6080::8 on ae2
Type: BGP univ
BGP.origin: IGP
BGP.as_path: 3356
BGP.next_hop: 2600:1488:6080::8 fe80::7a4f:9bff:fed1:2e0d
BGP.med: 4294967294
BGP.local_pref: 60
BGP.community: (3356,2) (3356,501) (3356,601) (3356,2065) (20940,30403) (65502,3356)
However, prefixes forwarded via iBGP to BGP collector also have both global and link-local addresses like below:
::/0 unicast [2600:1488:6080::8__r01.fra03.ien 2024-12-06] * (100) [AS3356i]
via 2600:1488:6080::8 on ae2
Type: BGP univ
BGP.origin: IGP
BGP.as_path: 3356
BGP.next_hop: 2600:1488:6080::8 fe80::7a4f:9bff:fed1:2e0d
BGP.med: 4294967294
BGP.local_pref: 60
BGP.community: (3356,2) (3356,501) (3356,601) (3356,2065) (20940,30403) (65502,3356) (21357,600)
On one hand, as per RFC 4271 NEXT_HOP is not changed when prefix is passed from eBGP to iBGP so what we see above it expected. But on the other hand, as per RFC 2545 link-local address must not be there because both sides of iBGP doesn’t share the same IPv6 subnet:
“””
The link-local address shall be included in the Next Hop field if and
only if the BGP speaker shares a common subnet with the entity
identified by the global IPv6 address carried in the Network Address
of Next Hop field and the peer the route is being advertised to.
In all other cases a BGP speaker shall advertise to its peer in the
Network Address field only the global IPv6 address of the next hop
(the value of the Length of Network Address of Next Hop field shall
be set to 16).
“””
Who is right here? As far I know, both documents are still current standards, and both are implemented by Bird. I don’t see any clear guidelines how to make a clear judgement here. Personally, I would tell that RFC 4271 should be treated as general rule and RFC 2545 as more specific rule so in the end link-local should be removed. After all, link-local addresses do not make sense for multihop sessions. However, these documents don’t refer to each other and I don’t know if authors of these documents knew about each other statements. What do you think?
Anyway, when BGP collector with FRR 8.5.2 receives BGP UPDATE for route like presented above, then FRR rejects such UPDATE with treat-as-withdrawn approach but also triggers additional error about invalid prefix length for AFI 1, which finally causes NOTIFICATION (UPDATE Message Error/Invalid Network Field) and session goes down. I cannot rule out implementation bug in FRR version that I use, and I discuss it with FRR folks already.
Working workaround that I tested is to apply `next hop self` on Bird side. Probably `bgp_next_hop = bgp_next_hop` in Bird’s export policy will also work but I must test it yet.
What do you think? It’s a bug or a feature?
Regards,
Grzegorz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://trubka.network.cz/pipermail/bird-users/attachments/20250128/80f5667c/attachment.htm>
More information about the Bird-users
mailing list