Mapeo de puertos de Iptables de dos PC a una

Mapeo de puertos de Iptables de dos PC a una

Tenemos 3 PC, dos de ellas están conectadas a Internet (ambas tienen 2 NIC)

PC1:

eth0 - 1.0.0.1 (external IP)
eth1 - 172.16.0.1 (internal IP)

PC2:

eth0 - 1.0.0.2 (external IP)
eth1 - 172.16.0.2 (internal IP)

PC3:

eth0 - 172.16.0.3 (internal IP)

Ahora queremos reenviar el puerto 80 desde la PC1 y la PC2 a la PC3.

Pero ahí está el problema: el reenvío de puertos de iptables funciona bien desde la PC1 o la PC2, pero sólo en caso de que la PC3 tenga la PC1 o la PC2 como puerta de enlace.

Reglas de IPtables (para PC1):

iptables -t nat -A PREROUTING  -p tcp -d 1.0.0.1 --dport 80 -j DNAT --to-destination 172.16.0.3:80
iptables -A FORWARD -p tcp -d 172.16.0.3 --dport 80 -j ACCEPT

Entonces, la pregunta es: ¿podemos tener un mapeo de puertos tanto desde la PC1 como desde la PC2 independientemente de la configuración de la puerta de enlace en la PC3?

Gracias de antemano.

Respuesta1

Sólo has reescrito el destino.

Debe cambiar la dirección de origen para que sea de PC1 o PC2, de modo que los paquetes de respuesta también puedan tener NAT. Y necesita cambiar la dirección de destino para que el paquete vaya a la PC3. Reescribir tanto el origen como el destino se denomina "NAT dual".

Debes hacer el DNAT en la cadena PREROUTING y el SNAT en la cadena POSTROUTING. Así (para PC1):

iptables -t nat -A PREROUTING -p tcp -m tcp -d 1.0.0.1 --dport 80 -j DNAT \
  --to-destination 172.16.0.3:80
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 172.16.0.3 --dport 80 \
   -j SNAT --to-source 172.16.0.1

Respuesta2

Asigne a la PC3 otra dirección IP y utilice las reglas DNAT en la PC1 y la PC2 para las diferentes direcciones IP de la PC3.

En la PC3, utilice la "regla ip" para enrutar por dirección IP de origen, como se muestra en:http://lartc.org/howto/lartc.rpdb.multiple-links.html

información relacionada