Las redes de los clientes son celosas y normalmente sólo se puede acceder a las máquinas de su red desde dentro de la red misma. Lo que viene a llamarse una intranet.
Pero muchas de mis tareas de mantenimiento requieren acceso a varias máquinas de una intranet y desplazarme al cliente no lo veo una opción factible ni acorde con nuestros tiempos.
Una de las soluciones que más me ha gustado es pedirle al cliente un sólo acceso, una sola máquina con IP pública.
Para dar seguridad se puede configurar para que sólo se pueda acceder desde la IP estática de tu oficina, y, para ofrecer flexibilidad, que también se pueda acceder desde la IP estática de tu servidor en un datacenter. Pero bueno todo este párrafo te lo puedes saltar si no hay mucho inconveniente con la seguridad.
La máquina con la IP pública mola que sea linux, más que nada porque si no lo es ya no hace falta que sigas leyendo pues el resto del artÃculo sobreentiende esta premisa.
Lo que vamos a hacer es lo que se ve en la ilustración.
![port forwarding](http://www.fernandoguillen.info/es/blog/wp-content/uploads/2008/09/port_forwarding.jpg)
Aquà me ves a mà con más pelo y sin barba deseando acceder a todos los servicios de las máquinas de la intranet 10.10.10.* y sin embargo sólo pudiendo acceder a la máquina con la IP pública 205.205.205.205.
Lo que necesito tiene un nombre y este es Port Forwarding, y la implementación de esto más sencilla que he visto se hace mediante IP Tables.
Va a ser más rápido escribir los comandos que hay que ejecutar para que esto funcione que toda la charla previa que te he contado.
Mi máquina con acceso público tiene la distribución de linux Gentoo asà que los ejemplos son para esta distro pero no deberÃan variar mucho para otras distros.
Instalamos iptables (si no está ya)
Le decimos al kernel que permita ip-forwarding
# echo 1 > /proc/sys/net/ipv4/ip_forward
Flasheamos toda la configuración de iptables que haya por defecto
# iptables -F
# iptables -t nat -F
Permitimos el forward desde iptables (eth0 es la interface pública)
# iptables -A FORWARD -i eth0 -j ACCEPT
# iptables -A FORWARD -o eth0 -j ACCEPT
Esto hace que las ips se enmascaren para no liar a los routes y saltarse posibles filtros de seguridad por IP
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Y aquà por fÃn las reglas del Port Forwarding
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 213306 -j DNAT --to-destination 10.10.10.21:3306
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2180 -j DNAT --to-destination 10.10.10.21:80
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2280 -j DNAT --to-destination 10.10.10.22:80
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2221 -j DNAT --to-destination 10.10.10.22:21
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2322 -j DNAT --to-destination 10.10.10.23:22
Guardamos la configuración de iptables actual para que no haya que reescribirla al reiniciar
# /etc/init.d/iptables save
Ponemos el servicio de iptables para que arranque al inicio
# rc-update add iptables default
Creo que esto también hay que hacerlo
Añadir/descomentar las siguientes lÃneas:
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
Y ya deberÃa funcionar. Si me voy a mi máquina en mi oficina y accedo a:
$ mysql -h205.205.205.205 -P 213306
Me encontraré con la mysql de la máquina 10.10.10.21.
Si accedo con un navegador a:
http://205.205.205.205:2280
Me encuentro con el Apache de la máquina 10.10.10.22.
Si no te funciona revisa la linkografÃa: