
¿Qué sucede si un host en la red recibe un paquete IP con una dirección MAC de origen que difiere de la dirección MAC en la tabla ARP local para esa IP de origen?
La entrada de la tabla ARP para esa IP se completó y se completará mediante una respuesta ARP válida.
Ahora me he dado cuenta de que el host receptor (Ubuntu 18.04) no envía un paquete de respuesta (respuesta de eco ICMP o TCP SYN/ACK... etc.). Ningún paquete de respuesta sale de la interfaz.
La pregunta ahora es por qué el anfitrión se comporta de esta manera. ¿Qué comprobaciones se realizan con las direcciones MAC e IP del paquete, la tabla arp local y la tabla de enrutamiento, etc.?
Editar:
Para aclarar el escenario:
Si el host Hb envía una solicitud de ping a 10.2.0.5 (host Ha), Ha recibe un paquete ICMP con la IP de origen 10.1.0.3 y la dirección MAC de origen es la dirección MAC del enrutador. Pero la tabla ARP del host Ha tiene una entrada: 10.1.0.3 -> Dirección MAC de Hb. ¡Por lo tanto, las direcciones MAC difieren!
Respuesta1
Este comportamiento es completamente esperado y está relacionado con la configuración de enrutamiento del Hb
host, que probablemente solo tenga la ruta predeterminada a través del enrutador. Entonces, si no ha configurado la ruta adicional, los paquetes a la N2
red ( 10.2.0.0/24
) se envían a través de la ruta predeterminada.
Entonces, el problema se debe a que se ha habilitado el filtro de ruta inversa en el Ha
host, que descarta los paquetes entrantes debido a restricciones en la dirección de origen.
Para solucionar este problema, debe verificar el resultado de los siguientes comandos en el Ha
host:
ip netconf show dev <iface-N2>
- comprobar elrp_filter
valor. Probablemente lo seastrict
.ip route get 10.2.0.5 from 10.1.0.3 iif <iface-N2>
- Probablemente mostrará algo comoinvalid cross-device link
.nstat -az TcpExtIPReversePathFilter
- Es probable que tenga un valor distinto de cero.
Hay tres formas inconscientes de resolver el problema:
Simplemente desactive
rp_filter
en elHa
host con sysctl (sysctl -w net.ipv4.conf.all.rp_filter=0
ysysctl -w net.ipv4.conf.<iface-N2>.rp_filter=0
). Además, debe editar el/etc/sysctl.conf
archivo para que estos cambios sean permanentes.Simplemente agregue la ruta en el
Hb
host a la dirección10.2.0.5
directa10.1.0.5
(comando para Linuxip route add 10.2.0.5 via 10.1.0.5
, para Windowsroute add 10.2.0.5 mask 255.255.255.255 10.1.0.5
)Configure la traducción de la dirección de origen (NAT) en el enrutador para reescribir la dirección del
Hb
enrutador. La regla de iptables para hacerlo:
iptables -t nat -A POSTROUTING -o <iface-N2> --src 10.1.0.3 --dst 10.2.0.5 -j MASQUERADE