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: support@plutex.de Internet: http://www.plutex.de USt-IdNr.: DE 815030856 Handelsregister: Amtsgericht Bremen, HRB 25144 Geschäftsführer: Torben Belz, Hendrik Lilienthal