Hola a todos, son muchos los temas que llevo ya acerca de esto y no ha habido respuestas todavía quizás sea que me explico algo mal así que expondré el caso de manera simple.
No es una duda de programación lo primero, es una duda sobre redirección de paquetes, de cómo trabajan los router más que nada, de la NAT, e IP fordwarding, es algo más complejo que actuar como simple router, o hacer una NAT simple.
Bueno al grano, llegan a mi ordenador paquetes de otros hosts a los que tengo que hacer IP fordward al router para darles conexión, algo sencillo cambiando simplemente la cabecera IP y las MACs origen y destino, así pues soy capaz de dar conexión a esos hosts gracias al IP fordward.
Pero ahora bien, supongamos que ahora quiero que de todo ese tráfico IP que se genera quiero pasar una parte de ello en concreto el HTTP por un servidor proxy y reenviar la respuesta al host, para ello mediante filtros redirijo todo el tráfico TCP con destino puerto 80 hacia mi servidor proxy HTTP local, pero pierdo los datos al hacer esto.
Ejemplo: llega un TCP SYN con destino puerto 80 para el host 203.123.231.23 yo lo mando a mi servidor local luego cambio la IP de destino que es 203.123.231.23 por 127.0.0.1, el servidor resuelve la consulta y la reenvia, pero la reenvia al host que tiene IP dentro de la red ejemplo 192.168.1.45, pero ese paquete será rechazado por este host al ver que el paquete proviene de una dirección IP 127.0.0.1 cuando debería ser la IP 203.123.231.23 la que le respondería, por ello puedo capturar ese paquete en la red y enviarlo de nuevo al host cambiandole la IP por 203.123.231.23, PERO hay un problema que al capturar esos paquetes todos llegan de 127.0.0.1 y no se a que IP de servidor iban asociados, ¿como puedo solucionarlo?, ¿alguna idea?, ¿o alternativa para hacer el proxy de otra manera?.
Hasta ahora no se me ocurren buenas soluciones, lo más que se me ha ocurrido es guardando los dominios de cada host y poner por defecto el ultimo que haya usado... pero daria muchos errores, ¿que se puede hacer?.
Saludos y gracias.
Si habría alguna manera de decirle a el socket "cambiame la IP de origen que has usado para el bind() a esta".. pero me da que es imposible :"D