«

»

Jun 11 2008

Imprimir esta Post

Creando túneles de red con SSH

Un servidor con acceso ssh puede dar mucho más de si de lo que uno se imagina, permite acceder a la máquina no sólo para trabajar contra una terminal, también permite redirigir tráfico desde la máquina a la que nos conectamos. Veamos tres de casos prácticos, muy útiles.

Accediendo remotamente a las X:

Esta es muy sencilla y muy potente, sólo hay que conectar a la máquina con la opción “-X”. Ésta opción permite ejecutar aplicaciones con entorno gráfico, la salida “gráfica” de la aplicación la veremos en nuestra máquina pero la aplicación realmente se está ejecutando en la máquina remota.

Se haría de la siguiente manera:
ssh -X usuario@ip_servidor programa_a_ejecutar

SSH X

El ejemplo anterior conecta a una máquina y ejecuta el editor “gedit”.

Accediendo a recursos privados:

Si queremos acceder a un recurso que sólo está accesible localmente en una máquina remota, por ejemplo hemos puesto a bajar cosas con ml-donkey en un servidor y queremos acceder a la interfaz web que está escuchando en localhost:8080 (en el puerto 8080 pero sólo con acceso local en la máquina) desde nuestro portátil.

Tunel con ssh

Nuestro servidor está en 192.168.0.1, para poder acceder a la interfaz web vamos a establecer un túnel entre un puerto local de nuestro portátil ( por ejemplo el puerto 2505) a un puerto del servidor. Para este caso nos conectaremos por ssh así:
ssh -L 2505:localhost:8080 usuario@192.168.0.1
Mientras tengamos la conexión abierta podremos acceder al puerto remoto 8080 conectándonos a nuestro puerto local 2505. En este ejemplo abriríamos un firefox y teclearíamos como dirección “http://localhost:2505″ ya tendríamos acceso al servidor web del ml-donkey.

Túnel inverso:

Supongamos la siguiente situación: estás en casa y quieres conectar por ssh con el GNU/Linux de tu oficina (destino). Problema: el firewall de la oficina bloquea las conexiones entrantes. Desde el pc de la oficina puedes conectar hacia el exterior, y en concreto tienes acceso ssh a una máquina intermedia. Desde casa tienes acceso a la misma máquina intermedia, también por ssh. Bien, aquí es donde entra en juego los túneles ssh inversos.

Desde la máquina destino (lógicamente tendrás que hacerlo antes de irte de la oficina, o bien que alguien que ya esté en la oficina lo haga, o bien un proceso cron…)
user@destino$ ssh -R 10000:localhost:22 usuariointermedio@maquinaintermedia

Es decir, desde destino, abrir una conexión ssh contra la máquina intermedia. Al conectar, crear un túnel inverso de tal forma que el puerto 10.000 de la máquina intermedia conecte con el puerto 22 de la máquina destino.

Desde casa:
user@casa $ ssh usuariodestino@maquinaintermedia -p 10000

Es decir, conectar desde casa al puerto  10.000 de la máquina intermedia (con credenciales de la máquina destino). Si todo va bien, se nos abrirá una conexión ssh contra el GNU/Linux de la oficina, pasando como trampolín o pasarela  por la máquina intermedia.

Si lo que quieres es traerte el puerto de la maquina destino (trabajo) a través de la máquina intermedia a un puerto de tu ordenador local (casa):

Desde casa:

ssh -L 8800:localhost:10000 usuariodestino@maquinaintermedia

Con ésto en el puerto de nuestra máquina local 8800 tendremos el 22 de la máquina destino

Tunel inverso SSH

Parámetros para usar con SSH:

  • -g:: Permitir a otros hosts usar este túnel, se consigue lo mismo con la opción GatewayPorts yes en el fichero /etc/ssh/ssh_config o en ~/.ssh/config
  • -N: No ejecutar ningún comando ni shell, solo crear el túnel
  • -L: Crear un túnel a un puerto remoto
  • -R: Crea un túnel inverso.

Sencillo, ¿no? 😛

Actualizado el 12 de junio a las 09:11

Enlace permanente a este artículo: http://www.lopst.com/2008/06/11/creando-tuneles-por-ssh/