Título: Problema con iptables [SOLUCIONADO] Publicado por: malonecc en 26 Septiembre 2012, 21:49 pm Hola a todos,
Me encuentro con un problema que no doy solucionado, y empiezo a pensar que me encuentro ante una limitación de iptables. Paso a describirlo: Tengo un equipo Debian haciendo de enrutador. Por el eth0.2 recibo peticiones TCP en el puerto 10801 o 10802 y destino IP 20.0.0.2 Por el eth0.3 debo sacar los paquetes del eth0.2 transformados del siguiente modo: Si recibo por el 10801 lo envío a la IP 20.0.0.2 puerto 10800 con dirección de origen 50.0.0.2 Si recibo por el 10802 lo envío a la IP 20.0.0.2 puerto 10800 con dirección origen 60.0.0.2 Total que se trata de un NAT de dirección origen y de puerto destino. He conseguido que me funcionen las dos reglas por separado, pero nunca las dos a la vez. Por ejemplo con: iptables -t nat -p tcp -A PREROUTING -d 20.0.0.2 --dport 10801 -j DNAT --to-destination 20.0.0.2:10800 iptables -t nat -p tcp -A POSTROUTING -d 20.0.0.2 --dport 10800 -j SNAT --to 50.0.0.2 Con estas reglas, si añado: iptables -t nat -p tcp -A PREROUTING -d 20.0.0.2 --dport 10802 -j DNAT --to-destination 20.0.0.2:10800 Me saldrían todos los paquetes con origen 50.0.0.2, no hay manera de distinguir los que entran por el 10802 para ponerles origen 60.0.0.2 Entiendo que el problema es el orden del PREROUTING y del POSTROUTING. Me imagino que lo ideal sería utilizar dos equipos Debian, el primero que haga el cambio de SOURCE y el segundo el DESTINATION, pero me resisto a creer que no pueda hacer de algún modo con un solo equipo. He probado a poner mas adaptadores de red uniendo dos de ellos con un cable, pero los paquetes se enrutan internamente y pasan por iptables (o eso me parece). Quizás haya algún modo combinando un loopback, no sé, ya estoy un poco perdido, cualquier idea será bienvenida. Título: Re: Problema con iptables Publicado por: xv0 en 27 Septiembre 2012, 23:15 pm Hola
No entiendo muy bien tú pregunta, pretendes que los paquetes que recibas desde eth0.2, se traduzcan ala dirección que desees y sean redireccionados a la dirección 20.0.0.2? Un saludo Título: Re: Problema con iptables Publicado por: malonecc en 28 Septiembre 2012, 09:44 am Lo que trato de hacer es que a cada paquete que llegue debo cambiarle el puerto destino al 10800 y la IP origen se cambia en función del puerto destino original:
Si el puerto destino original era 10801 entonces debo ponerle ip origen 50.0.0.2 y Si el puerto destino original era 10802 entonces le debo poner ip origen 60.0.0.2 En todos los casos el puerto destino quedará cambiado al 10800. Reconozco que un poco liante si que es... Título: Re: Problema con iptables Publicado por: dato000 en 28 Septiembre 2012, 14:26 pm Interesante este problema, no se tanto de IPTables, pero quiero aportar lo que pueda.
Ummm no has probado además del Post-Pre, añadir conexiones que entran y salen, y luego con eso, redireccionas? No estoy seguro si se aplicarian de esa forma: Citar iptables -t nat -p tcp -A INPUT -d 20.0.0.2 --dport 10801 -j DNAT --to-destination 20.0.0.2:10800 iptables -t nat -p tcp -A OUTPUT -d 20.0.0.2 --dport 10801 -j DNAT --to-destination 20.0.0.2:10800 iptables -t nat -p udp -A INPUT -d 20.0.0.2 --dport 10801 -j DNAT --to-destination 20.0.0.2:10800 iptables -t nat -p udp -A OUTPUT -d 20.0.0.2 --dport 10801 -j DNAT --to-destination 20.0.0.2:10800 iptables -t nat -p tcp -A INPUT -d 20.0.0.2 --dport 10800 -j SNAT --to 50.0.0.2 iptables -t nat -p tcp -A OUTPUT -d 20.0.0.2 --dport 10800 -j SNAT --to 50.0.0.2 iptables -t nat -p tcp -A INPUT -d 20.0.0.2 --dport 10800 -j SNAT --to 50.0.0.2 iptables -t nat -p tcp -A OUTPUT -d 20.0.0.2 --dport 10800 -j SNAT --to 50.0.0.2 La verdad aún no se de que va el nat, snat, dnat, Post y Pre routing, pero si lo que quieres es colocar un puente, creo que primero debe comprobarse que entran las peticiones (claro que no se muy bien como funciona eso, va con ICMP y ACK) y dar la salida desde el puente. Voy a averiguar. Título: Re: Problema con iptables Publicado por: Epzylon en 28 Septiembre 2012, 16:47 pm Te tiro una idea para hacer lo que queres:
Código: iptables -t mangle -A PREROUTING -p tcp --dport 10801 -j MARK --set-mark 801 En este blog, explico el tema de mark http://www.netsecure.com.ar/2008/12/09/netfilter-iptables-v/ (http://www.netsecure.com.ar/2008/12/09/netfilter-iptables-v/) Decime si funca Título: Re: Problema con iptables Publicado por: malonecc en 28 Septiembre 2012, 23:49 pm Hola,
Muy buenos ambos aportes! Me pongo con ello y os cuento los resultados. Título: Re: Problema con iptables Publicado por: malonecc en 29 Septiembre 2012, 20:56 pm Fantástico, Epzylon!
Efectivamente el truco estaba en "marcar" los paquetes previamente. No sabía que existía esa función, pero me la apunto. Funciona a la perfección, al final, luego de unas pequeñas correciones la cosa ha quedado así: iptables -t mangle -A PREROUTING -p tcp --dport 10801 -j MARK --set-mark 801 iptables -t mangle -A PREROUTING -p tcp --dport 10802 -j MARK --set-mark 802 iptables -t nat -A PREROUTING -p tcp --dport 10801 -j DNAT --to-destination 20.0.0.2:10800 iptables -t nat -A PREROUTING -p tcp --dport 10802 -j DNAT --to-destination 20.0.0.2:10800 iptables -t nat -A POSTROUTING -m mark --mark 801 -j SNAT --to-source 50.0.0.2 iptables -t nat -A POSTROUTING -m mark --mark 802 -j SNAT --to-source 60.0.0.2 Solamente se me ocurren un par de cuestiones que son mas curiosidad que otra cosa, 1.- ¿Cuantas marcas distintas se pueden establecer simultáneamente? 2.- ¿Las marcas deben estar dentro de un rango o sirve cualquier numero entero? De nuevo, un millón de gracias por las respuestas e ideas. Título: Re: Problema con iptables [SOLUCIONADO] Publicado por: Epzylon en 3 Octubre 2012, 22:08 pm Las marcas podes poner son muchas, aunque no se el numero, te aseguro que te van a alcanzar
Es importante tener en cuenta que estas marcas solo se ven dentro del linux que las ejecutas, es decir es un funcionamiento interno del kernel y no "viajan" en el paquete. Pd: que groso netfiler! pd2: avisame cualquier cosa! Saludos Título: Re: Problema con iptables Publicado por: dato000 en 4 Octubre 2012, 00:38 am Te tiro una idea para hacer lo que queres: Código: iptables -t mangle -A PREROUTING -p tcp --dport 10801 -j MARK --set-mark 801 En este blog, explico el tema de mark http://www.netsecure.com.ar/2008/12/09/netfilter-iptables-v/ (http://www.netsecure.com.ar/2008/12/09/netfilter-iptables-v/) Decime si funca Buen dato, estoy revisando el blog, muy bueno. |