Trabajo administrando maquinas Unix y Linux remotas por SSH. Muy amenudo me encuentro en la situacion de necesitar bajar algun paquete rpm o deb, algun parche,… o ejecutar un software que requiere conexion a Internet para actualizarse, registrarse,… y lo tipico es que la maquina en cuestion no tenga conexion a Internet.
Quizas podria pedir el acceso a traves de un proxy corporativo o bien que la gente de redes me abra temporalmente el acceso a la web a traves del firewall, pero eso son tramites y tiempo perdido.
Sin embargo, en mi puesto de trabajo, tengo acceso por un lado a la maquina Unix por SSH y por otro lado tengo acceso a Internet a traves de la red corporativa (o con una tarjeta 3G en el CPD ;-) )(directamente o mediante proxy). Vamos a ver como montar un tunel SSH y un proxy de andar por casa para unir ambas cosas y conseguir conexion temporal a la web desde la maquina Unix!
El objetivo de este post es mostrar como poder conectarse puntualmente a la web desde una maquina Unix que no tiene conexion a Internet (caso tipico de servidores de clientes).
Esta situacion es util a menudo, por ejemplo en los siguiente casos:
- Bajar paquetes de una maquina Linux,
- Registrar una maquina Linux Red Hat en el RedHat Network
- Actualizar el SO de una maquina Linux (con Yum, APT,…)
- Bajar parches de una maquina Solaris con PCA,
- …
Para esto, no necesitamos mas que los tipicos recursos con los que se suele trabajar en la oficina:
- Un PC de usuario con Windows, con acceso a la web (directo o mediante proxy, eso es indiferente)
- Conexión SSH a la maquina Unix desde la que vamos a necesitar conexión Web (Putty)
En el puesto de usuario, bajar e instalar Fiddler2 (http://www.fiddlertool.com). Si no podemos instalarlo por temas de permisos de usuario, se puede copiar de otro PC donde lo tengamos instalado.
Lanzamos Fiddler2:

Abrir Tools/ Fiddler Options… y fijar estas opciones:

Si no aparece “Capturing” en la status bar, pulsar F12.
![]()
A partir de este momento, esta abierto en el PC el puerto localhost:8888 actuando de proxy web (el proxy no escucha en la interfaz de red del PC, solo en la loopback (localhost), con lo que nuestro PC no se ha convertido a un proxy).
Ahora nos conectamos con Putty a la maquina Unix/Linux en la cual necesitamos conexion a la web. En la optiones de la conexion de Putty, vamos a Conexion / SSH / Tunnels y añadimos un tunnel Remoto del puerto 8888 de la maquina Unix al puerto 8888 del PC (Fiddler, nuestro proxy!):

Putty SSH Port Forwarding
Pulsamos Add, aparecera en el cuadro:

Port Forwarding: Remote tunnel for proxy
Ok, ya podemos conectarnos.
Una vez en la maquina Unix, el proxy a utilizar sera http://localhost:8888.
Comprobamos que este abierto el tunnel:
# netstat -an | grep 8888 tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN tcp 0 0 ::1:8888 :::* LISTEN
Ejemplo de conexión: bajamos la pagina de Google:
# export http_proxy=http://localhost:8888 # cd /tmp # wget www.google.com --03:52:35-- http://www.google.com/ => `index.html' Resolving localhost... 127.0.0.1 Connecting to localhost|127.0.0.1|:8888... connected. Proxy request sent, awaiting response... 200 OK Length: unspecified [text/html] [ <=> ] 5,218 --.--K/s 03:52:35 (1.84 MB/s) - `index.html' saved [5218] #
Ya esta!
Si queremos saltar a otra maquina por SSH (por ejemplo: porque no podemos llegar directamente a ella desde nuestro PC), para mantener el tunel tenemos que poner:
# ssh -R 8888:localhost:8888 maquina2 maquina2# netstat -an | grep 8888 tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN tcp 0 0 ::1:8888 :::* LISTEN
Troubleshooting:
- Comprobar que Fiddler esta “Capturing” (en la barra de estado del fiddler, debe aparecer “Capturing” abajo a la izq.)
- Abrir el Internet Explorer (No Firefox u otro navegador, sino Internet Explorer), y conectarse a www.google.com –> debe salir la pagina y ademas en Fiddler debe aparecer el trafico HTTP correspondiente. Si no va esto:
- Cerrar Fiddler,
- Borrar la carpeta Fiddler2 de My Documents
- Eliminar la rama HKEY_CURRENT_USER\Software\Microsoft\Fiddler2 con el Regedit
- Volver a arrancar Fiddler2 y probar de nuevo.
- Quien tiene el túnel 8888?
# tty /dev/pts/1 # lsof -i TCP | grep 8888 | grep LIST sshd 13055 root 8u IPv4 35010374 TCP localhost:8888 (LISTEN) sshd 13055 root 9u IPv6 35010375 TCP [::1]:8888 (LISTEN) # ps -fp 13055 UID PID PPID C STIME TTY TIME CMD root 13055 1678 0 07:06 ? 00:00:00 sshd: root@pts/1
El terminal (pts/1) del proceso que tiene el Puerto 8888 abierto debe ser el mismo que el Terminal de nuestra session ssh (salida del comando tty).
Si no es asi, matar el proceso que tenga el 8888 abierto, salir de nuestra session ssh y reentrar para que se rehaga el tunel. Volver a comprobar esto.
Para ver a que PC redirige el tunel 8888, podemos hacer un:
# lsof -i TCP | grep :ssh | grep 13055 sshd 13055 root 3u IPv6 35014313 TCP :ssh->10.68.46.28:1216 (ESTABLISHED)

WoW!!!
Llevaba batante tiempo buscando algo así :D
Muy buen artículo, en cuanto vuelva de mis vacaciones, lo pruebo :DD aúnque creo que en emi caso no va a funcionar por que la primera máquina de salto, no tengo acceso como root, cuando lo pruebe de comento ;)
Seguro que te funciona, porque — se me ha pasado decirlo — NO es necesario tener permisos de root para establecer el tunel SSH, siempre y cuando no intentas abrir un puerto reservado.
Es decir si usas un puerto >1024, como aqui el 8888, te dejara con cualquier usuario.
Probado http y funciona perfectamente!!!
Lo que no he conseguido es hacer funcionar ftp exportando ftp_proxy me imagino que fiddler no lo soporta…