This is how I setup the network when I run a VM on a laptop.
Create a bridge on networkmanager:
$ nmcli connection add type bridge ifname br0 stp no \
ipv4.addresses 10.42.42.42/24 ipv4.method manual connection.id br0
(it will be DOWN but already be visible in ip link
)
Set up a dhcp server for our vms using dnsmasq
#/etc/dnsmasq.conf
interface=br0
dhcp-range=10.42.42.50,10.42.42.150,12h
# systemctl enable --now dnsmasq
Enable forwarding
In /etc/sysctl.conf or /etc/sysctl.d/99-sysctl.conf:
net.ipv4.ip_forward = 1
# sysctl -p /etc/sysctl.conf
Tell iptables to please forward
iptables -A FORWARD -i br0 -o wlp2s0 -j ACCEPT
iptables -t nat -A POSTROUTING -o wlp2s0 -j MASQUERADE
iptables -A FORWARD -i wlp2s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
(This does not persist across reboots)
Configure the qemu bridge helper
write allow br0
in /etc/qemu/bridge.conf
let qemu-bridge-helper do its thing:
$ sudo chmod u+s /usr/lib/qemu/qemu-bridge-helper
And finally
$ qemu-system-x86_64 -cpu host -enable-kvm -m 2048 \
-nic bridge,br=br0,mac=52:54:28:86:30:65,model=virtio \
-device virtio-scsi-pci,id=scsi \
-drive if=none,id=vd0,file=vm.qcow2.img \
-device scsi-hd,drive=vd0
(or whatever else, set the MAC to something unique - the only important part here is the -nic)
—cosarara