A interface física MAC em vez de macvlan MAC é enviada como resposta ARP [fechada]

4

No Kernel 4.4.37 do Arch Linux ARM (Raspberry Pi), criei um macvlan, por exemplo

ip link add link eth0 mac0 type macvlan

A placa de rede virtual macvlan, em seguida, aparece na lista, então eu atribuo a ela um endereço IP e defino o estado do link como up. (By the way, eu tentei com os modos bridge , vepa e private .)

Eu posso pingar o IP dos meus clientes Windows, mas quando eu checo o cache ARP ( arp -a ) no Windows, eles mostram o mesmo endereço MAC que o adaptador de rede principal (físico), não o recém-criado macvlan Endereço MAC.

Certifiquei-me de limpar o cache do ARP para tentar um endereço IP que os clientes não tinham visto antes, etc., mas sempre mostra o MAC errado.

Quando criei uma entrada ARP estática para o cliente Windows para o endereço MAC macvlan e executei ping no endereço IP relevante, o tcpdump mostra a solicitação de eco que chega na interface macvlan e não mostra nada na main ( física) interface, e recebo uma resposta ping no meu cliente windows (uma vez eu lembrei de configurar a regra iptables para permitir o tráfego!)

Assim que eu limpo o cache do ARP no cliente e faço ping novamente, ainda recebo uma resposta de ping, mas desta vez a entrada do ARP foi revertida para a do adaptador de rede física principal na caixa do Linux.

Ficou imaginando o que eu estaria fazendo de errado?

    
por bao7uo 12.12.2016 / 21:31

2 respostas

2

Para que isso funcione para mim, tive que adicionar um passo à resposta aceita e definir a seguinte variável adicional:

net.ipv4.conf.all.rp_filter=2

Não precisei definir arp_ignore para 2, 1 pareceu funcionar. Eu também não precisei definir arp_filter para 1 na minha rede.

Então a solução completa para mim foi:

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.all.rp_filter=2

Encontrei a solução para o meu problema aqui

    
por 03.05.2018 / 02:49
5

Basicamente, nada está errado aqui. É assim que o kernel do Linux funciona em relação à resolução ARP - por padrão, ele responderá a solicitações ARP para qualquer um de seus endereços locais, independentemente da interface em que eles estiverem entrando, mesmo se o endereço solicitado estiver em uma interface diferente.

Para contornar isso, você precisa ajustar duas variáveis sysctl:

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

Pode ser necessário alterar o valor de arp_ignore para 2 e também definir arp_filter para 1, dependendo do cenário de seus endereços IP / sub-redes.

Para uma descrição completa das opções disponíveis para estas variáveis, por favor dê uma olhada em kernel.org documentação .

    
por 21.12.2016 / 16:18