Libvirt virsh : Error starting network, cannot execute binary /usr/sbin/iptables

Pascal pascal.ledisque at posteo.net
Wed Aug 17 09:20:18 UTC 2022


Hi Laine,

Thank you so much for your answer and the fully detailled explanation. 
It is much clear to me now.

First I want to correct my error : after reinstalling iptables, I forgot 
to restart libvirtd.service, thus the same error raised. After 
restarting the service, I was able to start the virtual network.

Also my guests are back in virt-manager, don't know exactly what 
happened (.xml files are in |/etc/libvirt/qemu/|) but issue was gone 
after reinstalling paskages.

I can see /usr/sbin/iptables  is a link to etc/alternatives/iptables 
which is a link to /usr/sbin/iptables-nft.
So when I am able to start virtual network (with iptables installed), I 
can see rules created in nftables (filter, nat, mangles).

So now all is fine, I can run my VMs (yes I need a network to access 
internet from them).

If I need to keep iptables on the system, that's OK, just happy to 
understand why.

-=-

Now, regarding the dependency to iptables, I did check libvirtd before 
writing with no result. But that was not the right package to check. On 
my debian, the package is libvirt-daemon-system .

libvirt-daemon-system depends adduser, gettext-base, iptables, 
firewalld, libvirt-clients, libvirt-daemon, 
libvirt-daemon-config-network, libvirt-daemon-config-nwfilter, 
libvirt-daemon-system-systemd, libvirt-daemon-system-sysv, logrotate, 
policykit-1, debconf, <debconf-2.0>

Thank you for that too !

I will check if I need to create a defect on debian, as you say, it is 
not expected to be able to remove iptables without any warning (but I am 
running debian bookworn aka "testing", so such thing may happen). Will 
check with debian guys.

Again, thank you very much for your help and explanations. It has been 
very useful, great support !

Best regards,
Pascal


Le 16/08/2022 à 21:49, Laine Stump a écrit :
> On 8/15/22 1:00 PM, Pascal wrote:
>> Hi,
>>
>> I am a bit lost and hope someone can help me. I am running Debian 
>> bookworm (testing) with last updates.
>>
>> $ sudo apt policy libvirt-daemon
>> libvirt-daemon:
>>    Installé : 8.5.0-1
>>    Candidat : 8.5.0-1
>>   Table de version :
>>   *** 8.5.0-1 100
>>          100 /var/lib/dpkg/status
>>
>>
>> I am unable to start default network , and get an error related to 
>> iptables :
>>
>> $ sudo virsh net-start default
>> erreur :Impossible de démarrer le réseau default
>> erreur :internal error: Failed to apply firewall rules 
>> /usr/sbin/iptables -w --table filter --list-rules: libvirt: erreur : 
>> cannot execute binary /usr/sbin/iptables: Aucun fichier ou dossier de 
>> ce type
>>
>> Sorry for the french, it says "impossible to start default network" 
>> and "no such file or folder" at the end.
> libvirt execs the iptables command to install packet filtering rules 
> that are part of the setup of virtual networks with forward mode of 
> "nat", "route", and for those virtual networks that have no forward 
> mode at all (aka "isolated"). libvirt's default network uses NAT to 
> make all virtual machines appear to be at the IP address of the host's 
> external ethernet interface, so it requires the iptables command
>
> Although I've been working on patches to make it possible for libvirt 
> to use /usr/sbin/nft to add & remove packet filter rules, libvirt 
> still uses iptables to add its rules, so if have a virtual network 
> that needs to add packet filtering rules (or a guest that has nwfilter 
> rules), you'll need the iptables command, and if it's not found then 
> libvirt will fail at runtime (as you've seen).
>
> Beyond that, if you install the libvirt-daemon-driver-nwfilter or 
> libvirt-daemon-driver-network packages, then iptables *should* be a 
> hard prerequisite listed in the package manifest; if your distro's 
> packaging system is allowing you to remove the iptables package 
> without also removing those libvirt packages (which is what you say 
> you were able to do), or allowing you to install those libvirt 
> packages without (semi)automatically pulling in iptables (which you 
> also say you've done), then that is a bug in the distro's packaging 
> files for libvirt.
>
> It's unclear from your original message if you really require 
> libvirt's default network in any of your guests. If you don't, then 
> you can just not install or start the libvirt-daemon-driver-network 
> package, and don't try to start the default network, and you should be 
> okay without the iptables package on your system. It's not really 
> gaining you anything (other than a miniscule amount of disk space) to 
> do that though.
>
> These days /usr/sbin/iptables is a symbolic link to either 
> iptables-nft (which uses the nftables API to put all the rules into 
> special nft tables named "filter" and "nat", so you actually see the 
> iptables rules as nft rules when you run "nft list ruleset") or to 
> /usr/sbin/iptables-legacy (which uses the old iptables API to install 
> rules that *don't* show up in "nft list ruleset"). In either case 
> though, packets are processed using the same nft packet matching code 
> in the kernel. There is some amount of info about these two variants 
> here:
>
>
> https://developers.redhat.com/blog/2020/08/18/iptables-the-two-variants-and-their-relationship-with-nftables 
>
>
> The end of it all though is that even if you have some userspace 
> programs that "use iptables", they are in the end using nftables in 
> the kernel.
>
>> It is true I removed iptables because I want to use only nftables (I 
>> removed both ufw and iptables packages (apt remove), and enabled the 
>> nftables service before error raises). Before this, all was fine, but 
>> when I enabled nftables, all VMs disapeared  from virt-manager).
>
> Are the guests completely disappearing from the list? Or is it that 
> you're unable to start the guests? A guest would only completely 
> disappear spontaneously from virt-manager (i.e. be completely removed 
> from the list of all guests) if something went wrong while parsing the 
> guest config during libvirtd (or virtqemud) startup. Look in the 
> system logs for any errors during libvirtd startup (or virtqemud 
> startup if your debian has switched to modular daemons). I can't think 
> of anything that could/should change in the parsing of the config due 
> to enabling the nftables servive (which libvirt knows nothing about).
>
>> I uninstalled KVM related packages and reinstalled, still the same.
>>
>> I also installed back iptables, but strangely I still get the same 
>> error, although binary /usr/sbin/iptables is there.
>
> Now that certainly makes no sense! :-/ Possibly /usr/sbin/iptables is 
> a symbolic link to a file that doesn't exist (because there was an 
> additional iptables package, e.g. iptables-nft or iptables-legacy, 
> that you didn't reinstall?)
>
>> I tried many things with no luck, restarted libvirtd service, 
>> recreated the network, etc...
>>
>> Has anyone some idea about what is happening here ? is there some 
>> incompatibility with nftables (firewalld service is disabled) and 
>> libvirt ?
>
> As I've said above, libvirt is still using iptables to add its rules, 
> but there is no incompatibility with nftables, and in fact the rules 
> under the hood end up being nftables rules.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvirt-users/attachments/20220817/4f697c2d/attachment-0001.htm>


More information about the libvirt-users mailing list