dos NIC en la misma subred: es necesario configurar el enrutamiento

dos NIC en la misma subred: es necesario configurar el enrutamiento

Tengo un caso complicado:

+---+                      +----+
|D1 +->eth0---------<-eth0-+D2  |
|   |                      |    |
|   +->eth1---------<-eth1-+    |
+---+                      +----+

En D2 eth0y eth1tener direcciones IP de la misma subred: eth0 10.1.1.1/24, eth1 10.1.1.2/24. Las interfaces en D1 no tienen direcciones asignadas y actúan como un interruptor.

Ahora, quiero que D2 pueda enviar el tráfico a 10.1.1.2través de eth0, por lo que la ruta del paquete debe ser: D2(eth0)--D1(eth0)--D1(eth1)--D2(eth1).

En el momento en que hago ping 10.1.1.2desde D2, envía paquetes localmente, es decir, D1 no recibe ninguno. ¿Qué debo cambiar en D2 para lograr el comportamiento deseado?

Gracias.

Respuesta1

Lo que quieres no es posible con Linux. Al menos no dentro de la capa de enrutamiento. Si una dirección de destino pertenece a una interfaz local, entonces el paquete siempre pasa a través de la interfaz de bucle invertido desde donde no puede (por RfC) enrutarse hacia el exterior.

Pensé que podría ser posible usar iptablesy DNATcambiar el destino a una dirección no utilizada en la subred y usarlo ip neighpara configurar la dirección MAC estáticamente en la de la otra NIC, pero ni siquiera la DNATregla coincide para los paquetes con direcciones locales.

Puede ser posible con una máquina virtual o con espacios de nombres de red para que el kernel no vea 10.1.1.1el archivo eth0. Pero necesitaría proxy ARP y DNAT para mover los paquetes entrantes de la interfaz física a la virtual.

¿Si vale la pena ese esfuerzo?

Respuesta2

Los espacios de nombres de red pueden ser una opción. Son esencialmente instancias independientes de la pila de red, por lo que al menos en teoría deberían poder separar dos interfaces.

La última vez intenté jugar con ellos, aunque no pude hacer que funcionara correctamente.

información relacionada