Con iptables
podemos crear reglas que permitan filtrar los paquetes de red. Entre los tipos de reglas encontramos los reenvios de paquetes. Podemos hacer que los paquetes que cumplan unas condicciones sean reenviados hacia otro puerto o direccción IP.
Si tenemos un escenario donde tenemos un servidor S1 con la dirección IP 192.168.1.1
conectado a internet a través de la interfaz enp1s0
y queremos reenviar el puerto 80
(damos por hecho que el puerto 80 del servidor S1 ya está abierto, en otro caso hay que abrir dicho puerto) a otro servidor local S2 con dirección IP 192.168.2.1
al puerto 8080
necesitaremos las siguientes reglas en el servidor:
iptables -A PREROUTING -t nat -i INTERFAZ -p tcp --dport S1_PUERTO -j DNAT --to S2_IP:S2_PUERTO
iptables -I FORWARD 1 -p tcp -d S2_IP --dport S1_PUERTO -j ACCEPT
Ejemplo:
# INTERFAZ = enp1s0
# S1_PUERTO = 80
# S2_IP = 192.168.2.1
# S2_PUERTO = 8080
iptables -A PREROUTING -t nat -i enp1s0 -p tcp --dport 80 -j DNAT --to 192.168.2.1:8080
iptables -I FORWARD 1 -p tcp -d 192.168.2.1 --dport 80 -j ACCEPT
La configuración de red e interfaz se puede consultar utilizando el comando ip
ip addr
ip addr show enp1s0
El sistema debe tener habitado el reenvío de paquetes, variable del sistema net.ipv4.ip_forward
# Consultar valor de la variable
sysctl net.ipv4.ip_forward
# Configurar valor (1=Activo 0=Inactivo)
sysctl net.ipv4.ip_forward=1
sysctl net.ipv4.ip_forward=0