Normally, the configuration for a virtual network named default is installed as part of the libvirt package, and is configured to autostart when libvirtd is started.
If the default network (or any other locally-created network) is unable to start, any virtual machine configured to use that network for its connectivity will also fail to start, resulting in this error message:
Virtual network default has not been started
One of the most common reasons for a libvirt virtual network's failure to start is that the dnsmasq instance required to serve DHCP and DNS requests from clients on that network has failed to start.
To determine if this is the cause, run
virsh net-start default from a root shell to start the default virtual network.
If this action does not successfully start the virtual network, open
/var/log/libvirt/libvirtd.log to view the complete error log message.
If a message similar to the following appears, the problem is likely a systemwide dnsmasq instance that is already listening on libvirt's bridge, and is preventing libvirt's own dnsmasq instance from doing so. The most important parts to note in the error message are
exit status 2:
Could not start virtual network default: internal error
Child process (/usr/sbin/dnsmasq --strict-order --bind-interfaces
--except-interface lo --listen-address 192.168.122.1
--dhcp-lease-max=253 --dhcp-no-override) status unexpected: exit status 2
If the machine is not using dnsmasq to serve DHCP for the physical network, disable dnsmasq completely.
If it is necessary to run dnsmasq to serve DHCP for the physical network, edit the
/etc/dnsmasq.conf file. Add or uncomment the first line, as well as one of the two lines following that line. Do not add or uncomment all three lines:
After making this change and saving the file, restart the systemwide dnsmasq service.
Next, start the default network with the
virsh net-start default command.
Start the virtual machines.