Bird eBGP and iBGP
Gerdriaan Mulder
gmulder+birdcz at freedom.nl
Mon Jan 1 17:21:18 CET 2024
Hi Jason,
Thanks for your description of the network you aim to setup. I'm also
looking into announcing more-specifics within my ASN through
tunnels/iBGP, so I thought I'd chip in on this older thread. I suppose
you've found a way to persist announcing the IPv4 /24 after reboots?
In your message, you say "[..] should announce /24 and /48 and /64.". As
a sidenote and guideline, do not accept or announce on the public
internet IPv4 prefixes smaller than /24, and IPv6 prefixes smaller than
/48. In other words, your BGP peers for the public internet should only
see you announcing IPv4 /24 and IPv6 /48 (or larger prefixes, such as
IPv4 /22 or IPv6 /44 if you have those), and you should only import
prefixes that satisfy these same conditions. There's a rather excellent
guide by IPng Networks
(<https://ipng.ch/s/articles/2021/11/14/routing-policy.html>) for
setting up a good set of filters (prefix length, bogons, etc), with
BIRD2 example snippets.
If I understand correctly, your main question is: where do I configure
the prefixes I want to announce to eBGP peers?
On 02/11/2023 18:09, Jason Romo via Bird-users wrote:
> Here is my bird.conf:
> # Define static routes for IPv4
> protocol static {
> ipv4;
> route 23.x.x.0/24 via 10.77.77.1;
> route 23.x.x.0/28 via 10.77.77.1;
> }
>
> # Define static routes for IPv6
> protocol static {
> ipv6;
> route 2620:X:X::/48 via fd12:3456:X:1::2;
> route 2620:X:X:1::/64 via fd12:3456:X:1::2;
> }
This is one way of saying to BIRD that these routes exist. You're also
saying to BIRD that these routes are reachable through some other peer.
I'm not sure if you want this, or just 'blackhole' the IPv4 /24 and IPv6
/48, and to let other routers in your network announce those subnets
and/or more-specifics. In my BIRD2 config, and I've seen other configs
do the same, the subnets my AS intents to announce are set here with the
"blackhole" attribute. In my case, I've added one IPv6 address with /128
mask on the loopback device from the IPv6 /48 subnet. This makes it easy
to check whether your prefix got announced correctly and is reachable
from the public internet.
From `birdc show proto all` you'll see that static1 and static2 both
imported 2 routes. As for what your exporting to, e.g.,
neighbor_53xxx_v4, you could use `birdc show route export
neighbor_53xxx_v4`.
As for iBGP, I would expect FRR on the Dallas-side to announce a certain
(more-specific) subnet to the Vegas site. BIRD imports that route in its
routing information base (RIB), given that it passes the import filters.
Apart from importing and exporting prefixes to your eBGP and iBGP peers,
in order to get traffic flowing from upstream through your router
(Vegas) to the destination (Dallas), the kernel on Vegas needs to know
where to forward packets.
In your case, the protocols attached to "kernel" (`kernel_ipv4`,
`kernel_ipv6`) do not export any routes, that is, from BIRD's RIB to the
kernel's FIB. In other words, the kernel's routing table (`ip route show
table all`, and `ip -6 route show table all`) is most likely filled with
standard routes (some default route, a subnet route, etc.), but no
routes for your prefixes.
If you would, for example, want to export your prefixes and
more-specifics to the kernel's FIB, you could do something like:
```
protocol kernel kernel_ipv6 {
ipv6 {
table master6;
import none;
export filter {
if ( net ~ [ 2620:X:X::/48+ ] ) then accept; # /48 or
more-specific, up to and including /128
reject;
}
}
scan time 60;
#persist;
}
```
I hope these snippets help a bit. If you want external parties to check
your running configuration and visibility on the public internet, it
helps to publish as many details as possible, such as full prefixes and
ASNs, full configuration (redacting sensitive parameters such as
passwords, but keeping the rest of the configuration stanza intact),
currently configured addresses (`ip address show`), currently configured
routes (`ip route show table all`, `ip -6 route show table all`). For
example, your question regarding multihop is somewhat difficult to
answer. In your configuration, there's a stanza `neighbor 169.x.x.179 as
53xxx;`. This could be valid, but the neighbor could also reside in
169.254.0.0/16 space, which may be an invalid configuration.
Best regards,
Gerdriaan Mulder
More information about the Bird-users
mailing list