¿Qué tan difícil es recibir un paquete TCP y luego reenviarlo a otra IP en la red local manteniendo la dirección IP de origen?

3

Necesito recibir un paquete TCP destinado a mi aplicación, luego reenviarlo a otro destino en la red local, mientras conserva la Dirección IP original .

¿Cómo se puede hacer o qué tan difícil es?

Estoy usando sockets simples en Java, ejecutándome en un entorno Linux, y podría considerar usar bibliotecas C en mi código si eso funciona.

Sé que los enrutadores o cortafuegos interceptan dichos paquetes TCP, supongo que no cambian la IP de origen.

    
pregunta abdelrahman-sinno 19.01.2018 - 19:43
fuente

2 respuestas

1

Esto se puede lograr con TProxy en Linux , sin embargo, no puedo decir que haya sido muy estable en las pruebas.

Lo he implementado en Java para TCP , tuve que usar JNA para hacer biblioteca de Linux nativa , así como envolver las clases de JRE Socket ( basado en esta publicación , con cambios adicionales realizados).

En resumen, los pasos son:

  • Configuración del módulo de firewall de IPTables

  • Copie la dirección del socket de origen.

  • Llamada de biblioteca nativa a setsockopt con la opción IP_TRANSPARENT, para que el socket del cliente use el módulo TProxy.
  • Establezca la dirección de origen en el socket de salida

Al parecer, hay muchas implementaciones para él en línea, como esta en Golang .

    
respondido por el abdelrahman-sinno 09.06.2018 - 12:12
fuente
0
iptables -A PREROUTING -i eth0 -p tcp -m tcp -m multiport --dports 80 -j DNAT --to-destination 192.168.0.1

No sé si esto es lo que quiere, pero reenvío el tráfico de mi firewall a mi servidor web todo el tiempo.

Los registros del servidor web tienen la fuente IP de origen.

    
respondido por el cybernard 09.06.2018 - 16:33
fuente

Lea otras preguntas en las etiquetas