Skip to content

Instantly share code, notes, and snippets.

@gdamjan
Last active March 23, 2024 15:58
Show Gist options
  • Save gdamjan/ed095763b8c322ee5bed17e11bbaed6d to your computer and use it in GitHub Desktop.
Save gdamjan/ed095763b8c322ee5bed17e11bbaed6d to your computer and use it in GitHub Desktop.
libvirt with ipvtap over wifi

ipvtap over wifi for libvirt

ipvtap is similar to macvtap, but works over wifi too, since it uses the same mac address as the wifi interface.

libvirt doesn't support ipvtap, so we have to configure everything manually. Important data we need before we start:

  • the name of the wifi interface, wlan0 in my case (it's already connected - use NM or networkd+iwd).
  • the mac address of the wifi interface (it must be the same in the guest too)

On the host:

sudo ip link add name ipvtap0 link wlan0 type ipvtap  mode l2 bridge
sudo ip link set up ipvtap0

The network interface for the guest is configured via the following xml using the mac address from wlan0/ipvtap0:

<interface type="ethernet">
  <mac address="f8:d1:11:18:81:c3"/>
  <target dev="ipvtap0" managed="no"/>
  <model type="virtio"/>
  <alias name="net0"/>
  <address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/>
</interface>

⚠️ DHCP is a … bit complicated

Now, I can start the VM, but I can't ping from/to router to/from the VM, until I configure the guest address on the host ipvtap0 too:

sudo ip addr add dev ipvtap0 192.168.17.111/32

this might be fixable with some proxy-arp?

Tested on:

Host:

  • Archlinux, 5.6.15-arch1-1
  • libvirt 6.4.0-1
  • qemu-headless 5.0.0-6

Guest:

  • Archlinux testing, 5.7.0-zen1-1-zen
@xalt7x
Copy link

xalt7x commented Oct 15, 2023

Thanks for this instruction. It helped me to get the wifi bridged network working without parprouted or over-complicated settings.
I guess it's better to remove this part

  <alias name="net0"/>
  <address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/>

virt-manager didn't allow me to save the config because the "bus" had already been bound to another device.

XML error: Attempted double use of
PCI Address 0000:05:00.0

So I just deleted the "address" line and virt-manager added the missing part itself with a free bus number. Same with the"alias" part.


Also, it's worth noting that the IP address needs to be manually set on a guest.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment