-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BGP: Routes not learned from Bird with IPv6 link-local peering #6259
Comments
@jeremyvisser could you check with the latest master? |
Thanks for that! I tested with latest master last night. I can confirm that incoming routes are now successfully being learnt from Bird as expected! Now, as I originally wrote the bug report, 0355b41 solves it. However, what I additionally noticed was that Bird is also not learning routes from FRR, due to what seems to be a similar reason. Bird is showing this log entry:
I suspect this is a result of the MP_REACH_NLRI nexthop contents:
Bird is probably trying to interpret the first address as global, and the second as local, but is rejecting the route because My guess is that sending this instead might work (again, just to clarify, I have no global address configured on this network interface):
|
Well what frr receives from the other side should be able to work in both ways, which seems like maybe that is the case now with the latest change. What FRR sends might be best set as a knob on a per peer basis maybe. Like "neighbor next-hop-omit-v6-global" and this would be under the IPv6 AFI ofcourse. Because apparently there is ambiguity in the standard in regards to the situation and it might be best keep the current behavior and give the option when needed for alternative behavior. At least until the spec is clarified. Just my two cents as a user of FRR. P.s. here is a draft that is currently expired that explains an even different way handling IPv6 link local bgp peering, that might come up again. |
@Napsterbater this draft is in progress to be updated, we agreed on some updates there, I hope the next revision will be published soon. |
@polychaeta autoclose in 1 day. |
I'm still facing an issue with this on frr-7.4-dev-465-g3dab0aea0. I'm also using IPv6 link-local peering and all learned routes are marked as invalid:
As the other side is not setting a global address but :: instead, it seems like frr is choking on that:
|
In BIRD, Can I establish BGP session using ipv4 address and advertise both ipv4 and ipv6. Like it happens in frr. |
Yes, that's called MP-BGP. See here for an example config in BIRD. |
When I peer an FRR and Bird host over BGP with IPv6 link-local addresses (no global addresses assigned to either interface), FRR cannot learn routes from Bird.
When peering an FRR and FRR together, it works fine.
Here's minimal config which can reproduce the problem:
If I inspect the received-routes from Bird, I see incoming routes:
But the nexthop is unexpectedly
::
. I would expect the nexthop to befe80::2222
.Understandably, there are no routes learned:
If I inspect the UPDATE messages I receive from the Bird host, the nexthop information in the MP_REACH_NLRI is:
It sounds like FRR is getting confused about the
::
nexthop, and should instead be trying to use thefe80::2222
nexthop.If I look at the FRR to FRR peer instead, everything works as expected:
And in the UPDATE messages from the FRR host, the MP_REACH_NLRI has a different set of nexthops:
The route is installed correctly, and all works.
Expected behaviour
I expected an IPv6 link-local BGP peering (with no global address present on either interface) to work. However, with a Bird peer, FRR gets confused about which nexthop to use.
I believe it should ignore the
::
nexthop and try the link-local address instead.Possible workaround
I theorised that I could override the nexthop by using a route-map:
This is expected behaviour. A link-local address is not a valid global nexthop.
Therefore, the MP_REACH_NLRI that FRR is sending by default...
...is doing what the route-map is forbidding! FRR is being fairly hypocritical here.
(For what it's worth,
set ipv6 next-hop peer-address
orset ipv6 next-hop local fe80::2222
are not effective as workarounds; they don't affect the nexthop that FRR learns.)Versions
The text was updated successfully, but these errors were encountered: