Iptables MASQUERADE solo puertos seleccionados

Iptables MASQUERADE solo puertos seleccionados

Hice el reenvío de puertos siguiendo este tutorial: http://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/

iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination 2.2.2.2:1111

iptables -t nat -A POSTROUTING -j MASQUERADE

Pero quiero ENMASCARAR solo los puertos con los reenvíos, porque en el mismo servidor tengo un servidor web y si enMASCARO todo el tráfico, el servidor web deja de funcionar.

¿Alguna idea?

SOLUCIÓN: iptables -t nat -A POSTROUTING -d 2.2.2.2 -p tcp --dport 1111 -j SNAT --to-source 2.2.2.1

Respuesta1

si usteden realidadSi quieres hacer un, MASQUERADEentonces la forma correcta de hacerlo es así:

iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination 2.2.2.2:1111
iptables -t nat -A POSTROUTING -d 2.2.2.2 -p tcp --dport 1111 -j MASQUERADE

de esta manera MASQUERADEse aplicará solo a paquetes editados con DNAT.

Sin embargo, tenga en cuenta que MASQUERADEestá destinado principalmente a casos de IP dinámica (como el acceso telefónico) y, en el caso de una IP estática, SNATdebería usarse tal como lo propuso. Desde iptablesla página de manual:

Solo debe usarse con conexiones IP (acceso telefónico) asignadas dinámicamente: si tiene una dirección IP estática, debe usar el destino SNAT. El enmascaramiento equivale a especificar una asignación a la dirección IP de la interfaz por la que sale el paquete, pero también tiene el efecto de que las conexiones se olvidan cuando la interfaz deja de funcionar. Este es el comportamiento correcto cuando es poco probable que el siguiente acceso telefónico tenga la misma dirección de interfaz (y por lo tanto, cualquier conexión establecida se pierde de todos modos).

Sin embargo, hay una advertencia para ambos MASQUERADE: SNATno funcionará si 2.2.2.2 es un VIP en la misma máquina.

información relacionada