iptable como enrutador

Cargamos módulos para NAT

 modprobe iptable_nat

Activamos el reenvío de paquetes:

 echo 1 > /proc/sys/net/ipv4/ip_forward

Limpiamos reglas de iptables que pueda haber

iptables --flush iptables --table nat --flush

Activamos NAT con enmascaramiento:

 iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
 iptables --append FORWARD --in-interface eth0 -j  ACCEPT

Este ejemplo permite que un ordenador pase lo que le llege por la tarjeta de red (eth0) se envie a l modem (ppp0). Es el caso típico de una red casera, en la que solo un ordenador tiene acceso al modem, mientras el otro tiene sólo una IP local (como 192.168.0.3)

Otro ejemplo para servir de pasarela y hacer que esa IP local parezca una IP externa (en el ejemplo 123.456.7.8, obviamente falsa):

 iptables -t nat -A PREROUTING -i eth0 -d 123.456.7.8 -j DNAT --to-destination=192.168.0.3
 iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.3 -j SNAT --to-source=123.456.7.8

Podemos complicarl omas, para que solo sea tráfico TCP/IP

 iptables -t nat -A PREROUTING -i eth0 -d 123.456.7.89   -j DNAT --to-destination=192.168.1.17
 iptables -t nat -A POSTROUTING -p tcp -o eth0 -s 192.168.1.17 -j SNAT --to-source 123.456.7.89

Y además sólo por el puerto 80:

 iptables -t nat -A POSTROUTING -p tcp --sport 80 -o eth0 -s 192.168.128.5 -j SNAT --to-source 123.456.7.8


Note: En muchos casos vale con indicar sólo el dispositivo (eth:0) pero si se usa una tarjeta virtual (eth0:1) no se puede poner tal cual en iptables. Esto es un problema si queremos enrutar sólo lo que viene por eth0:1 (por ej. IP locales) y no lo que viene por eth0 a secas (p. ej IP externas) pero se solventa justo haciendo lo que muestra el ejemplo anterior: indicar el dispositivo real (eth0) y la IP del ordenador que se conecta a traves de eth0:1