¿Cómo hacer el reenvío de puertos con dos interfaces usando iptables?

¿Cómo hacer el reenvío de puertos con dos interfaces usando iptables?

Tengo una caja Debian con dos interfaces wan y lan (192.168.0.1). En lan:80 tengo un sitio al que se debe acceder desde la red local. También necesito acceder a este sitio desde wan:777. Estas son mis reglas de iptables:

iptables -A INPUT -i $LAN -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A FORWARD -p tcp -d 192.168.0.1 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Sin embargo, no funciona. Funciona solo si lo elimino -i $LANde INPUT. Me refiero a esta manera:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A FORWARD -p tcp -d 192.168.0.1 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Sin embargo, es una mala manera, porque el sitio ahora también está en wan:80 y esto no es lo que quiero. ¿Cuál es mi error?

Respuesta1

Recibí una respuesta enForo ruso de Linux:

iptables -t mangle -A PREROUTING -i $WAN -p tcp --dport 777 -j MARK --set-mark 0x1234
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A INPUT -m mark --mark 0x1234 -j ACCEPT

información relacionada