OSPF on OpenBSD
Bastien Durel
bastien+bird at durel.org
Wed Sep 29 09:35:13 CEST 2021
Hello,
I'm trying to use bird to replace ospfd on OpenBSD, but it seems to
have a strange effect on the networking stack :(
I've tried multiple times, from OpenBSD 6.6 to 6.9, with bird2 (2.0.8
now)
Here is my bird config:
openbsd-test# cat /etc/bird.conf|grep -v ^#|grep -v '^$'
log "/var/log/bird.log" { debug, trace, info, remote, warning, error,
auth, fatal, bug };
router id 10.42.42.69;
debug protocols all;
protocol device {
}
protocol direct {
disabled; # Disable by default
ipv4; # Connect to default IPv4 table
ipv6; # ... and to default IPv6 table
}
protocol kernel {
ipv4 { # Connect protocol to IPv4 table by
channel
export all; # Export to protocol. default is export
none
};
}
protocol kernel {
ipv6 { export all; };
}
protocol static {
ipv4; # Again, IPv4 channel with default
options
}
protocol ospf v2 ospfv2 {
rfc1583compat yes;
tick 2;
ipv4 {};
area 0 {
interface "em0" { cost 5; };
};
}
And the em0 config:
em0:
flags=248843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,AUTOCONF6TEMP,AUTOC
ONF6> mtu 1500
lladdr 08:00:27:d6:6e:dd
index 1 priority 0 llprio 3
groups: egress
media: Ethernet autoselect (1000baseT full-duplex)
status: active
inet6 fe80::a00:27ff:fed6:6edd%em0 prefixlen 64 scopeid 0x1
inet 10.42.42.69 netmask 0xffffff00 broadcast 10.42.42.255
Before starting bird, I have a simple routing table :
openbsd-test# route -n show -
inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio
Iface
default 10.42.42.1 UGS 6 12 - 8
em0
224/4 127.0.0.1 URS 0 0 32768 8
lo0
10.42.42/24 10.42.42.69 UCn 2 0 - 4
em0
10.42.42.1 40:62:31:07:55:11 UHLch 1 2 - 3
em0
10.42.42.21 00:25:22:1e:0b:b7 UHLc 0 1 - 3
em0
10.42.42.69 08:00:27:d6:6e:dd UHLl 0 4 - 1
em0
10.42.42.255 10.42.42.69 UHb 0 0 - 1
em0
127/8 127.0.0.1 UGRS 0 0 32768 8
lo0
127.0.0.1 127.0.0.1 UHhl 1 2 32768 1
lo0
When bird is started, it inserts routes as intended:
openbsd-test# route -n show -inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio
Iface
default 10.42.42.1 UGS 5 314 - 8
em0
default 10.42.42.1 UG1 0 0 - 56
em0
224/4 127.0.0.1 URS 0 19 32768 8
lo0
5.39.65.35 10.42.42.1 UGH1 0 0 - 56
em0
10.0.42.21 10.42.42.21 UGH1 0 0 - 56
em0
10.2.0/24 10.42.42.1 UG1 0 0 - 56
em0
10.42.0/24 10.42.42.1 UG1 0 0 - 56
em0
10.42.1.56/30 10.42.42.21 UG1 0 0 - 56
em0
10.42.1.64/30 10.42.42.21 UG1 0 0 - 56
em0
10.42.7.6 10.42.42.21 UGH1 0 0 - 56
em0
10.42.7.7 10.42.42.21 UGH1 0 0 - 56
em0
10.42.7.53 10.42.42.21 UGH1 0 0 - 56
em0
10.42.42/24 10.42.42.69 U1h 66 193 - 56
em0
10.42.42.69 08:00:27:d6:6e:dd UHLl 0 104 - 1
em0
10.42.42.255 10.42.42.69 UHb 0 13 - 1
em0
10.60.77.5 10.42.42.1 UGH1 0 0 - 56
em0
[...]
But after that, the box cannot join anythin with IPv4. Established
connections (eg. ssh) over IPv4 fails. Even the gateway is unreachable:
openbsd-test# ping 10.42.42.1
PING 10.42.42.1 (10.42.42.1): 56 data bytes
ping: sendmsg: Invalid argument
ping: wrote 10.42.42.1 64 chars, ret=-1
ping: sendmsg: Invalid argument
ping: wrote 10.42.42.1 64 chars, ret=-1
^C
--- 10.42.42.1 ping statistics ---
2 packets transmitted, 0 packets received, 100.0% packet loss
With no ospfv3 configured, ipv6 connections are not lost
dmesg returns theses messages :
arp_rtrequest: bad gateway value: em0
arpresolve: 10.42.42.1: route contains no arp information
arpresolve: 10.42.42.0: route contains no arp information
arpresolve: 10.42.42.1: route contains no arp information
The last ones beeing flooded when the box tries to send packets
Whatever bird makes to the networking stack persists even if bird is
shut down. A reboot is necessary to recover.
On OpenBSD mailing list, someone said the problem may be bird
overwriting the 10.42.42/24 route (which was directly connected) by
another (the flags changed from UCn to U1h)
After stopping bird, flags and prios are not restored (10.42.42/24 gets
U1 / prio 56), and the default route kept is the one bird inserted
openbsd-test# route -n show -inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio
Iface
default 10.42.42.1 UG1 2 2 - 56
em0
224/4 127.0.0.1 URS 0 13 32768 8
lo0
10.42.42/24 10.42.42.69 U1 0 76 - 56
em0
10.42.42.69 08:00:27:d6:6e:dd UHLl 0 23 - 1
em0
10.42.42.255 10.42.42.69 UHb 0 6 - 1
em0
127/8 127.0.0.1 UGRS 0 0 32768 8
lo0
127.0.0.1 127.0.0.1 UHhl 1 2 32768 1
lo0
Do you know how to prevent that ?
Thanks,
--
Bastien
More information about the Bird-users
mailing list