Escenario

Client (Linux o Windows):
eth1: 10.2.0.15 (/24)

Server (Linux):
eth1: 192.168.2.10 (/24)
eth2: 192.168.1.10 (/24)
default gw: 192.168.1.1

Problema

El cliente no puede hacer ping al server a la eth1. El ping a la eth2 sí funciona. Una vez hecho el ping a la eth2, ya funciona el de la eth1.

¿Por qué?

El cliente manda un paquete icmp a 192.168.2.10, y este paquete icmp llega sin problema a la eth1 del server. El problema es la vuelta. Como las ip’s están en distintas, el paquete de vuelta tiene que ir primero al default gw. Si no tenemos la mac del default gw, el equipo lanza un arp-request con ip de origen 192.168.2.10 (es esta interfaz la que quiere mandar el paquete icmp). Cuando el arp-request llega al default gw (un switch generalmente) éste hace un drop del paquete porque la ip de origen 192.168.2.10 no está en la misma subred que el gw 192.168.1.1. ¡Este es el problema!

Solución

A día de hoy, la solución más factible que he encontrado es que el server linux mande el arp-request con la ip origen que corresponda, independientemente de cuál debería ser realmente. En este caso, la ip origen del arp-request debería ser 192.168.1.10, para que el gw responda.
Este comportamiento se puede configurar en Linux. Para ello, añadimos la línea net.ipv4.conf.all.arp_announce = 1 al fichero /etc/sysctl.conf

Y notificamos al kernel:

Me habría gustado encontrar la forma de configurar el switch (en mi caso un HP8206) para que respondiera al arp, pero no he encontrado manera.
Otra opción al menos en teoría sería lanzar arp gratuitos en la red, con la mac del switch, pero vaya traperada 🙂

Más info

Este hilo me dio una pista para descubrir el problema: http://www.gossamer-threads.com/lists/nsp/juniper/28131
Pregunté en stackoverflow a ver si sabían algo: http://stackoverflow.com/questions/19242777/respond-arp-request-from-a-different-subnet
arp_announce documentation: http://kb.linuxvirtualserver.org/wiki/Using_arp_announce/arp_ignore_to_disable_ARP

Linux y sus arp-request

Deja un comentario

Tu dirección de correo electrónico no será publicada.