![¿La ruta IP afectará el protocolo ARP?](https://rvso.com/image/1604261/%C2%BFLa%20ruta%20IP%20afectar%C3%A1%20el%20protocolo%20ARP%3F.png)
Creé una interfaz de red macvlan mac0
en mi host. Mi contenedor Docker también se unió a una red macvlan que tiene la misma interfaz principal que mac0
.
Después de realizar los pasos anteriores, todavía no puedo acceder ping
a mi mac0
IP desde el contenedor Docker. Sin embargo, después de agregar una ruta a mi host con este comando:
ip route add <container_ip> dev mac0
Puedo hacer ping a mac0
ip exitosamente desde mi contenedor.
Antes de agregar la ruta, suelo tcpdump -i mac0 host <mac0_ip>
ver qué está pasando. Parece que mac0 simplemente no responde la solicitud 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
Después de agregar la ruta:
#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
Sé que la subinterfaz macvlan no puede comunicarse directamente con la interfaz principal. Lo que no sé es por qué la ruta IP puede afectar el protocolo ARP, que creo que funciona en la capa de red L2.
Respuesta1
ARP no es un protocolo independiente; IP lo utiliza como protocolo auxiliar para resolver direcciones de capa 3 en direcciones de capa 2. Aunque técnicamente es un protocolo genérico, prácticamente siempre se utiliza únicamente para IPv4 y casi podría considerarse parte de IPv4. (Y a modo de comparación, en IPv6 se realiza la misma funcionalidad en ICMPv6, que posiblemente seaarribaPI.)
Dado que se utiliza ARP para obtener la configuración de IP, la pila de IP tiene plena autoridad para decidir qué interfaces deben recibir qué respuestas ARP. Por ejemplo, algunos sistemas operativos responderán a consultas ARP para cualquier dirección en cualquier interfaz, mientras que otros lo restringirán a direcciones de la misma interfaz que la consulta.(En Linux puedes seleccionar cualquiera de los dos comportamientos cambiando "arp_ignore".)
Linux tiene varias otras limitaciones de ARPsistemas, y uno en particular es arp_filter
, que, si está habilitado, le indica al sistema operativo que ignore las consultas ARP si la dirección IP del solicitante se hubiera enrutado a través de una interfaz diferente. Esto parece similar a su problema.