

Sounds like a networking exercise on its own.
Do the attempted pings show up on the wire? (Switch LEDs, network card activity light.)
Does broadcast work? (Watch if it is received with tcpdump -n on both Linux VMs, and Wireshark on the Windows hosts, while doing ping -b 10.0.0.255. Or trigger a broadcast ARP by ping-ing a non-existing IP in the same network. Those should go through all bridge and switch devices, independent of IPs and routing setup.)
I think you need four distinct MAC addresses for this setup, are they all different?
The network card/driver is filtering received unicast by MAC. I’m sure something should set up the filters correctly, but maybe it went wrong, or there is a bug in the driver. Wireshark on Windows should be able to enable promiscuous mode, which disables the filter.
Side note: I don’t think you need a crossover cable. Auto-crossover should just work these days.
At work I map a USB Ethernet device into my Linux VM when I do anything networking, exactly to avoid those kind of “is it Windows?” questions. Also, I can then check the Ethernet link at the lowest level using Linux tools like ip link or mii-tool or ethtool.
I’m using VMWare for this, which I cannot recommend any more. (It used to be good for this, but gut much worse in recent years.) I think vanilla VirtualBox doesn’t allow to map USB devices.
Thanks for the follow-up. Of course you would have some kind of mass-deployment, it didn’t think of that. I thought you’d maybe copy the Windows MAC to Linux, but… then you’d remember doing that.
Next up, they will also all have the same ssh host key ;-) (Which may be an advantage actually, but still confusing.) Those are the kind of problems cloud-init is solving, I guess.