❓ What?

Everytime a systemctl restart networking is run on Proxmox or the host is rebooted, the bridges vmbr{0,1,2..} are assigned different MAC Addresses. Normally this is fine but as I am running my home router as VM, and all traffic needs to pass through it for internet access and inversely, the router needs to assign a static, private address to the proxmox host via a static DHCP lease, changing MAC addresses would mean different IP assignments.

Also, these MAC addresses are also set on the tap/veth interfaces created by Proxmox for VM/CT network communication.

🎤 How?

For a bridge to have a static MAC address, use the hwaddress directive for ifupdown2 instead of the bridge_hw directive that used to work with ifupdown.

For example:

auto vmbr0
iface vmbr0 inet static
	bridge-ports none
	bridge-stp off
	bridge-fd 0
    hwaddress 12:34:56:78:91:bc

would result in:

root@minipc01-at-home:~# ip a
10: tap1001i0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 12:c4:9c:91:9a:38 brd ff:ff:ff:ff:ff:ff
    inet brd scope global dynamic tap1001i0
       valid_lft 42012sec preferred_lft 42012sec
    inet6 fe80::10c4:9cff:fe91:9a38/64 scope link
       valid_lft forever preferred_lft forever
11: vmbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 12:34:56:78:91:bc brd ff:ff:ff:ff:ff:ff
    inet scope global vmbr0
       valid_lft forever preferred_lft forever

👓 References