¿Cómo hacer el reenvío / redireccionamiento de puertos en Debian?

12

Tengo dos preguntas.

Pregunta 1: Mi máquina Debian tiene una interfaz eth3 con ip 192.168.57.28. Si alguien intenta conectarse a 192.168.57.28:1234, ¿cómo redirijo la solicitud a otra máquina: 192.168.57.25:80?

Pregunta 2: Si mi máquina Debian tiene dos interfaces: eth3 con 192.168.57.28 y ppp0 con alguna IP dinámica y alguien intenta conectarse a través de ppp0 en el puerto 1234, ¿cómo redirijo la solicitud a 192.168.57.25:80?

He intentado esto:

$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward

Pero no funciona.

Dánjal Salberg Adlersson
fuente

Respuestas:

12
iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE

El primero especifica que todas las conexiones TCP entrantes al puerto 1234 deben enviarse al puerto 80 de la máquina interna 192.168.57.25. Esta regla por sí sola no completa el trabajo porque iptables niega todas las conexiones entrantes. Luego aceptamos la conexión entrante al puerto 1234 desde eth3 que se conecta a Internet con la IP pública según la segunda regla. Agregamos la segunda regla en la cadena FORWARD para permitir el reenvío de los paquetes al puerto 80 de 192.168.57.25.

EDITAR: POSTROUTING agregado.

Para realizar un seguimiento de la conexión. de lo contrario, el host externo vería la IP interna 192.168.57.25 de la cual no tiene idea.

EDIT2: Acabo de recibir la pista de que debería ser --to-destination en lugar de --to (sry)

Caminante diario
fuente
He intentado su sugerencia, pero no funciona. Puedo navegar a 192.168.57.25 y la página web vuelve, pero navegar a 192.168.57.28:1234 no funciona.
Dánjal Salberg Adlersson
@ DánjalSalbergAdlersson actualizó mi publicación (se perdió algo. Sry.)
Daywalker
3
Intenté tu sugerencia, pero no funcionó. Luego cambio a la última: iptables -A POSTROUTING -t nat -j MASQUERADE, ¡y funcionó!
Dánjal Salberg Adlersson
8

Gracias a Daywalker y Dánjal Salberg Adlersson. Después de horas de jurar, el reenvío de puertos con iptables finalmente funciona. (probado en Debian)

bash-script

#!/bin/bash

IPTBL=/sbin/iptables

IF_IN=eth0
PORT_IN=40022

IP_OUT=172.16.93.128
PORT_OUT=22

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE
scotty86
fuente
¿Hay alguna razón por la cual se omitió "-s 192.168.57.25" de la línea POSTROUTING?
edwardsmarkf
también "-o eth3" omitido
edwardsmarkf
Veo que -s y -o en la línea POSTROUTING parece ser opcional. alguna idea sobre el uso de SSL? Hice la pregunta aquí, hace referencia a la secuencia de comandos: superuser.com/questions/1387902/...
edwardsmarkf