How to make bird and freebsd carp working together ?
Marek Zarychta
zarychtam at plan-b.pwste.edu.pl
Mon Apr 1 15:51:35 CEST 2024
W dniu 1.04.2024 o 00:50, Arnaud Houdelette-Langlois via Bird-users pisze:
>
> Hi
>
> I got two routers running freebsd (BSDRP).
>
> Those two are used as redundant site firewalls and main routers /
> route servers.
>
> Both exchange routes between themselves and other routers using Bird
> (OSPF+BGP).
>
> Both serve as gateway for our management network, with carp enabled.
>
> I got trouble making CARP and BIRD working together.
>
> The carp enabled interface use a dummy network for exchanging carp
> info (link local adresses : 169.254.1.0/24)
>
> Bird Device protocol does not makes any difference between adresses in
> MASTER or BACKUP vhids, so the route appears in both routers.
>
> I tried with recent "learn all" feature of kernel protocol : There,
> bird only picks up route when its master, but, in case of MASTER
> failover or preemption, it doesn't remove the route early enough, and
> freebsd does not seem to replace the route on it’s kernel table, so
> when birds finally removes the route, we end up with no route at all.
> (and a non working network segment).
>
> Am I the only one facing this issue ? Is there a way to make bird carp
> aware ?
>
Sure, the best way to let BIRD know that CARP state has changed is to
deploy devd(8):
# /etc/devd/carp.conf
notify 0 {
match "system" "CARP";
match "subsystem" "[0-9]+@[0-9a-z]+";
match "type" "(MASTER|BACKUP)";
action "/root/bin/carpcontrol.sh $subsystem $type";
};
# /root/bin/carpcontrol.sh
#!/bin/sh
subsystem=$1
type=$2
vhid="6"
c_if="vlanX" # CARP interface1
(...)
bird_remove_routes() {
here change configs, reconfigure bird etc
}
bird_add_routes() {
here change configs, reconfigure bird etc
}
if [ "$subsystem" = "$vhid@$c_if" ]; then
case $type in
"MASTER")
bird_add_routes
;;
"BACKUP")
bird_remove_routes
;;
esac
fi
Happy routing !
Cheers
--
Marek Zarychta
More information about the Bird-users
mailing list