Networking
vee supports two networking modes: user-mode NAT and bridge.
The default mode for most templates. QEMU handles NAT transparently — no host configuration needed. The VM gets outbound internet access and vee forwards SSH via a random host port.
Limitations: the VM is not reachable from other hosts on the LAN, and inbound connections other than SSH require vee tunnel.
Bridge mode puts the VM directly on the LAN. The VM gets a real IP from your router’s DHCP server and is reachable from any device on the network. Required for TrueNAS, gaming VMs, and any workload that needs to be a real LAN host.
Create /etc/systemd/network/20-br0.netdev:
[NetDev]
Name=br0
Kind=bridge
Create /etc/systemd/network/21-br0-bind.network (replace enp6s0 with your physical interface):
[Match]
Name=enp6s0
[Network]
Bridge=br0
Create /etc/systemd/network/22-br0.network:
[Match]
Name=br0
[Network]
DHCP=yes
Enable and start:
sudo systemctl enable --now systemd-networkd
sudo networkctl reload
QEMU needs permission to attach to the bridge without root:
echo "allow br0" | sudo tee /etc/qemu/bridge.conf
sudo chmod u+s /usr/lib/qemu/qemu-bridge-helper
In ~/.vee/vms/<name>/vm.yaml:
nic:
mode: bridge
bridge: br0
model: virtio-net-pci
mac: 52:54:54:xx:xx:xx # assign a stable MAC so DHCP gives a stable IP
Or pass --nic-mode bridge to vee create.
VMs that use raw block device passthrough (TrueNAS, custom NVMe) require your user to be in the disk group:
sudo usermod -aG disk $USER