berna escribió:
2009/6/2 Emiliano Romero <[email protected]>:
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)


haha, si es complicado a veces pero antes que lea todo proba en
cambiar el hermoso valor que tenes aca

# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200

ese 7200 es el tiempo en segundos que el kernel tarda en realizar las
pruebas y quemarte la conexion si no son satisfactorias, si te fijas
son 2 hs y creo que el de iptables es de algo de 30 min por defecto,
no recuerdo bien ahora

proba en poner unos 10/15 min ahi, o sea un 600 o un 900 y me contas que pasa
# echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time


Mi problema no es que se me caiga la conexion, ni tampoco que mi maquina con iptables no mande KeepAlives. El tema es que no responde los keepalives que me llegan desde los remotos solo cuando hago nateo. Los remotos debido a la calidad del enlace usan keepalives cada 30 segundos. Osea que a los 30 segundos de que se hace la conexion, al mandar los keepalives y realizar los probes configurados no los reponde y por ende el remoto me cierra la conexion.

Igualmente ahora lo pruebo y te cuento como me fue.

Muchas gracias por la ayuda

Responder a