Thinking on hiring me?

Please read

Fernando Guillén

a Freelance Web Developer

cabecera decorativa

software development as an artistic expression

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.

port forwarding

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:

13 Comments to “Port Forwarding: accediendo a las máquinas de una intranet desde una sóla máquina pública.”
  1. NeKo Says:

    ¿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?

  2. fguillen Says:

    @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.

  3. NeKo Says:

    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…

  4. fguillen Says:

    @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.

  5. Adrián Says:

    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!

  6. fguillen Says:

    Gracias @Adrián.. super útil.

  7. Adrián Says:

    un detalle: el proxy tiene que ser socks, talqueasí: http://d.imagehost.org/view/0324/Imagen_20.png

  8. fguillen Says:

    Nota mental: siguiendo la explicación de @Adrián tengo esto:

    mi.local$ ssh user@server.es -L 1680:ip.destino:1680

    Gracias

  9. click here Says:

    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

  10. seedbox hosting free Says:

    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!

  11. air purifiers Says:

    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.

  12. ipsec Says:

    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.

  13. queratina pelo rizado mercadona Says:

    Los shampoos, acondicionadores y productos para afinar regulares, poseen Cloruro de Sodio
    y eliminarán la queratina del cabello.

Leave a comment

a Freelance Web Developer is proudly powered by WordPress
Entries (RSS) and Comments (RSS).

Creative Commons License
Fernando Guillen's blog by Fernando Guillen is licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License.