Hace un par de meses que aprendí a usar los túneles ssh, al principio me pareció algo complicado de entender, pero luego una vez lo usas un par de veces te haces a la idea. Y la verdad que resultan muy útiles, sólo con el sshd corriendo en tu máquina puedes acceder a cualquier puerto de cuálquier máquina de una red local sin necesidad de que la NAT de la red a la que accedes esté configurada salvo sólo para acceder desde internet (por ejemplo) al puerto en el que está funcionando ssh.
Ssh nos ofrece entre otras cosas una consola remota segura, ftp seguro, X forwarding y lo que hoy vamos a ver, túneles a través del protocolo ssh. Básicamente hay dos tipos, túnel en modo listen y en modo remote; empezaré por el primero, que es el que más comúnmente suelo usar.
Imaginemos que estamos por ejemplo en un aula de ordenadores en una biblioteca o en la universidad. Queremos conectar a nuestro mldonkey en el puerto 4080 de nuestro ordenador sobremesa, para poder ver como van esas descargas o bien añadir algo que nos han recomendado para bajar, por poner un ejemplo. Pero claro sólo tenemos el router configurado para que funcione con los puertos de edonkey y el ssh hacia un ordenador cualquiera de nuestra red. Suponemos que el servicio ssh está corriendo en la misma máquina que el mldonkey, que esta máquina se llama en la red molongo y que tiene la ip 192.168.1.110, ssh está en esta máquina en el puerto 22, sin embargo el router redirecciona el puerto 4422 al 22 de esa máquina.
Según esto, si queremos hacer sesión ssh tendríamos que ejecutar el comando ssh -p 4422 usuario@nombre_de_maquina_en_internet así conectaríamos haciendo sesión ssh al puerto 22 del ordenador de sobremesa. Pero realmente lo que queremos es tener acceso al puerto 4080, donde podemos conectar a la interfaz web de mldonkey. Recordemos que no tenemos acceso desde internet a ese puerto, pues no tenemos las reglas de redireccionamiento activadas en el firewall de nuestro router, así que haremos un túnel del puerto 4080 del sobremesa molongo al puerto 8888 del ordenador desde el que estamos accedidendo.
El comando sería: ssh -p 4422 -L 8888:localhost:4080 usuario@nombre_de_maquina_en_internet
Con este comando conseguimos una sesión ssh, pero además el túnel, ahora si abrimos el navegador web y ponemos la dirección http://localhost:8888 veremos lo mismo que si ponemos http://localhost:4080 en molongo.
Ahora veamos cómo se sabe qué es cada opción, -p es para decir qué puerto usamos para la sesión ssh, por defecto es 22, pero en nuestro router hemos abierto el 4422 direccinoado al 22 de molongo. -L es para hacer un túnel en modo listen y se especifica puerto_local:maquina_remota:puerto_remoto, debemos tener en cuenta que puerto_local es el puerto al que queremos llevar el puerto_remoto mediante el túnel y que maquina_remota es el nombre o ip de la máquina visto siempre desde la máquina en la cual está ejecutando el sshd al que estamos conectando. En el ejemplo anterior también funcionaría si pusiéramos molongo o 192.168.10.110 en lugar de localhost.
Si quisiéramos conectar a otra máquina de la red, en lugar de al sobremesa, por ejemplo a un servidor web que tengamos para acceder sólo desde nuestra red local, bastaría con substuir localhost por la ip o el nombre de esa máquina y también el puerto por el que queremos acceder, por ejemplo quedaría -L 8888:servidorweb:80.
Por otro lado tenemos el túnel en modo remoto, que es algo más extraño. Imaginemos que lo que queremos es acceder al servidor web para administrarlo, usando para ello una sesión ssh, este servidor no tiene acceso desde internet, pues está detrás de un firewall y no diponemos de puertos que redireccionen a él. En este caso el comando lo ejecutamos en el servidor web, de manera que lo que hacemos en este caso es decirle que haga un túnel para llevar el puerto 22 local al puerto 5522 de un equipo que sea accesible desde internet. ssh -p 4422 -R 5522:localhost:22 usuario@nombre_de_maquina_en_internet.
La opción -N es para que no ejecute ningún comando remoto, y la opción -f para que pase a segundo plano.
Respecto a los modos remote y listen el segundo es el que yo he encontrado más util. Espero que os sirva de algo a vosotros.
Gracias a Manuel por explicármelo pacientemente en su día.

Entradas (RSS)
tengo un proble quiero revisar mi correo y este ha sido bloqueado por el firewall y deseo hacer un tunel http ya que me han dicho que esto sirve pero no se hacerlo con ssh
tengo un servido local A(en este tengo cuenta de correo local)
y un servido proxy B:puerto
como hago para conectarme por ssh y navegar para ver las paginas bloquedas
No sé si te he entendido bien, pero te respondo en base a lo que creo que quieres decir.
Lo primero es que debes tener acceso externo a un servicio ssh dentro de la red local. Creas una sesión ssh a ese equipo con la opción -L 8888:servidor_correo:puerto
* servidor_correo es el nombre de tu servidor de correo visto desde la máquina ssh contra la que has iniciado la sesión ssh, supongamos maquina.tudominio.com.
* puerto es el puerto donde está el servicio de correo en la máquina servidor_correo
El comando quedaría algo así como:
ssh usuario@maquina.tudominio.com -L 8888:servidor_correo:puerto
Por lo que tú ahora accederías al servidor de correo en localhost:8888, por supuesto 8888 puedes cambiarlo por el puerto que te venga mejor.
Espero que te haya sido de ayuda. Un saludo.
Tu articulo me ayudo para aclarar cosas basicas .. XDD ya qe soy nuevo en esto. Gracias..!!