Port Forwarding: accediendo a las máquinas de una intranet desde una sóla máquina pública.
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.
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)
# emerge iptables
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
# vim /etc/sysctl.conf
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:
Septiembre 18th, 2008 at 9:24 pm
¿No sería mejor tener acceso a la máquina por ssh, ftp y vnc; y desde la máquina local acceder al resto de servicios?
Septiembre 19th, 2008 at 11:01 am
@Neko: Así es como lo tenía antes, y así lo sigo usando en caso de necesidad. Pero la configuración actual es mucho más fluida y la agilidad con la que trabajas es infinitamente mayor.
Imagínate tener que acceder a una aplicación web alojada en la máquina 10.10.10.22. ¿Qué haces? ¿Accedes por ssh a la 205.205.205.205 y luego a la aplicación web mediante links y otro navegador de consola? Un poco infierno ¿no?.. aunque aveces lo hago, o ¿te conectas mediante VNC al 205.205.205.205 y desde las Xs exportadas navegas? Otro infierno esta vez por la latencia de respuesta.
Mucho mejor es acceder desde tu máquina local directamente desde tu navegador y que los datos que viajen sean puramente http y no píxeles. Ademas del plus añadido de poder gestionar los upload/download directamente desde tu máquina local.
Lo mismo para una conexión ftp o mysql que habría que hacer saltos ssh/scp al 205.205.205.205 y luego conectar a las máquinas interiores.
Como digo, tu opción es posible, pero el túnel es una puta pasada de agilidad.
f.
Septiembre 19th, 2008 at 11:34 am
Y no sería mucho mejor que te dieran acceso mediante VPN, sería igual o más rápido sin dejar al descubierto el servidor de mysql o la aplicación interna, etc…
Septiembre 19th, 2008 at 11:37 am
@NeKo: Es también una buena alternativa pero cuando intentamos esto resultaba que su proveedor de VPN sólo tenía cliente para windows y nosotros éramos de linux.
En cualquier caso es una muy buena alternativa.
Noviembre 9th, 2008 at 10:48 pm
con los tuneles ssh es la mar de sencillo (aquí explico si usas mac o leenucs):
- basta con tener a una maquina cualquiera abierto el puerto 22 de ssh
- abres una consola: escribes ssh -D 1080 root@mimaquina -p 22
- en firefox o safari, configuración de proxy, lo configuras: localhost:1080
- tecleas: http://10.10.10.22 y voilà! estás como si estuvieras dentro de la red local
o si quieres ahorrarte problemas, una vpn pptp, es una maravilla!
Noviembre 9th, 2008 at 11:29 pm
Gracias @Adrián.. super útil.
Noviembre 9th, 2008 at 11:32 pm
un detalle: el proxy tiene que ser socks, talqueasí: http://d.imagehost.org/view/0324/Imagen_20.png
Diciembre 19th, 2008 at 1:03 pm
Nota mental: siguiendo la explicación de @Adrián tengo esto:
mi.local$ ssh user@server.es -L 1680:ip.destino:1680
Gracias
Junio 22nd, 2014 at 4:29 pm
You’re so cool! I do not believe I have read through
a single thing like that before. So good to find another person with some unique thoughts
on this subject matter. Really.. many thanks for starting
this up. This site is something that is needed on the web,
someone with a little originality!
Take a look at my blog; click here
Agosto 7th, 2014 at 10:32 pm
Thanks for ones marvelous posting! I quite enjoyed reading it,
you could be a great author. I will be sure to bookmark
your blog and will often come back sometime soon. I want to encourage you to ultimately continue your great writing, have a nice
weekend!
Septiembre 14th, 2014 at 6:38 pm
These purifiers have a filter change indicator to monitor the quality of its filter.
And as you probably know from experience, all warm
blooded pets such as dogs, cats, birds, ferrets, bunnies, and hamsters have both hair and dander.
Indoor air cleaners work best for improved indoor breathing.
Mayo 16th, 2015 at 11:42 am
I’m not certain the place you are getting your info, but great topic.
I needs to spend some time studying much more or understanding more.
Thanks for fantastic information I used to be searching for this information for
my mission.
Junio 8th, 2016 at 3:22 am
Los shampoos, acondicionadores y productos para afinar regulares, poseen Cloruro de Sodio
y eliminarán la queratina del cabello.