I’ve been experimenting with IPv6 at home, and spent some time trying to get it working in my virtual machines.
The first symptom I got was that VMs got a “Network unreachable” error when trying to
ping6 anything but their own address. The cause was a complete brainfart on my side: We need a loopback interface network definition for IPv6 in
iface lo inet loopback
iface lo inet6 loopback
The second problem took a bit more digging to understand: I would get an IPv6 address, and I could ping stuff both on my own network and on the Internet from the VM, but no other computers could reach the virtual machine over IPv6.
According to this discussion, QEMU/KVM has support for multicast (required for proper IPv6 functioning), but it’s turned off by default. Remedy this by running
virsh edit [vm-name] and adding
trustGuestRxFilters='yes' to the appropriate network interface definition:
<interface type='direct' trustGuestRxFilters='yes'>
<source dev='enp2s0' mode='bridge'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
As usual, when you understand the problem the solution is simple.