Não é possível definir o endereço MAC para tocar na interface usando systemd-networkd

Não é possível definir o endereço MAC para tocar na interface usando systemd-networkd

Estou tentando migrar algumas configurações de interfaces de toque de tunctlpara systemd-networkd. Estou usando o systemd versão 215-8. Então eu tenho esse test.netdevarquivo:

[Match]

[NetDev]
Name=tap_test
Kind=tap
MACAddress=1:2:3:4:5:6

e um test.networkarquivo:

[Match]
Name=tap_test

[Network]
Description=tap interface
Address=1.2.3.4/24

Isso supõe que substitua o comando

ifconfig tap_test \
1.2.3.4 \
netmask  255.255.255.0 \
hw ether 1:2:3:4:5:6 up

que costumava ser executado após o tunctlcomando.

O resultado é bom, exceto pelo fato de o endereço MAC não ter sido configurado corretamente. Na documentação do systemd (para versão 215) diz que o endereço MAC deve ser configurado no .netdevarquivo da [NETDEV]seção. (Eu sei, em versões posteriores systemdo endereço MAC é configurado em .networkarquivos correspondentes, mas não é o caso)

Responder1

Citarsystemd.netdev(5):

O endereço MAC a ser usado para o dispositivo. [...] Esta chave não é atualmente suportada para dispositivos "tun" ou "tap".

De acordo comcommit do sistema e0fbf1fcffe014d5af6767b29f9108c2f2444888, isso nunca foi possível. A partir do systemd v215, esta limitaçãonão é mencionadona página de manual, o que era um aparente bug de documentação naquela versão.

Responder2

Você pode definir o endereço MAC da interface tun/tap com o utilitário ip:

ip link set address {MAC_ADDR} dev {DEVICE}

Na verdade, no caso de migração para kernels modernos, sugere-se usar iproute2em vez de net-tools, porque usa rare ioctlem vez de mais recente netlink.

informação relacionada