I have on the host machine two network interfaces. One is lan and the other is a wlan. For libvirt I have created a nat network which is bound to the wlan. From the guest I can access other machines in the network host wlan is connected to. Also DNS lookup works. The problem is that there’s no connection to the internet at all, e.g. pinging something gives “Destination network unreachable”. This only happens when both network connection on the host are active. Running qemu/libvirt on OpenSuse Tumbleweed.
The nat network in question:
<network>
<name>natToWlan</name>
<uuid>a44c939c-e6bf-44d0-8f86-376056d418a4</uuid>
<forward dev="wlp19s0f4u1u1" mode="nat">
<nat>
<port start="1024" end="65535"/>
</nat>
<interface dev="wlp19s0f4u1u1"/>
</forward>
<bridge name="virbr1" stp="on" delay="0"/>
<mac address="52:54:00:1f:64:95"/>
<ip address="192.168.100.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.100.128" end="192.168.100.254"/>
</dhcp>
</ip>
</network>
I’m not a networking expert by any means but this seems like a pretty strong hint that it’s a routing issue.
Check the routing tables on the host? I’d bet that the internet is only reachable on the LAN interface (again, not an expert but one of them has to take priority, right?). I’m guessing that disconnecting the LAN interface changes the routing to go through the WLAN interface instead.
You could possibly add a static route to work around this: https://libvirt.org/formatnetwork.html#static-routes