IPv6, route reflectors and link-local nexthops

Jan-Philipp Litza jpl at plutex.de
Thu Oct 10 16:57:28 CEST 2019


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 at plutex.de
Internet: http://www.plutex.de

USt-IdNr.: DE 815030856
Handelsregister: Amtsgericht Bremen, HRB 25144
Geschäftsführer: Torben Belz, Hendrik Lilienthal


More information about the Bird-users mailing list