Using Proxmox over WiFi

I read many times that using Proxmox with WiFi does not work well, and indeed there are some challenges compared to a wired connection. The setup I describe here will work for regular home environments. Using Proxmox with WiFi is most definitely not recommended for production use cases. In most cases using a Ethernet device, even via USB is the better - and easier, approach.

In most cases, Linux refuses to use a WiFi adapter as a bridge port. Because of this, we will use an ARP proxy, which forwards ARP requests between two interfaces. The setup requires an IP address on all interfaces involved. I am using DHCP for the wireless interface itself, which is the default in my network and allows me to establish a connection quickly. Note that parprouted only supports unicast traffic. If, for some reason, you want to use DHCP on the bridge device as well, you will need to install a DHCP relay. Also other services, which require multicast (e.g. mDNS, some streaming solutions) will not work.

Prerequisites

I had good experiences using Ventoy for USB stick creation. It provides a partition for ISO files; during startup you can select which ISO you want to boot. For our WiFi setup, this comes in handy because you can also place the required Debian packages on the stick.

In any case, you will need to prepare a USB device with the packages listed below:

PackageDependenciesRemark
wpasupplicantlibnl-genl-3-200, libpcsclite1-
iwwireless-regdb-
wireless-toolslibiw30t64offers some tools for debugging
isc-dhcp-client-only needed if you want to use DHCP
parprouted--

I have linked the Debian page for each main package. Please also check the “other packages related” sections to download the mentioned dependency packages. This ensures that you have the current version with matching dependencies.

Furthermore, if you are using Ventoy, make sure that the latest Proxmox installer ISO is available on your USB device. If you have an Ethernet adapter you can use for the setup process (e.g. a USB Ethernet card), I recommend using it. In this case, you can simply run apt-get update && apt-get install -y wpasupplicant iw wireless-tools isc-dhcp-client parprouted and jump to the "Finalizing the configuration" section of this tutorial.

 1root@pve02:/mnt/usb# ls -1
 2isc-dhcp-client_4.4.3-P1-8_amd64.deb
 3iw_6.9-1_amd64.deb
 4libiw30t64_30~pre9-18+b1_amd64.deb
 5libnl-genl-3-200_3.7.0-2_amd64.deb
 6libpcsclite1_2.3.3-1_amd64.deb
 7parprouted_0.70-4_amd64.deb
 8proxmox-ve_9.1-1.iso
 9wireless-regdb_2026.02.04-1~deb13u1_all.deb
10wireless-tools_30~pre9-18+b1_amd64.deb
11wpasupplicant_2.10-24_amd64.deb

Boot up your computer using the USB device. This guide cannot provide fully detailed instructions on how to boot from USB. You either have to disable Secure Boot or register the Ventoy key in your UEFI settings.

Setup

Follow the Proxmox installation process to the end. On the network settings tab, enter all data as you would for a wired connection. Once finished, reboot the machine. Make sure to boot from the hard drive and log in to Proxmox. Since the only user created during installation is root, I don’t use sudo in this tutorial.

You can determine your USB device using the lsblk command:

 1root@pve02:~# lsblk
 2NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
 3sda           8:0    0 931.5G  0 disk
 4├─sda1        8:1    0  1007K  0 part
 5├─sda2        8:2    0     1G  0 part
 6└─sda3        8:3    0   930G  0 part
 7sdb           8:16   1    15G  0 disk
 8├─sdb1        8:17   1  14.9G  0 part
 9└─sdb2        8:18   1    32M  0 part
10...

Depending on your installation, the output might be longer, but you should find an sdX device matching your USB stick by size, with two partitions. Note that device sizes are stated in GB (1000^3) while the output shows GiB (1024^3). For example, a 16 GB USB device is shown as 15G. In most cases, it will be sdb.

Assuming that you only have the packages from the list above on your USB device, you can run the following commands:

1# mount device
2mount /dev/sdX1 /mnt
3cd /mnt
4
5# install all packages
6dpkg -i *.deb
7
8# disable wpa_supplicant service
9systemctl disable --now wpa_supplicant

I am using DHCP for my wireless adapter, so in the next step I will only configure WiFi:

1# change SSID by your WiFi SSID (name) and apply your password, make sure to remove the clear text password from it
2wpa_passphrase SSID 'PASSWORD' | grep -v '#psk=' > /etc/wpa_supplicant/wpa_supplicant.conf
3
4# clear history from password and adjust file permissions
5history -d -2
6chmod 0600 /etc/wpa_supplicant/wpa_supplicant.conf

Next, identify your WiFi device. Check the output of ip link for devices starting with w.

1root@pve02:~# ip link
21: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
3    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
42: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
5    link/ether 12:34:56:78:90:ab brd ff:ff:ff:ff:ff:ff
6    altname wlx1234567890ab
76: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
8    link/ether cd:ef:12:34:56:78 brd ff:ff:ff:ff:ff:ff

In my case, the WiFi device is wlp3s0. If your device has a different name, adjust the configs below accordingly. In the next step we will bring the WiFi interface up and configure it. If you are not using DHCP, configure a static setup and provide the required details

/etc/network/interfaces

1auto lo
2iface lo inet loopback
3
4allow-hotplug wlp3s0
5iface wlp3s0 inet dhcp
6  wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Make sure the bridge is commented out or removed from the config.

You can now restart the network and check the IP address of your wireless device:

1service networking restart
2# or
3systemctl restart networking
4
5ip a s wlp3s0

It is recommended to either create a DHCP reservation for your WiFi interface or to use a static setup.

Finalizing the setup

You can now connect from a second device via SSH to your Proxmox machine to finalize the setup. Please make sure, that you still have physical access in case of problems.

First add your bridge to /etc/network/interfaces (again make sure to replace the name of your WiFi device):

 1auto lo
 2iface lo inet loopback
 3
 4allow-hotplug wlp3s0
 5iface wlp3s0 inet dhcp
 6  wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
 7
 8auto vmbr0
 9iface vmbr0 inet static
10    address 10.0.0.4/23 # Replace with your IP 
11    bridge-stp off
12    bridge-fd 0
13    bridge-ports none   # Important!
14    post-up /usr/sbin/parprouted wlp3s0 vmbr0
15    post-down /usr/bin/killall -q parprouted || true
16
17source /etc/network/interfaces.d/*

Further we must enable IP forwarding as well as ARP proxying in the kernel settings:

1cat > /etc/sysctl.d/99-parprouted.conf <<EOF
2net.ipv4.conf.wlp3s0.proxy_arp=1
3net.ipv4.conf.vmbr0.proxy_arp=1
4net.ipv4.ip_forward=1
5EOF
6
7sysctl --system

Now that the configuration is completed, we need to restart the network again.

1systemctl restart networking

This should be it. You can try to ping www.google.com to verify that everything works. You should also try to SSH to the configured IP address of your bridge device.

Troubleshooting

wpa_cli status provides an overview of the current WiFi connection status.

journalctl -g wpa_supplicant may show errors related to the wpa_supplicant startup.

There are also logs in /var/log/ifupdown2/.

If you reboot and don't even see the bridge, please check that the bridge-ports are set to none.