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

Responder a