Hi,

our buildbots had quite some amount of "unexplained failures" on the
TAP adapter tests on FreeBSD 12 and FreeBSD 13 recently, which turned
out to be "duplicate MAC address" (so when I ran the tests individually,
everything worked, and when buildbot fired up all clients in parallel,
depending on timing, "tests 4 4a 4b" ran simultaneously -> duplicated MAC
-> confusion).

Between 11 and 12, FreeBSD reworked all their "virtual ethernet" drivers
(so "tap" now lives inside "dev tuntap"), and uses this nice function
now...

/*
 * Allocate an address from the FreeBSD Foundation OUI.  This uses a
 * cryptographic hash function on the containing jail's name, UUID and the
 * interface name to attempt to provide a unique but stable address. 
 * Pseudo-interfaces which require a MAC address should use this function to
 * allocate non-locally-administered addresses.
 */
void
ether_gen_addr(struct ifnet *ifp, struct ether_addr *hwaddr)

... which generally is "The Right Thing To Do", but *if two machines'
UUID is the same*, the generated MAC address on "tap0" will be the
same, and OpenVPN falls apart.


In the OpenVPN log, all is good in this case, but in FreeBSD dmesg, you 
see stuff like this:

tap0: Ethernet address: 58:9c:fc:00:55:75
tap0: link state changed to UP
nd6_na_input: duplicate IP6 address fd00:abcd:207:4::a:24
tap0: DAD detected duplicate IPv6 address fe80:4::5a9c:fcff:fe00:5575: NS 
in/out/loopback=0/1/0, NA in=1
tap0: DAD complete for fe80:4::5a9c:fcff:fe00:5575 - duplicate found
tap0: manual intervention required
tap0: possible hardware address duplication detected, disable IPv6

(because, of course, fe80:: addresses are based on MAC...)


Since the start of this e-mail, I went digging deeper - the function
*does* take a host UUID into account, so it *should* create unique
MAC addresses.

>>>>> If you do not create your FreeBSD VMs by cloning them! <<<<<

On first boot, FreeBSD generates the UUID, stores them in kern.hostuuid
for kernel perusal, and in /etc/hostid for persistence on next boot
(querying "kenv -q smbios.system.uuid" for interesting things the
hardware vendor / VM provider might have provided, see /etc/rc.d/hostid*).

Since most of my FreeBSD buildbots started up as clone of something
similar, at least 3 of them had the same hostid -> same MAC addresses.


Short summary: if you hit the problem of OpenVPN running into duplicate
MAC addresses on TAP adapters on FreeBSD, use --laddr *or* check your
/etc/hostid values for duplication.

gert
-- 
"If was one thing all people took for granted, was conviction that if you 
 feed honest figures into a computer, honest figures come out. Never doubted 
 it myself till I met a computer with a sense of humor."
                             Robert A. Heinlein, The Moon is a Harsh Mistress

Gert Doering - Munich, Germany                             g...@greenie.muc.de

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to