Hello, we have the following setup: - a libvirt/KVM virtualization physical host running Debian 10 - Debian 10 and RHEL 8/CentOS 8 VMs as guests
Guest VMs usually have two (virtio) network interfaces: - a static public interface (IPv4+IPv6 or IPv6 only, usually enp1s0), which access internet via a bridge (br0) on the host - an internal interface (IPv6 only, usually enp2s0) connected to a routed libvirt virtual network with a /64 ULA network The problematic behaviour is that, after a while, the Debian guests lose their internal ULA IPv6 address. I could observe that it happens after the expiry of valid_lft, preferred_lft, as can be seen in the 'ip a' output. Running 'ip neigh' shows that there is no REACHABLE router (but some STALE ones). On the other hand, the CentOS VM do not show this behaviour and their addresses and routes are refreshed regularly. But when I was debugging other issues with them, I realized that Network Manager is taking charge of these configurations. In order to debug further, I ran tcpdump on the host, a Debian guest, and a CentOS guest: - On the host (using the bridge created by libvirt for this routed virtual network, virbr2) sudo tcpdump -n -i virbr2 icmp6 - On the guest tcpdump -n -i enp2s0 icmp6 What I can observe is that: - Neighbor sollicitations between the host and the CentOS VMs are being exchanged regularly - With the Debian guest: - Neighbor sollicitations are exchanged when the VM is rebooted - Afterwards they are not exchanged... - ... unless one explicitly pings the guest from the host on this internal ULA address (then, one can see the echo packets, but also some routerneighbor sollicitations) So, I am not sure how to analyze further, and I would be grateful for some hints. It seems that a kind of regular "trigger" for the sollicitations is missing here. Please find below some more configurations. Thanks in advance! Mathieu ## host network config auto lo iface lo inet loopback auto br0 iface enp1s0f0 inet manual iface enp1s0f0 inet6 manual iface br0 inet6 static bridge_ports enp1s0f0 address 2001:XXXX:XXXX:XXXX::/56 gateway 2001:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:ff iface br0 inet static bridge_ports enp1s0f0 address XX.XX.XX.XX/24 gateway XX.XX.XX.254 ... ## guest network config auto lo enp1s0 enp2s0 iface lo inet loopback iface enp1s0 inet static address YY.YY.YY.YY netmask 255.255.255.255 broadcast YY.YY.YY.YY post-up ip route add YY.YY.YY.254 dev enp1s0 post-up ip route add default via YY.YY.YY.254 pre-down ip route del YY.YY.YY.254 dev enp1s0 pre-down ip route del default via YY.YY.YY.254 iface enp1s0 inet6 static address 2001:YYYY:YYYY:YYYY:YYYY:YYYY:YYYY:YYYY/64 post-up ip route add YYYY:YYYY:YYYY:YYYY:YYYY:YYYY:YYYY:ff dev enp1s0 post-up ip route add 2000::/3 via 2001:YYYY:YYYY:YYYY:YYYY:YYYY:YYYY:ff dev enp1s0 pre-down ip route del 2001:YYYY:YYYY:YYYY:YYYY:YYYY:YYYY:ff dev enp1s0 pre-down ip route del 2000::/3 via 2001:YYYY:YYYY:YYYY:YYYY:YYYY:YYYY:ff dev enp1s0 iface enp2s0 inet6 auto ## host sysctl options net.ipv6.conf.all.accept_ra = 2 net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv4.conf.br0.send_redirects = 0 net.ipv4.conf.br0.rp_filter = 0