NAT en conexiones TCP establecidas
Hola!
Esta es la primera vez y espero que no la última que escribo en este foro.
Uso una máquina debian para hacer de cortafuegos entre dos redes locales. En una de las redes tengo una máquina Servidora S1 y en la otra red una máquina cliente C1.
Todas las reglas de Iptables que uso para controlar el tráfico entre esas máquinas está controlado (con tabla filter FORWARD todo va genial).
El problema que me ha surgido y que espero sea de interés general es que hay un momento en que una de las peticiones que el C1 hace hacia S1 (Pensar que hay establecida una conexión TCP entre ambas), no quiero que se la sirva el S1, sino un server (Llamémoslo prima-> Sp) que tengo en mi máquina local, pero de forma transparente para todos.
He usado ip_queue para gestionar la información de la conexión entre C1 y S1 (ack, segment, ip y port C1 and S1 y así hacer más fácil y de forma dinámica el cambio de direcciones SNAT y DNAT)
Cuando llega mi sorpresa....he leido que los paquetes sólo pasan por la tabla de NAT en el establecimiento de conexión...y yo necesito cambiar las direcciones origen y destino una vez que la conexión ya esta es state = STABLISHED.
Alguien sabe si existe alguna forma para que todos los paquetes pasen por la tabla de NATeo y no sólo al inicio de la conexión (SYN).
La otra posibilidad que se me ocurre es pasarlos a espacio de usuario con ip_queue, pero me gustaría usar ip_Tables, lo cual me facilitaría muchísimo la aplicación..
Muchas gracias.
Diego.
- Inicie sesión o regístrese para enviar comentarios
- 163 lecturas



Estamos hablando de una única conexión? pues eso lo veo muy difícil
Lo que querés hacer es que una tercer maquina (C) intercepte y continúe una conexión tcp activa entre otras dos A y B, para eso la tercer maquina debería conocer el valor de syn, ack y window de dicha conexión en ese momento, C no debería darse cuenta del cambio y A no debería darse cuenta de eso cuando el control de la conexión le sea devuelto... es decir, tcp esta diseñado para impedir que cosas como esas pasen... basta echarle un ojo a rfc793 para darse cuenta.
La única solución que veo es implementar un proxy que realice esa tarea, pero eso ya depende del tipo de servicio del que estemos hablando.
Saludos.
PD: me refiero a proxy == intermediario, no hablo exclusivamente de un proxy http
Pues si... por ahí van a ir los tiros.
Creo que más o menos ya tengo pensado cómo lo voy a hacer.
Usar como tú bien dices un proxi transparente para la conexión entre C/S donde almaceno el payload de los paquetes intercambiados y luego utilizo este para realizar la conexión con la tercera máquina.
Será algo así como engañar a TCP....Lo único que esperaba es que SNAT y DNAT me solucionasen un poco la vida...pero parece que va aser que no.
Así que iptables -j QUEUE y ha modificar paquetes desde userland.
Un saludo.
Diego.