By default, an instance of dnsmasq dhcpd server is automatically configured and started by libvirt for each virtual network switch needing it. Each virtual network switch can given a range of IP addresses provided to guests through DHCP. The default networking switch uses dnsmasq server.
Fig.01: Libvirt uses a program, dnsmasq for DNS and DHCP for default network.
View the current dnsmasq DHCP configuration
Type the following command to list networks
# virsh net-list
Sample outputs:
Name State Autostart Persistent ---------------------------------------------------------- default active yes yes
To see the default network information, enter:
# virsh net-dumpxml default
Sample outputs:
<network connections='2'> <name>default</name> <uuid>e346291e-f86b-4f2f-a16e-654136441805</uuid> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:12:fe:35'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.100' end='192.168.122.254'/> </dhcp> </ip> </network>
The DHCP range is between 192.168.122.100 and 192.168.122.254.
How to configure static guest IP addresses on the VM host
First find out your guest VM’s MAC addresses, enter:
# virsh dumpxml {VM-NAME-HERE} | grep -i '<mac'
# virsh dumpxml xenial | grep -i '<mac'
Sample outputs:
<mac address='52:54:00:4c:40:1c'/>
Please note down the MAC addresses of the xenial VM that you want to assign static IP addresses.
Edit the default network
Type the following command:
# virsh net-edit default
Find the following section:
<dhcp> <range start='192.168.122.100' end='192.168.122.254'/>
Append the static IP as follows after range:
<host mac='52:54:00:4c:40:1c' name='xenial' ip='192.168.122.4'/>
Where,
- mac='52:54:00:4c:40:1c' – VMs mac address
- name='xenial' – VMs name.
- ip='192.168.122.4' – VMs static IP.
Here is my complete file with three static DHCP entries for three VMs:
<network> <name>default</name> <uuid>e346291e-f86b-4f2f-a16e-654136441805</uuid> <forward mode='nat'/> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:12:fe:35'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.100' end='192.168.122.254'/> <host mac='52:54:00:a0:cc:19' name='centos7' ip='192.168.122.2'/> <host mac='52:54:00:f7:a1:c8' name='puffy' ip='192.168.122.3'/> <host mac='52:54:00:4c:40:1c' name='xenial' ip='192.168.122.4'/> </dhcp> </ip> </network>
Restart DHCP service:
# virsh net-destroy default
# virsh net-start default
Sample outputs:
Network default destroyed Network default started
If you are running the guest/VM called xenial shutdown it:
# virsh shutdown xenial
# /etc/init.d/libvirt-bin restart
# virsh start xenial
# ping -a 192.168.122.4
Sample outputs:
PING 192.168.122.4 (192.168.122.4) 56(84) bytes of data. 64 bytes from 192.168.122.4: icmp_seq=1 ttl=64 time=0.518 ms 64 bytes from 192.168.122.4: icmp_seq=2 ttl=64 time=0.202 ms 64 bytes from 192.168.122.4: icmp_seq=3 ttl=64 time=0.327 ms ^C --- 192.168.122.4 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.202/0.349/0.518/0.129 ms
Each time the guest or VM called xenial comes online (or rebooted for the kernel update) it will get 192.168.122.4 as static IP address by dnsmasq DHCP server.
🐧 4 comments so far... add one ↓
Category | List of Unix and Linux commands |
---|---|
File Management | cat |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Network Utilities | dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • jobs • killall • kill • pidof • pstree • pwdx • time |
Searching | grep • whereis • which |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
good job :)
But during destroy and start, all vm-s which are connected via this bridge lost their connection, and you must have shut and start VM-s again.
There is any command to reload libvirt net configuration without destroy it?
Nope.
Suppose I have a KVM under work. I want to add a guest, But I don’t want to stop my network. How do I do ?