2010-04-29 9 views
5

Tengo una comp con 2 tarjetas eth, conectadas con patch-cord (cable eth directo desde la 1ra hasta la 2da).linux: deshabilita el uso de bucle invertido y envío de datos vía cable entre 2 tarjetas eth de una comp

El linux está instalado, quiero enviar datos de la 1ra tarjeta de red a la 2da. Y quiero forzar que el paquete pase por cable. Puedo configurar cualquier ip en las tarjetas.

Con ping obtengo constantes en las tarjetas.

¿Es posible con enchufes tcp/ip?

PS. Necesito escribir un programa. que enviará paquetes a través de eth, por lo que la pregunta relacionada con stackoverflow. Puede haber alguna forma dependiente del sistema operativo, me ayudarán también

+0

Posible duplicado de http://serverfault.com/questions/127636/force-local-ip-traffic-to-an-external-interface – osgx

+0

Esto se cerró como fuera de tema dos años después de la respuesta a la pregunta. Sin embargo, las respuestas describen programas y el solicitante dice que están escribiendo un programa. Sí, esto también está en el tema de otro sitio de Stack Exchange. Voy a marcar esto para volver a abrir. – dcorking

+0

dcorking, la tarea se puede resolver utilizando solo herramientas relacionadas con el SO, sin crear nuevos programas. La respuesta de z22 parece ser lo que se necesita. Y en serverfault http://serverfault.com/questions/127636/force-local-ip-traffic-to-an-external-interface tenemos la solución correcta. – osgx

Respuesta

0

Debería poder escribir un programa que lo haga usando sockets de paquetes (familia de protocolos PF_PACKET), pero tendrá que manejar los encabezados para la IP y capas superiores tú mismo.

+1

Entonces, ¿no puedo forzar TCP o los paquetes IP no tienen bucle invertido? – osgx

+0

No lo creo, pero podría intentar agregar una ruta de host para cada IP a través de la interfaz opuesta. – caf

5

Echa un vistazo a local tabla de enrutamiento. Con las herramientas de iproute2 instaladas, haga ip route show table local. Como puede ver, todos los paquetes destinados a sus IP locales nunca pasarían a través de NIC, ya que están marcados como local.

Para forzar los paquetes vaya a través de la tarjeta ethernet elimine la ruta adecuada (es decir, ruta ip delete 192.168.122.1 dev eth0 tabla local). Para restablecer esta ruta, simplemente configure la interfaz hacia abajo y hacia arriba: el kernel haría el trabajo para insertar estas rutas.

+0

La idea parece buena.Claro, ya no es posible hacer ping a la interfaz local, pero parece que tampoco es posible hacer ping a nada en la red (parece que kernel ya no acepta paquetes para esta IP). – Jezz

4

Probé el vía IP ... mesa local método anterior. O no funciona o estoy haciendo algo mal.

El truco es usar un conjunto de direcciones IP ficticias para forzar al kernel a enrutarlo a través del cable, y NAT para volver a cambiarlo a la dirección IP real.

Deje eth0 y eth1 ser las dos tarjetas de ethernet; IP0 e IP1 su dirección IP; MAC0 y MAC1 su dirección MAC respectivamente. Usaremos dos direcciones IP ficticias: IP00 e IP11.

arp -s IP00 MAC0 
arp -s IP11 MAC1 
ip route add IP00 dev eth1 
ip route add IP11 dev eth0 
iptables -t nat -A POSTROUTING -d IP11 -j SNAT --to-source IP00 
iptables -t nat -A POSTROUTING -d IP00 -j SNAT --to-source IP11 
iptables -t nat -A PREROUTING -d IP00 -j DNAT --to-destination IP0 
iptables -t nat -A PREROUTING -d IP11 -j DNAT --to-destination IP1 

Utilice las direcciones IP ficticias IP00 e IP11 en lugar de las direcciones reales.

Cuestiones relacionadas