Many MAAS users start in labs with Multipass, LXD, or KVM before moving to bare metal. These environments introduce quirks that can derail provisioning if not configured carefully. This appendix provides working patterns and recipes for lab setups that coexist peacefully with MAAS.
Principles for Lab Networking
- Eliminate rogue DHCP: Libvirt and LXD spawn dnsmasq by default, which collides with MAAS DHCP. Disable or isolate them.
- Prefer bridges over NAT: Nodes must be on the same L2 domain as MAAS rack controllers for DHCP/PXE.
- Control VLANs explicitly: If your host uplink is a trunk, create VLAN interfaces and bridges intentionally.
- Keep one clear default path: Avoid multiple services answering TFTP/DHCP/DNS on the same segment.
Multipass Labs
Problem: Multipass launches VMs with a NAT network and its own dnsmasq. Nodes cannot reach MAAS DHCP.
Solution:
- Launch Multipass with a bridged interface to the physical network:
multipass launch --network enp3s0 --name maas-node
- Ensure the host does not run its own DHCP on that bridge.
- Use
multipass shellto log in and confirmip ashows the correct VLAN/subnet.
Tips:
- Multipass often prefers cloud-init. Disable conflicting cloud-init net config if using MAAS-managed DHCP.
LXD Labs
Problem: Default lxdbr0 includes dnsmasq. Nodes get DHCP from LXD, not MAAS.
Solution:
- Delete or disable the default LXD network:
lxc network delete lxdbr0
- Create a bridge tied to the host NIC:
lxc network create br0 bridge.driver=bridge ipv4.address=none ipv6.address=none
lxc network attach br0 <container> eth0
- Confirm MAAS DHCP leases appear in the UI.
Tips:
- LXD containers are not PXE-bootable by default. Use LXD VMs with UEFI and the
--vmflag for true PXE.
KVM/Libvirt Labs
Problem: Libvirt’s default network virbr0 runs dnsmasq, which conflicts with MAAS.
Solution:
- Disable the default network:
virsh net-destroy default
virsh net-undefine default
- Create a host bridge and bind it to the physical NIC:
<network>
<name>br0</name>
<forward mode='bridge'/>
<bridge name='br0'/>
</network>
- Attach VMs to
br0. Ensure boot firmware is set to network first.
Tips:
- Use VirtIO NICs for performance, or e1000 for maximum PXE compatibility.
- If VLAN trunking, add
<vlan>XML entries to match MAAS fabrics.
Nested Virtualization
- Ensure the outer hypervisor passes through correct NIC features.
- Enable promiscuous mode on VMware/ESXi port groups if nesting MAAS inside.
- Some UEFI firmwares in nested VMs lack HTTPBoot; fall back to legacy PXE + TFTP.
Cookbook: Host Bridge on Ubuntu
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
enp3s0:
dhcp4: no
bridges:
br0:
interfaces: [enp3s0]
dhcp4: no
addresses: [192.168.1.10/24]
gateway4: 192.168.1.1
nameservers:
addresses: [192.168.1.1]
Apply with:
sudo netplan apply
Attach Multipass, LXD, or Libvirt VMs to br0 to share the same L2 domain as MAAS.
Troubleshooting Checklist for Labs
- Run
ps aux | grep dnsmasqon the host; kill unwanted dnsmasq processes. - Run
tcpdump -i br0 '(port 67 or 68)'while booting a VM to confirm DHCP from MAAS, not the host. - Check MAAS UI leases to ensure lab VMs appear.
- Verify TFTP/HTTP boot files served from the rack are accessible from lab VMs.
Patterns That Work
- Single NIC host: Bridge NIC into
br0, attach VMs directly. - Dual NIC host: Dedicate one NIC to lab VLAN, one for host management.
- Nested hypervisors: Always enable promiscuous mode and disable NAT.
- Cloud labs (AWS/GCP/Azure): MAAS not recommended due to lack of PXE broadcast, unless overlay networks are engineered.
Next Steps
This closes the main troubleshooting reference set. Combine these appendices with the checklists, tools, and playbooks to build your own standardized runbooks and evidence bundles.