berna escribió:
> 2009/5/29 berna <[email protected]>:
>> 2009/5/29 Emiliano Romero <[email protected]>:
>>> Buenas Lista. Estoy intentando hacer un DNAT con iptables. El Dnat
me anduvo
>>> perfecto, puedo conectarme, recibir y enviar datos. El problema se
presenta
>>> con los paquetes TCP KeepAlive. Es como si no hiciera el match con la
>>> entrada en la tabla NAT. Y en ves de forwardear comparando la tabla
nat, me
>>> lo deja intacto al paquete.
>>>
>>> Configuracion de iptables:
>>> iptables -t raw -A PREROUTING -p tcp --dport 5555 -j TRACE
>>> iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT
--to-destination
>>> 192.168.1.100:5555
>>>
>>> El output del trace esta en http://pastebin.com/f531fdaa3
>>> En donde empiezan los keepalives lo marque. Sinceramente ya se me
agotaron
>>> las ideas y hubo mucha gente del irc que muy amablemente me ayudo
pero no
>>> logro hacerlo andar o entender porque me deja afuera los keepalives
cuando
>>> hace la comparacion en las tablas de nateo.
>
> otra cosa, en realidad la conexion se rompe 2 lineas mas abajo,
> siempre se ACKea al mismo bit ACK=745726408 hasta que se produce el
> RST
>
> podrias mostrarnos tus politicas?
> # iptables -S
>
> es muy dificil ver que pasa con una traza sin las politicas, es mas,
> donde has identificado correctamente los paquetes con len=0 y sin
> flags, podes ver que se esta macheando en
>
> 16: raw PREROUTING
> [RUTEO: es para mi?] SI => INPUT
> 17: filter INPUT
>
> en la linea 17 netfilter ya tomo la desicion de que el paquete es para
> el y no para alguien mas, como ocurre con las demas lineas, por ej
>
> 1: raw PREROUTING
> 2: nat PREROUTING
> [RUTEO: es para mi?] NO => FORWARD
> 3: filter FORWARD
>
> segun tengo entendido la unica interfaz que se excluye de nat
> PREROUTING es 'lo' (localhost)
> estaria bueno saber como esta armada tu red... para saber quien es
> quien y de donde a donde viaja la info
>
berna, primero que nada gracias por la respuesta. He seguido peleando
con esto sin suerte aun.
Te paso las politicas:
# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
#iptables -t nat -S
-P PREROUTING ACCEPT
-P POSTROUTING ACCEPT
-P OUTPUT ACCEPT
-A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination 192.168.1.100
# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
Ademas subo un diagrama, es muy simple, tengo intener, que llega a la
maquina donde tengo iptables (Ya llega nateado por el router de la
prestadora) y de ahi quiero hacerle un DNAT a todo lo que valla al
puerto 5555 para poder enviarlo a otro server.
Diagrama: http://tinyurl.com/mz32la
Visual Output de Wireshark: http://tinyurl.com/qlaj9n
Ademas hice una prueba y veo que los TCP KeepAlive me los marca como
INVALID (-m state --state INVALID). Esto lo veo con la siguiente regla:
iptables -t raw -A PREROUTING -p tcp --dport 5555 -m state --state
INVALID -j LOG --log-prefix 'PRE ' --log-level 4
en el log aparecen los keepalvies:
Jun 2 13:11:33 reflex kernel: [328298.184728] PRE IN=eth0 OUT=
MAC=00:1c:c0:52:11:71:00:11:2f:97:13:67:08:00 SRC=200.49.201.26
DST=172.16.102.11 LEN=40 TOS=0x08 PREC=0x40 TTL=115 ID=51674 PROTO=TCP
SPT=50424 DPT=5555 WINDOW=0 RES=0x00 URGP=0
Yo lo unico que necesito es que lleguen los TCP KeepAlive al Server y no
que se me queden en el Router (Iptables).
De ante mano muchas gracias a todos los que me han dado una mano. Apenas
logre hacerlo andar publico por aca (si es que lo hago andar ja)
Saludos
ReFleX