Hi all, new to the forum!
We’re building a platform with Incus/IncusOS and the network design is a very plain BGP to the host on a pure IPv6 leaf–spine fabric, no overlays, no VRFs. The hosts announce what runs on them, bare-metal tenants announce their own prefixes, IPv4 is only present as v4-over-v6 (per RFC 8950). Two links per host towards two leaf switches for the main traffic, unnumbered on both, private ASN per device and identical config on every host.
Recently the new bgp.peers.NAME.interface added a working announce side for BGP unnumbered. Works out of the box, extended next-hop included. Thanks!
Seeing this I thought I should ask, the other direction is the next problem for our design. The incus BGP speaker installs nothing of what it receives, and there’s no FRR on IncusOS, so the host can’t learn its default from the leaves. ::/0 we can get from RA as IncusOS accepts RAs on interfaces without static addresses, so for v6 only this is fine. But 0.0.0.0/0 has no RA equivalent; it needs 0.0.0.0/0 via fe80::1 dev link0 per uplink (our leaves present a fixed fe80::1), which networkd can do but the IncusOS route schema can’t express … yet?
So from that discussion, a small wishlist:
routes[].dev so a link-local next hop works, also for v4 destinations.
routes[].metric so our management-NIC default wins over in-band interfaces.
Aaaand … we’d need host loopback addresses on lo or loopback dummy devices, whichever fits? Then those addresses would also need to be announced by the speaker (we use strict uRPF on the leaves); is there any way yet to dot that yet, or would it be needed as part of the same potential change?
With a bit of a different angle, there might be a bigger question: with the above we’d be having a running config on IncusOS, but host egress failover is then link-down only. We also need ECMP + BFD, and I could imagine two ways to get that:
-
Speaker import feature. bgp.peers.NAME.import=default: install a default from a named peer, and then it will be gone when the session drops. Currently gobgp already has the route, it’s a RIB send to netlink that is missing afaict. This would require no second daemon, but also the result would be no BFD.
-
Work to hav FRR as an IncusOS application. Sysext plus a services/frr config surface, and we could look at the other ones like tailscale/linstor for guidance? It would need asn, loopback, unnumbered peers with bfd, allow-listed import, export the loopback, and what Incus hands it over iBGP at ::1. Downside to this is perhaps it will be a network-facing daemon on the host; not a problem per se, but …? We’d bind to peer interfaces and bgpd+bfdd only.
We lean towards trying to work with the FRR route because it’s what actually delivers our network fabric design, and we’d rather carry it upstream than in our own image builds if more people are interested. What do you think about this?