[Pkg-libvirt-maintainers] Bug#923249: Bug#923249: libvirt0: libvirt sets disable_ipv6 on bridge, entirely breaking internal IPv6 networking

Ralf Jung post at ralfj.de
Mon Feb 25 14:53:00 GMT 2019


Hi Guido,

thanks for the quick reply!

>> After a recent upgrade, IPv6 communication between a virtual router and another
>> virtual client over an isolated network stopped working. I am seeing the rotuer
>> advertisments sent by the router on vnet0, which is attached to the bridge
>> virbr1, but when I capture packages on the bridge, the IPv6 traffic is gone.  It
>> just took me several hours of debugging to realize that the reason for this is
>> that /proc/sys/net/ipv6/conf/virbr1/disable_ipv6 is set to 1.  After setting it
>> to 0, IPv6 is working as expected now.
>>
>> This is a regression, IPv6 used to work between virtual clients just fine
>> without having to manually fiddle with the network configuration.
> 
> I'm not near a ipv6 setup atm but according to the git logs nothing
> changed in that area for quite some time. Please indicate which version
> you updated from so it's easier to check for related changes and also
> provide details about your setup (preferably network XML and domain XML).

I updated from 4.10.0-2 to 5.0.0-1.

Looking at the code in bridge_driver.c, I also came to the conclusion that
nothing changed, and that setting disable_ipv6 like this is intended behavior --
it happens whenever the network has no host IPv6 address.  The docs say that
guest-to-guest IPv6 communication can be enabled with the `ipv6` attribute, but
that attribute has no bearing on whether `disable_ipv6` gets set. It only
controls some firwall stuff. Maybe disable_ipv6 was always set but it somehow
used to not kill the entire IPv6 traffic on the bridge? A kernel update happened
together with all the other updates (from 4.19.12-1 to 4.19.16-1).

The network config now is (after adding the `ipv6` attribute, which however made
no difference):

> <network ipv6='yes'>
>   <name>ffnet</name>
>   <uuid>cfd2c92a-db77-4b27-ad78-a8a81ace32b6</uuid>
>   <bridge name='virbr1' stp='on' delay='0'/>
>   <mac address='52:54:00:27:6c:42'/>
>   <domain name='ffnet'/>
> </network>

The part where the virtual router gets attached is

>     <interface type='network'>
>       <mac address='52:54:00:28:0b:bb'/>
>       <source network='ffnet'/>
>       <model type='virtio'/>
>       <driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='5'>
>         <host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/>
>         <guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/>
>       </driver>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>     </interface>

And for the virtual client

>     <interface type='network'>
>       <mac address='52:54:00:99:7b:1f'/>
>       <source network='ffnet'/>
>       <model type='virtio'/>
>       <driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='5'>
>         <host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/>
>         <guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/>
>       </driver>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>     </interface>


> There were some ipv6 related changes with firewalld though which might be worth
> investigating.

firewalld got updated from 0.6.3-4 to 0.6.3-5 at the same time.
I have set `FirewallBackend=iptables` some time ago because the default
(`nftables`) broke libvirt.

; Ralf



More information about the Pkg-libvirt-maintainers mailing list