.png)
En mi caja de Linux 10.20.1.1
, tengo dos aplicaciones UDP vinculadas al puerto 46000 (App A)
y 36000(App B)
respectivamente. Las aplicaciones se comunican con dos servidores UDP vinculados como 10.10.1.1:36000 (Srv X)
y 10.10.1.2:36000 (Srv Y)
respectivamente.
Cuando envío el paquete, tengo el requisito de usar siempre el puerto UDP src como 36000. El paquete en el cable siempre será 36000 - 36000
los puertos src y dst.
Mis reglas de iptables son las siguientes. Mi intención es enviar DNAT
el paquete entrante del Srv X desde el puerto 36000 to 46000
para que la aplicación A lo reciba.
*nat
-A PREROUTING -s 10.10.1.1/32 -p udp --dport 36000 -j DNAT --to-destination :46000
*raw
-A PREROUTING -p udp --dport 36000 -j CT --notrack
-A PREROUTING -p udp -j ACCEPT
-A OUTPUT -p udp --dport 36000 -j CT --notrack
-A OUTPUT -p udp -j ACCEPT
*filter
-A INPUT -p udp -m udp --dport 36000 -j ACCEPT --> rule 1
-A INPUT -p udp -m udp --dport 46000 -j ACCEPT --> rule 2
-A OUTPUT -p udp -m udp --dport 36000 -j ACCEPT -> rule 3
Cuando envío un paquete, App A to Srv X
va bien. No hay /proc/net/ip_conntrack
coincidencias de paquetes de entrada y salida de conntrack rule 3
. Cuando la respuesta proviene de Srv X to App A
, el paquete atraviesa la tabla sin formato, pero DOES NOT
pasa DNAT
y salta directamente a la regla 1 de la tabla de filtro. Esto significa que la respuesta Srv X llega a mi casilla pero va a la aplicación B en lugar de a la aplicación A.
Preguntas:
La tabla RAW indica que no hay archivos
CONNTRACK
. Sin embargo, el comportamiento anterior indica que algún módulo está rastreando el primer paqueteApp A -> Srv X
con el puerto src y dst en algún lugar.36000 - 36000
Por lo tanto, la respuesta deSrv X -> App A
no parece someterse a DNAT. ¿Cómo evito estoCONNTRACK
?¿Cómo garantizar que cada paquete entrante de Srv X con el puerto dst 36000 siempre pase por DNAT?
Gracias de antemano, Télex.
Respuesta1
Al mirar elDocumentación de Netfilter, se dice que"El seguimiento de conexiones es fundamental para NAT", por lo tanto no puedes tener DNAT sin habilitarconectar.