
Mi propósito es NAT (traducir) todas las direcciones IP que llegan a eth0 en todos los puertos y protocolos de esta manera: 192.168.55.x -> 192.168.42.x (tengo el reenvío de IP habilitado y la subred 192.168.42.0/24 está en eth1 ). Puedo hacer esto para un host por par de líneas como esta, por ejemplo con x=20:
iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.20 -j DNAT --to 192.168.42.20
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20 -j SNAT --to 192.168.55.20
Pero no puedo encontrar una manera de traducir los 253 hosts posibles. Probé esto:
iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.0/24 -j DNAT --to 192.168.42.0-192.168.42.255
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20/24 -j SNAT --to 192.168.55.0-192-168.55.255
Esto da como resultado una traducción de host aleatoria. Útil para el equilibrio de carga. Pero, ¿cómo conseguir una traducción sencilla uno a uno?
Gracias.
Respuesta1
De man iptables-extensions
:
NETMAP
Este objetivo le permite asignar estáticamente una red completa de direcciones a otra red de direcciones. Sólo se puede utilizar desde reglas de la tabla nat.
Entonces sólo se necesita una regla:
iptables -t nat -A PREROUTING -d 192.168.55.0/24 -i eth0 -j NETMAP --to 192.168.42.0/24
Si además quieres que se vean correctamente las conexiones iniciadas inicialmente desde la red "42", completa con esta segunda regla:
iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth0 -j NETMAP --to 192.168.55.0/24