On Tue, Dec 22, 2020 at 02:04:27PM +0100, open...@kene.nu wrote:
> Hello,
> I am seeing what I deem to be unexpected behavior with ospfd and depending
> on carp interfaces.
> Running 6.8 with latest patches applied on all three routers.
> 
> # uname -a
> OpenBSD extfw1.lab.kambi.com 6.8 GENERIC.MP#2 amd64
> 
> My setup is as following;
> Two openbsd boxes (FW1 and FW2) acting as a firewall pair sharing carp
> interfaces.
> Single openbsd box (R1) that in this instance acts as a client trying to
> reach servers that are reachable via the FWs.
> VLan20 (actually carp20) is my nexthop (BGP wise) to reach any networks
> behind the FW pair.
> VLan21 is the link network between all the three boxes. The FWs share a
> carp21 interface.
> 
> My FW ospfd.conf (same on all three boxes apart from the "depend on" which
> is absent from R1):
> router-id <redacted>
> 
> area 0.0.0.0 {
>     interface lo1
>     interface vlan20 {
>         depend on carp20
>     }
>     interface vlan21 {
>         depend on carp21
>     }
> }
> 
> Carp20:
> root@FW1:~ # ifconfig carp20 | grep inet
> inet 172.30.9.21 netmask 0xfffffff0 broadcast 172.30.9.31
> 
> Now to the strange part. I see that the selected route in R1 points to FW1
> even though carp20/21 on FW1 is in state BACKUP. No matter what I do, apart
> from setting static metrics, ospfd on R1 always selects FW1 as nexthop.
> root@FW1:~ # ifconfig vlan21 | grep inet
> inet 172.30.9.34 netmask 0xfffffff0 broadcast 172.30.9.47
> root@FW1:~ # ifconfig carp20 | grep carp:
> carp: BACKUP carpdev vlan20 vhid 1 advbase 1 advskew 10
> root@FW1:~ # ifconfig carp21 | grep carp:
> carp: BACKUP carpdev vlan21 vhid 1 advbase 1 advskew 10
> 
> root@FW2:~ # ifconfig vlan21 | grep inet
> inet 172.30.9.35 netmask 0xfffffff0 broadcast 172.30.9.47
> root@FW2:~ # ifconfig carp20 | grep carp:
> carp: MASTER carpdev vlan20 vhid 1 advbase 1 advskew 100
> root@FW2:~ # ifconfig carp21 | grep carp:
> carp: MASTER carpdev vlan21 vhid 1 advbase 1 advskew 100
> 
> root@R1:~ # ospfctl sh
> neighID              Pri State        DeadTime Address         Iface
> Uptime
> 172.30.9.4      1   FULL/OTHER   00:00:38 172.30.9.35     vlan21    00:21:33
> 172.30.9.3      1   FULL/BCKUP   00:00:38 172.30.9.34     vlan21    00:22:14
> 
> root@R1:~ # ospfctl sh fib | grep 172.30.9.16/2
> *O       32 172.30.9.16/28       172.30.9.34
> *O       32 172.30.9.16/28       172.30.9.35
> 
> root@R1:~ # ospfctl sh rib | grep 172.30.9.16/2
> 172.30.9.16/28       172.30.9.34       Intra-Area   Network   20
>  00:30:33
> 172.30.9.16/28       172.30.9.35       Intra-Area   Network   20
>  00:29:56
> 
> root@R1:~ # route -n get 172.30.9.21
>    route to: 172.30.9.21
> destination: 172.30.9.16
>        mask: 255.255.255.240
>     gateway: 172.30.9.34
>   interface: vlan21
>  if address: 172.30.9.37
>    priority: 32 (ospf)
>       flags: <UP,GATEWAY,DONE,MPATH>
>      use       mtu    expire
>       11         0         0
> 
> As seen above R1 selects 172.30.9.34 as the nexthop based on ospf which is
> wrong. It should be 172.30.9.35 as FW2 is carp master for carp20/21. What I
> in the end want to achieve is that the router with carp20/21 MASTER should
> be the preferred carp20 nexthop. An assumption can be made that carp20/21
> will always have the same FW as master in my case.

Can you test if it works as expected with current?

I think you are affected by a bug fixed by dlg with this commit:
https://marc.info/?l=openbsd-cvs&m=160427701605657&w=2

Reply via email to