How to configure qemu to have an IP to access outside network?

Hi All,

I’m running a qcow2 image with qemu, and host is fedora VM without KVM support. I run the image via virt-install:

virt-install  --name lchen \
                                      --memory 2048  --cpu host --vcpus 2 --graphics none \
                                      --os-variant xxx\
                                      --import  \
                                      --disk ./xxx.qcow2,format=qcow2,bus=virtio \
                                      --network type=direct,source=eth0,source_mode=bridge,model=virtio \
                                      --network bridge=virbr0,model=virtio

Currently, the qemu guest system doesn’t have any IP:

root@localhost:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 52:54:00:e0:80:4d brd ff:ff:ff:ff:ff:ff
3: enp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 52:54:00:44:f1:f0 brd ff:ff:ff:ff:ff:ff

Below is the host network(fedora VM):

root@host-fedora /e/libvirt# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:16:3e:38:a4:5f brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.26.158.52/20 brd 172.26.159.255 scope global dynamic noprefixroute eth0
       valid_lft 314574072sec preferred_lft 314574072sec
    inet6 fe80::3e36:85ed:48e9:4ae/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
12: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:6e:b1:af brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
13: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:89:9c:87:ea brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:89ff:fe9c:87ea/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
18: macvtap1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 500
    link/ether 52:54:00:e0:80:4d brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5054:ff:fee0:804d/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
19: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master virbr0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:44:f1:f0 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe44:f1f0/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever

libvirtd is not active because lacking KVM support:

root@host-fedora /e/libvirt# systemctl status libvirtd
○ libvirtd.service - Virtualization daemon
     Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: inactive (dead) since Sat 2024-03-30 15:15:17 CST; 49min ago
   Duration: 47.395s
TriggeredBy: ● libvirtd-tcp.socket
             ● libvirtd-admin.socket
             ● libvirtd-ro.socket
             ○ libvirtd-tls.socket
             ● libvirtd.socket
       Docs: man:libvirtd(8)
             https://libvirt.org
   Main PID: 45877 (code=exited, status=0/SUCCESS)
        CPU: 767ms

Mar 30 15:14:30 aliyun-host-fedora libvirtd[45877]: gssapiv2_client_plug_init() failed in sasl_server_add_plugin(): generic failure
Mar 30 15:14:30 aliyun-host-fedora libvirtd[45877]: _sasl_plugin_load failed on sasl_server_plug_init for plugin: gssapiv2
Mar 30 15:14:30 aliyun-host-fedora systemd[1]: Started libvirtd.service - Virtualization daemon.
Mar 30 15:14:30 aliyun-host-fedora libvirtd[45877]: libvirt version: 9.7.0, package: 2.fc39 (Fedora Project, 2024-01-03-22:32:21, )
Mar 30 15:14:30 aliyun-host-fedora libvirtd[45877]: hostname: aliyun-host-fedora
Mar 30 15:14:30 aliyun-host-fedora libvirtd[45877]: Unable to open /dev/kvm: No such file or directory
Mar 30 15:14:30 aliyun-host-fedora libvirtd[45877]: Unable to open /dev/kvm: No such file or directory
Mar 30 15:15:17 aliyun-host-fedora systemd[1]: Stopping libvirtd.service - Virtualization daemon...
Mar 30 15:15:17 aliyun-host-fedora systemd[1]: libvirtd.service: Deactivated successfully.
Mar 30 15:15:17 aliyun-host-fedora systemd[1]: Stopped libvirtd.service - Virtualization daemon.

So my question is how to configure qemu guest system to have an IP to access outside network?

Add a bridge network device then configure your VM to use the bridge.

Once that is done the VM can get an address from the DHCP server on your network, just like your QEMU host did.

1 Like