A rota ip afetará o protocolo ARP?

A rota ip afetará o protocolo ARP?

Criei uma interface de rede macvlan mac0no meu host. Meu contêiner docker também ingressou em uma rede macvlan que possui a mesma interface pai do mac0.

Depois de executar as etapas acima, ainda não consigo acessar pingmeu mac0ip do contêiner do docker. No entanto, depois de adicionar uma rota ao meu host com este comando:

ip route add <container_ip> dev mac0

Posso executar ping mac0com sucesso no ip do meu contêiner.

Antes de adicionar a rota, uso tcpdump -i mac0 host <mac0_ip>para ver o que está acontecendo. Parece que o mac0 simplesmente não responde à solicitação ARP:

#tcpdump -i mac0 host 21.26.21.104
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on mac0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:19:51.218288 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:19:52.219645 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:19:53.221646 ARP, Request who-has <host_name> tell 21.26.21.102, length 28

Depois de adicionar a rota:

#tcpdump -i mac0 host 21.26.21.104
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on mac0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:21:46.318010 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:21:46.318033 ARP, Reply <host_name> is-at <mac> (oui Unknown), length 28
20:21:46.318038 IP 21.26.21.102 > <host_name>: ICMP echo request, id 750, seq 1, length 64
20:21:46.318062 IP <host_name> > 21.26.21.102: ICMP echo reply, id 750, seq 1, length 64

Eu sei que a subinterface macvlan não pode se comunicar diretamente com a interface pai. O que não sei é por que a rota IP pode afetar o protocolo ARP que acho que está funcionando na camada de rede L2?

Responder1

ARP não é um protocolo independente; ele é usado como um protocolo auxiliar por IP, para resolver endereços da camada 3 em endereços da camada 2. Embora seja tecnicamente um protocolo genérico, é praticamente sempre utilizado apenas para IPv4 e quase pode ser considerado parte do IPv4. (E para efeito de comparação, no IPv6 a mesma funcionalidade é feita no ICMPv6, que é indiscutivelmenteacimaIP.)

Como o ARP é usado para obter a configuração IP, a pilha IP tem autoridade total para decidir quais interfaces devem receber quais respostas ARP. Por exemplo, alguns sistemas operacionais responderão a consultas ARP para qualquer endereço em qualquer interface, enquanto outros o restringirão a endereços da mesma interface da consulta.(No Linux você pode selecionar qualquer um dos comportamentos alterando "arp_ignore".)

Linux tem várias outras limitações de ARPsysctls, e um em particular é arp_filter, que, se ativado, informa ao sistema operacional para ignorar consultas ARP se o endereço IP do solicitante tiver sido roteado por meio de uma interface diferente. Isso parece semelhante ao seu problema.

informação relacionada