NetworkManager dnsmasq - libvirtd

Jan 1, 2021

Once configured, you’ll be able to talk to libvirtd VM’s using their hostname, rather than having to know the IP address.

Forward DNS requests to libvirt’s Domain

Libvirt uses it’s own built-in dnsmasq instance for serving DHCP and DNS to the VM’s in the virtual network.

We’ll configure NetworkManager’s dnsmasq to forward requests to the libvirt instance.

/etc/NetworkManager/dnsmasq.d/libvirt.conf

server=/vm/192.168.122.1

Now when we try to access hostname.vm, we’ll be forwarded to 192.168.122.1 (the IP for libvirt’s default virtual network DHCP server).

When testing with terraform, usign the libvirt provider, I create a terraform specific virtual network. So I have server=/terraform.vm/10.0.100.1 included in this config file (hostname.terraform.vm).

Configuring libvirt

Now we need to configure libvirt so that it resolves DNS requests with this domain name.

Either using the XML editor in virt-manager or virsh --connect qemu:///system net-edit default:

<network>
  <name>default</name>
  <uuid>82539b71-a83e-4fb9-9cb4-af22f89206b0</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:51:bd:3f'/>
  <!-- Add this line -->
  <domain name='vm' localOnly='yes'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>