No estoy completamente seguro de haber entendido, pero creo que estás en la cadena equivocada. :-) Yo también estaba confundido cuando usé iptables por primera vez. Pero la forma de adelante el local port ${LOCAL UNPRIV PORT} es la siguiente declaración:
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT}
-j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}
Es una mezcla entre un problema semántico y la forma en que funciona netfilter:en los viejos tiempos, reenviar un puerto local implicaba una conexión con la caja que está reenviando, más una segunda conexión con el destino. Iptables hace esto en un solo paso. Entonces, en lugar de dos conexiones, está reenviando el tráfico a ese puerto directamente al destino. Netfilter realiza todos los controles de cordura y la contabilidad:solo los paquetes que pertenecen a una conexión válida reciben NAT y, por lo tanto, pueden reenviarse.
Habilitar DNAT no permite que se reenvíe ningún paquete. También tienes que añadir una regla:
$IPT -N INET-PRIV
$IPT -A FORWARD -i eth0 -o eth1 -j INET-PRIV
$IPT -A FORWARD -j DROP
$IPT -A INET-PRIV -p tcp -d ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j ACCEPT
$IPT -A INET-PRIV -j DROP
Y tienes que habilitar el reenvío, por supuesto.
echo "1" > /proc/sys/net/ipv4/ip_forward
Pro iptables :más seguro, más flexible, menos memoria y CPU utilizada por conexión
Contraiptables :reenviar una conexión desde una máquina interna a una máquina interna (realimentarla al eth0) no tiene sentido con iptables (por supuesto, siempre puede conectarse directamente), reenviar el tráfico que se genera localmente no funciona (un puerto el demonio de reenvío podría ayudar, pero generalmente no tiene sentido)
Exactamente este podría ser el problema :intenta usar NAT en un enrutador, por lo que debe usar un demonio de reenvío u omitir este reenvío de puerto adicional y hacer:
ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-box
En special-vpn-box, solo puede permitir conexiones entrantes desde el enrutador y conexiones salientes a ${OTRO SISTEMA}:${PUERTO REMOTO} usando iptables. De esa manera, los usuarios de special-vpn-box solo pueden acceder a ${OTRO SISTEMA}:${PUERTO REMOTO} y no podrán hacer nada más si no son de confianza.
Esto es lo que hago específicamente para el reenvío localhost:
iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 3306 -j DNAT --to-destination ip.ip.ip.ip
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE
sysctl -w net.ipv4.conf.all.route_localnet=1
Asegúrate de sustituir ip.ip.ip.ip
para su IP pública real y también el --dport 3306
para el puerto que desea reenviar.
Finalmente ejecute el comando sysctl y también actualice su /etc/sysctl.conf
Puedes actualizar sysctl.ctl
para permitir el enrutamiento de localhost con el siguiente comando:
echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf
Ahora, todo esto parece simple y bueno, pero requirió algo de investigación y búsqueda. Tenga cuidado y comprenda que reenviar localhost/127.0.0.1 requiere este método y los otros ejemplos típicos no funcionan. Algunos ejemplos de soluciones que no funcionan con localhost:
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to ip.ip.ip.ip:3306
iptables -t nat -A POSTROUTING -d ip.ip.ip.ip -j MASQUERADE
http://realtechtalk.com/iptables_how_to_forward_localhost_port_to_remote_public_IP-1788-articles
# Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp \
--dport ${LOCAL UNPRIV PORT} -j DNAT --to-destination ${ANOTHER SYSTEM}:${REMOTE PORT}
iptables -t nat -A POSTROUTING -p tcp \
--dst ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j SNAT --to-source ${LOCAL SYSTEM}