Hi list, maybe this question boils down to "How can I tell bird to always use global IPv6 addresses as nexthops". But let me give you a sketch of my problem:
RR ---- R1 ---- R2 Addresses: RR 2001:db8:1::100, fe80:1::100%I1 R1 2001:db8:1::1, fe80:1::1%I1 2001:db8:2::1, fe80:2::1%I2 R2 2001:db8:2::2, fe80:2::2%I2 RR is an route reflector with * a direct iBGP session to R1 / 2001:db8:1::1, and * a multihop eBGP session to R2 / 2001:db8:2::2. As RR isn't supposed to forward any traffic, it has "missing lladdr ignore" set on the iBGP session. R1 and R2 don't talk to each other. Let's suppose R2 announces a route for 2001:db8:3::/64 RR sees this route: > bird> show route all 2001:db8:3::/64 > 2001:db8:3::/64 unicast [R2 2019-10-10 from 2001:db8:2::2] * (100/100) > [AS4242424242?] > via fe80:1::1 on I1 > Type: BGP univ > BGP.origin: Incomplete > BGP.as_path: 4242424242 > BGP.next_hop: 2001:db8:2::2 > BGP.local_pref: 100 The nexthop is correctly set to the link-local address of R1 that RR can reach. Notice the missing link-local BGP.next_hop, however. Now RR exports this route to R1, and this is where things go wrong: > bird> show route all 2001:db8:3::/64> 2001:db8:3::/64 unicast [RR 2019-10-10 > from 2001:db8:1::100] * (100/0) [AS4242424242?] > via fe80:1::100 on I2 > Type: BGP univ > BGP.origin: Incomplete > BGP.as_path: 4242424242 > BGP.next_hop: 2001:db8:2::2 > BGP.local_pref: 100 R1 correctly identifies the BGP.next_hop as being on-link for I2, but uses the link-local address of RR on the interface to R2 as nexthop. (Actually, it's even worse: R1 doesn't really use fe80:1::100 as nexthop, but the link-local address of the peer that was formerly in the place of RR. That address isn't even present anymore on any server anywhere!) I understand the R1 has no way of knowing the link-local address of R2, because it was never part of the BGP.next_hop. But the link-local address of RR was never part of BGP.next_hop, either! So, Questions: Why does bird use link-local nexthops at all, when all neighbors are configured using global addresses? How is it possible that bird uses the link-local address of RR decoupled from its interface? Is there anything I can do to make R1 use the global address (which is the only address in BGP.next_hop) of R2 as the nexthop? Best regards, Jan-Philipp Litza -- Jan-Philipp Litza PLUTEX GmbH Hermann-Ritter-Str. 108 28197 Bremen Hotline: 0800 100 400 800 Telefon: 0800 100 400 821 Telefax: 0800 100 400 888 E-Mail: supp...@plutex.de Internet: http://www.plutex.de USt-IdNr.: DE 815030856 Handelsregister: Amtsgericht Bremen, HRB 25144 Geschäftsführer: Torben Belz, Hendrik Lilienthal