Autor
|
Tema: Problema con iptables [SOLUCIONADO] (Leído 5,249 veces)
|
malonecc
Desconectado
Mensajes: 4
|
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.
|
|
« Última modificación: 29 Septiembre 2012, 20:57 pm por malonecc »
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
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
|
|
|
En línea
|
|
|
|
malonecc
Desconectado
Mensajes: 4
|
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...
|
|
|
En línea
|
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
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: 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.
|
|
|
En línea
|
|
|
|
Epzylon
|
Te tiro una idea para hacer lo que queres: 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 POSTROUTIGN -m mark --mark 801 -j SNAT --to-source 50.0.0.2 iptables -t nat -A POSTROUTIGN -m mark --mark 801 -j SNAT --to-source 60.0.0.2 En este blog, explico el tema de mark http://www.netsecure.com.ar/2008/12/09/netfilter-iptables-v/
Decime si funca
|
|
|
En línea
|
|
|
|
malonecc
Desconectado
Mensajes: 4
|
Hola,
Muy buenos ambos aportes!
Me pongo con ello y os cuento los resultados.
|
|
|
En línea
|
|
|
|
malonecc
Desconectado
Mensajes: 4
|
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.
|
|
|
En línea
|
|
|
|
Epzylon
|
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
|
|
|
En línea
|
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
Te tiro una idea para hacer lo que queres: 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 POSTROUTIGN -m mark --mark 801 -j SNAT --to-source 50.0.0.2 iptables -t nat -A POSTROUTIGN -m mark --mark 801 -j SNAT --to-source 60.0.0.2 En este blog, explico el tema de mark http://www.netsecure.com.ar/2008/12/09/netfilter-iptables-v/
Decime si funca Buen dato, estoy revisando el blog, muy bueno.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problemas con iptables + thunderbird [solucionado]
« 1 2 »
GNU/Linux
|
dato000
|
19
|
11,745
|
22 Enero 2013, 21:59 pm
por marybal
|
|
|
problema con iptables SNAT
Hacking
|
soyloqbuskas
|
0
|
2,410
|
29 Noviembre 2012, 01:22 am
por soyloqbuskas
|
|
|
PROBLEMA con perhaps iptables or you kernel needs to be upgraded.
Dispositivos Móviles (PDA's, Smartphones, Tablets)
|
dedos2
|
0
|
1,876
|
5 Junio 2014, 05:46 am
por dedos2
|
|
|
[SOLUCIONADO] Problema IPTABLES
Redes
|
D_F4UL7
|
3
|
3,400
|
28 Mayo 2016, 10:29 am
por D_F4UL7
|
|
|
Tengo un problema con IPTABLES
Seguridad
|
daikiridefresa
|
4
|
2,670
|
4 Abril 2017, 18:38 pm
por engel lex
|
|