Não é possível adicionar vxlan à interface de ligação

Não é possível adicionar vxlan à interface de ligação

Estou tentando adicionar vxlan100 à interface bond0, mas não parece estar funcionando

Aqui estão os comandos. Eu tenho uma interface wg0 (wireguard) na qual estou criando L2 vxlan100.

sudo ip link add vxlan100 type vxlan id 100 dev wg0 
sudo ip link add bond0 type bond
echo 0 > /sys/class/net/bond0/bonding/mode

sudo ip link set vxlan100 master bond0

No entanto, a última linha "sudo ip link set vxlan100 master bond0" me dá um erro

RTNETLINK answers: Invalid argument

Por favor me ajude, não tenho certeza de onde errei.

Responder1

A reprodução disso obtém uma mensagem específica do kernel por meio de dmesg:

bond0: (slave vxlan100): Error -22 calling dev_set_mtu

(e temos EINVAL = 22 = Argumento inválido)

Então é sobre MTU. Na verdade, o WireGuard tem sobrecarga de MTU, então normalmente está em MTU 1420, eVXLANusará o MTU da interface pai menos 50 bytes (20 (cabeçalho IP) + 8 (cabeçalho UDP) + 8 (cabeçalho específico de VXLAN) + 14 (cabeçalho MAC) = 50). 1420-50=1370 MTU. Alguns testes mostram que o MTU da VXLAN não pode ser definido para um valor superior ao seu valor inicial: 1370 (mas pode ser definido para um valor inferior) ou obteria um EINVAL.

Ao definir vxlan100como bond0escravo de ', o kernel tenta definir o MTU da interface escrava para o MTU de sua interface mestre com seu padrão de 1500, mas isso falha devido ao acima: vxlan100O MTU de ' não pode ser aumentado além de 1370.

Para que a operação seja bem-sucedida, o MTU do mestre deve ser reduzido antecipadamente:

ip link set dev bond0 mtu 1370

Portanto, os comandos abaixo (reordenados, abreviados e corrigidos para usar a porta 4789 atribuída pela IANA) funcionarão:

ip link add name bond0 mtu 1370 type bond mode balance-rr
ip link add name vxlan100 master bond0 type vxlan id 100 dev wg1 dstport 4789

Nota: as informações sobre o MTU máximo não parecem estar disponíveis ip -d link show dev vxlan100onde existe maxmtu 65535. Não sei se é um bug ou outra propriedade indisponível.

Para evitar ter que adivinhar o MTU correto, pode-se usar a saída JSON e ojqcomando para copiar vxlan100o MTU para bond0:

ip link add name vxlan100 type vxlan id 100 dev wg0 dstport 4789
ip link add name bond0 mtu $(ip -json link show dev vxlan100 | jq -r '.[].mtu') type bond mode balance-rr
ip link set dev vxlan100 master bond0

É claro que MTU semelhante deve ser usado em todos os outros locais relacionados (por exemplo: os outros escravos bond0e o link de peer com o qual bond0se comunica), ou outros problemas relacionados ao MTU serão esperados. O contrário, para manter um MTU de 1.500 bond0: ter o WireGuard no MTU 1.550 e, portanto, com a camada externa com um MTU de 1.630, não parece fácil de conseguir.

informação relacionada