On Mon, Oct 14, 2024 at 10:46:22AM -0400, Laine Stump wrote:
On 10/14/24 5:35 AM, Richard W.M. Jones wrote:
>On Mon, Oct 14, 2024 at 09:52:13AM +0100, Daniel P. Berrangé wrote:
>>
>>Urgh, I wonder if this is fallout from switching to NFT instead of iptables.
>
>I can list the firewall rules if you tell me what I'm looking for ...
>
>>IIUC, the NFT kernel maintainers didn't implement for checksum fixup rules,
>>since they believe that all modern distros would have long ago fixed their
>>bugs wrt mangled checksums.
That's the first thing that came to my mind too - maybe RHEL5
*isn't* the only guest OS that has this problem. (I certainly hope
that isn't the case :-/)
There are two ways to test out this theory:
1) change the setting of "firewall_backend" in
/etc/libvirt/network.conf to "iptables" and restart virtnetworkd
(if that does work, then switch back to nftables, restart
virtnetworkd, and test again just to make sure the issue wasn't
caused by some out-of-place rule)
I changed the setting between nftables and iptables a few times and I
can confirm that your theory seems to be correct.
iptables =>
"5 bad udp checksums in 5 packets" message is NOT seen
FreeBSD gets an immediate DHCPOFFER and boots quickly with network
nftables =>
FreeBSD sends 5 DHCPDISCOVER messages
"5 bad udp checksums in 5 packets" reappears
FreeBSD does NOT see DHCPOFFER, although it does seem to remember
the offer from the previous boot, so it does get a network
connection in the end.
or
2) tell qemu to setup the virtio-net device to do its packet
processing in userspace rather than the kernel. You do this by
adding
<driver name='qemu'/>
to the <interface> section.
This also works (with nftables).
>If I understand the trace correctly, the bad checksum originates
on
>the Linux host (the reply sent by dnsmasq).
I need to try it again to verify, but my recollection is that (when
you're using virtio-net with default settings) the checksums of DHCP
packets in one direction or the other *always* show up in tcpdump as
having bad checksums, but they still end up getting to the other end
with a proper checksum. Sometime in the distant past I *may have*
had it explained to me why this happens, but I don't recall now.
Anyway, I'm just saying this so that you know the validity of the
UDP checksum shouldn't be used as an indicator of whether or not
things are "working".
I have to say I also don't really understand what's happening here.
Isn't the Linux host sending DHCPOFFER? Why doesn't it set the UDP
checksum correctly and/or why would tcpdump report it wrongly if it is
setting it?
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages.
http://libguestfs.org