Cómo hacer una VPN simplecita con ssh

Imagen de Epe

Este está bueno, en inglés le llaman la VPN del pobre (poor man's vpn).

Realmente le usé, antes cuando no estaba dedicado a las VPN una vez viajé a Cuba y me restringían algunos puertos y lugares. Así que pensé, le pongo el squid a uno de mis servidores en canadá y me conecto, pero oh sorpresa, también me restringían el acceso al puerto 3128.

Afortunadamente no me bloqueaban el puerto 22, así que hice una VPN del pobre via ssh entre mi máquina en Cuba y mi servidor en Canadá. En Canadá monté un squid y navegué sabroso. Y de paso iba encriptada.

La idea es la siguiente, le pediré al SSH que escuche en un puerto local(plocal) y que toda conexión que se realice a plocal la asocie con una ipremota (será 127.0.0.1 del servidor remoto en mi caso) a un puerto remoto de esa ip (premoto).

Entonces cuando yo me conecto a mi iplocal (127.0.0.1) en plocal, realmente me estaré conectando a la ip remota (127.0.0.1 del servidor remoto) en el puerto remoto (premoto).

No me hago mucha lucha, por ejemplo, veamos el siguiente ejemplo práctico:
Quiero conectarme mediante una conexión encriptada al MySQL de uno de nuestros servidores (srv12.miservidor.com) para poder usar el MySQL administrador.

Hago lo siguiente:

ssh -L plocal:ipremota:premoto root@srv12.miservidor.com

si quieres incluso puedes usar -C para comprimir la conexión en la anterior línea.

Haría así:

ssh -C -L 3306:127.0.0.1:3306 root@srv12.miservidor.com

me va a pedir clave y todo lo demás que hace el ssh, e incluso me abrirá un SHELL al servidor remoto. No te preocupes y no cierres el shell, si cierras el shell perderás la VPN.

el primer "3306" es el puerto de mi máquina local, ahora: "127.0.0.1:3306" es, el puerto 3306 en la IP 127.0.0.1 de la máquina remota

Pruébale, haces un telnet a localhost 3306 y te saldrá la conexión remota.


[eperez@eperez ~]$ telnet localhost 3306
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
4
5.0.77��C`|q@-\hu,6HK|OXIGgSGM^]q

telnet> q
Connection closed.
[eperez@eperez ~]$

ya, esta conexión que aparenta ser a localhost 3306, realmente se está realizando al localhost:3306 del servidor remoto!

así que ahora puedes instalar cualquier programa en tu PC local y conectarte al MySQL.

Por supuesto puedes probar con cualquier otro puerto y hacer el uso que quieras.

Si te dá conexión rechazada es o porque no tienes el ssh activo o porque es que no tienes nadie atendiendo el puerto en la máquina remota.

Comentarios

Super bien epe muchas

Super bien epe muchas gracias, creo que para complementar tu aporte también seria de mucha utilidad hacer túneles reversos siguiendo el siguiente formato:


ssh -R puertoremoto:iplocal:puertolocal root@srv12.miservidor.com

Saludos,