Mi objetivo es recoger los paquetes TCP destino puerto 80 de los hosts hacer NAT a mi servidor local proxy HTTP que analiza la request y obtiene respuesta del servidor, y luego devuelve la respuesta a los hosts para ello tienen que volver a pasar a través de la NAT.
Pero cuando el paquete vuelve del servidor local, la IP origen es la del servidor local 127.0.0.1 , no la del servidor web que utilizó el host, y debo cambiarla por esa, pero la he perdido ¿como la puedo recuperar?
Ejemplo: Los hosts tienen IPs del rango 192.168.0.1/24, imaginemos que uno se quiere conectar a google (haciendo IP fordward a través de mi obtiene la IP del servidor de google ya ahora trata de conectarse):
Paso 1: Recibir paquetes de los hosts y filtrar los datos.
Lo que recibo:
Citar
IP origen (host): 192.168.0.100:15678 -> IP dest (google): 202.24.123.24:80
Paso 2: Enviar el paquete a el servidor local para que actúe como proxy.
Lo que envío a mi servidor local tras hacer la NAT (solo modifico estos campos y del checksum IP):
Citar
IP origen (host): 192.168.0.100:15678 ->IP dest (servidor HTTP proxy local): 127.0.0.1:80
Sorpresa acabamos de perder la IP destino, la del servidor (pero aun así puede funcionar pero tendrá que resolver de nuevo la DNS).
Paso 3:: El servidor local proxy recibe los paquetes que no llega a procesarlos porque no se produce conexión ¿porque?, le estoy enviando todos los paquetes TCP con destino puerto 80, incluye los de handshake, ¿porque no se produce entonces la conexion con el servidor local proxy?.
Bueno suponiendo que el proxy los recibe los procesaría y obtendría una respuesta correspondiente a la del HTTP request, esa respuesta sin pasar por la NAT sería:
Citar
IP origen: 127.0.0.1:80 -> IP destino: 192.168.0.100:15678
Mal, acabamos de perder la IP real del servidor web al que lanza la IP el host, luego el paquete probablemente no llegue, debemos de hacer NAT de nuevo, es decir volver al paso 1, recoger ese paquete completo en la red, cambiar la IP de origen de ese paquete por la del servidor web al que lanzó la petición el host y reenviarlo con la nueva IP modificada, pero ¿como sé cual era la IP del servidor web al que lanzó la petición el host?, la he perdido en el paso 1.
En fin, ¿cómo puedo solucionar esto?.
Muchas gracias y un saludo.
Edito: Lo mejor sería alguna manera de hacerlo mediante el OS, he probado con netsh y route sin éxito, y analizando intercepter-ng no encontré que añadiera comandos route, y no se si netsh, pero creo que tampoco, ¿lo hará como estoy proponiendo, con winpcap?.
En resumen quiero algo en plan todo el tráfico HTTP (requests) que entre en la máquina (y que no incluya la IP local) muevemelo al servidor local (a su IP y puerto), y muevelo del server a los hosts, ¿alguna idea con el OS?, me parece que no.