2008-10-28 23 views
18

¿Es posible cambiar el puerto de destino de un paquete UDP usando iptables?Uso de iptables para cambiar un puerto de destino

que estoy tratando de conseguir un agente SNMP para enviar trampas en 1620 en lugar de 162. Por desgracia hasta ahora sólo he conseguido cambiar el puerto de origen:

iptables -t nat -A POSTROUTING -p udp --dport 162 -j SNAT --a: 1620

Respuesta

4

Este uso aparentemente no es compatible. Tomado de http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.txt:

6.3.7. Alterar el destino de conexiones generadas de forma local

El código NAT permite insertar reglas DNAT en la cadena de producción, pero
esto no es totalmente compatible en 2.4 (que puede ser, pero requiere un nuevo
opción de configuración, algunas pruebas, y un poco de codificación, por lo que a menos que alguien contrate a Rusty para escribirlo, I no lo esperaría pronto).

La limitación de corriente es que se Sólo puede cambiar el destino de
la máquina local (por ejemplo `j DNAT --a 127.0.0.1'), no a cualquier otra máquina, de lo contrario las respuestas no lo hará ser traducido correctamente.

+0

¿Eso no redirige al puerto 1620 en la máquina local? Esta parece ser la misma recomendación que askotoki dio. –

+0

Tienes razón ... Cavé un poco más profundo y encontré la información anterior. –

0

en lugar de hacer SNAT, tratar con DNAT. El puerto de origen cambia porque SNAT significa SourceNAT, por lo que DNAT funcionará para usted.

+0

DNAT para conseguir que funcione lo que se necesita para especificar una dirección IP como --to-destination – PiedPiper

+0

Eso no sería un gran problema en este caso, pero una regla DNAT tampoco parece funcionar. La regla no se golpea y los paquetes enviados no se modifican. –

+0

No puede usar DNAT en una cadena POSTROUTING. http://iptables-tutorial.frozentux.net/iptables-tutorial.html#DNATTARGET – borodimer

1

@PiedPiper tenía razón. Con DNAT debe especificar una dirección IP, pero solo queremos hacer una redirección de puertos, por lo que -j REDIRECT puede funcionar en este caso.

Ver http://www.netfilter.org/documentation/HOWTO//NAT-HOWTO-6.html#ss6.2

+0

Si leo que la redirección correcta enviará el paquete al puerto 1620 en la máquina local. Quiero que vaya al destino indicado en el paquete, pero en el puerto 1620 en lugar de 162. –

+0

Sí, no lo leí la primera vez. Lo siento. – azkotoki

4

suponiendo que conoce la máquina que realice el envío:

iptables -t nat -A OUTPUT -p udp --dport 162 -j DNAT --to-destination <dest-ip>:1620 
+0

Esto hace que mi iptables se queje: "iptables: argumento inválido" –

+0

Funciona para mí. ¿Está reemplazando con una dirección IP real? – PiedPiper

+0

Este comando funcionó bien para mí. Kernel 2.6 y iptables 1.2.11+ – borodimer

5

puede redirigir 162 hasta 1620

iptables -t nat -A PREROUTING -p UDP --dport 162 -j REDIRECT --to-port 1620

Cuestiones relacionadas