у меня получилось только так
network:
version: 2
renderer: networkd
ethernets:
lo:
dhcp4: false
macaddress: "нужный мас"
match:
macaddress: "текущий мак"
enp5s0:
dhcp4: yes
dhcp6: false
при этом с lo интерфейсом ничего не происходит, так-как он ищет соответствие по мас адресу. А если в enp5s0 это написать, он мас меняет, но потом не пускает интерфейс.
Способ через udev более вменяем, ну покрайне мере я через него организавал.
создаём файл /etc/udev/rules.d/69-net.rules и добавляем в него
ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="текущий мак", RUN+="/sbin/ip link set dev %k address нужный мас"