Resulta que si tienes un VPS puedes redireccionar puertos de este para hacer llegar el tráfico a tu máquina local a través de un túnel SSH.
Cuando era un pendejo chico, me gustaba jugar Minecraft, me hacía amigos y me gustaba jugar con ellos. Hay unos recuerdos muy lindos y otros no tanto. Pero en promedio la cosa era diversión, y mucha.
[SpaceBeat -> Me] Ya tienes los diamantes?
Yo> 7tell SpaceBeat Si espera, me pongo en creativo y te los doy
*Los otros weones en el mismo server*: XDN’T 😠
Un recuerdo muy presente.
El problema de jugar con amigos
Sea Minecraft o cualquier otro juego que requiera un servidor, en Chile todos los Proveedores de Internet (o ISP) tienen una infraestructura que involucra un CG-NAT. Básicamente, un router gigante que actúa como canal entre los demás clientes y el internet. Por lo que internet solo ve una dirección IP.

Tú puedes conectarte a un servicio que Internet como tal provee, pero no puedes conectarte a un servicio que está alojado dentro de un ISP. En nuestro caso, desde internet no nos podemos conectar a nuestro servidor que esté en nuestro hogar.
Esto lo entendí cuando intentaba entender por qué los tutoriales que veía en internet no funcionaban. Seguía todos los pasos:
- Abrir el puerto 25565 en tu router. Port Forwarding.
- Obtener tu dirección IP pública. cualesmiip.com
- Compartir tu dirección IP pública junto al puerto abierto. ip_publica:puerto
Y cuando queríamos jugar, siempre teníamos el mismo problema. Mis amigos no podían conectarse.
Obviamente, como eran pruebas que no funcionaban. Usábamos en ese tiempo un programa llamado LogMeIn Hamachi. El cual permitía un túnel que conectaba nuestras redes. Y así podíamos jugar Minecraft, sin problemas.

Uno crece y la curiosidad persiste
Cuando pendejo era muy curioso, sobre todo con el mundo de la informática. Con el tiempo uno crece, estudia y va a Ingeniería en Informática, ¿por qué no? Y la curiosidad vuelve con todo. Y te hace aprender, y en mi caso, comprar un VPS para aprender sobre estas máquinas virtuales, y de paso aprender despliegue de aplicaciones como Laravel, ASP.NET, etc. Inicialmente, lo compré para desplegar el sitio de GP7D, que está desarrollado en Laravel.
Un VPS es un computador, dentro de un servidor, comúnmente virtualizado. Todos pueden verlo y tú puedes hacer con él casi lo mismo que en tu computadora personal. Solo que sin un entorno de escritorio, todo se realiza con el terminal, mediante una conexión SSH.

Un VPS se controla mediante una conexión SSH. Ojalá con llaves SSH como autenticación, porque las contraseñas deberían dejar de existir. Y te conectas mediante una dirección IP que el proveedor te asigna, luego puedes usar un dominio propio y apuntarlo a la IP mediante tu DNS y así usar el dominio en vez de números difíciles de recordar. En mi caso es vps.crizacio.com.
Aprendiendo un poco más de SSH, encontré un video, en donde el sujeto enseñaba sobre los Túneles SSH. Que, básicamente, cumplían una función que creo que es similar a lo que el Hamachi hacía.
Túnel SSH
Un túnel es una forma de conectar dos dispositivos mediante un canal. De tal forma que ambos dispositivos crean que están en una misma red.
En este video se explican tres casos. Este video es parte de una serie de videos del tema. Misma serie de videos que vi para aprender y redactar este blog.
Con los videos vistos, comencé mi práctica, y sorpresivamente, funciono. (Igual no tendría por qué haber fallado jiji, los traumas)
Lo que sí, antes de continuar, se deben realizar los siguientes pasos:
- Apuntar el dominio a la IP del VPS: Mediante Cloudfare (que es donde tengo mi DNS del dominio) se debe apuntar mediante un registro
A
la dirección IP170.238.87.51
haciavps.crizacio.com
- Abrir los puertos: Tanto el equipo local (desde ahora WarMachine) como el VPS tienen que tener los puertos a usar abiertos. Esto se realiza con
UFW
.$ ufw allow 25565/tcp
- Editar el archivo
/etc/ssh/sshd_config
y ponerclientspecified
en la opciónGatewayPorts
. Esto para evitar confusiones entre la dirección IP y dominio.
Tal que, la cosa en Cloudfare se ve así:

Y en ambos terminales (de WarMachine y el VPS) se debe ver así:

La cosa toma el siguiente aspecto una vez ejecutado el comando para crear el túnel SSH…
ssh -v -R vps.crizacio.com:25565:127.0.0.1:25565 <user>@vps.crizacio.com -p<puerto>

Si no lo sabías, 25565 es el puerto por defecto para servidores de Minecraft.
Lo que aquí está pasando es: En WarMachine estamos abriendo un túnel Remoto o Reverso (-R
) a nuestro VPS. Por lo que, nuestro VPS va a escuchar en vps.crizacio.com:25565
y va a direccionar el tráfico a nuestra máquina local en localhost:25565
.
En el comando, <usuario_vps>
es el nombre de usuario que usamos para iniciar sesión SSH en el VPS. Y <puerto_ssh_vps>
es el puerto para la conexión SSH, que suele ser 22, pero es mala idea dejar el puerto por defecto, por la gente mala que quiere hackearnos.
No es solo Minecraft
El ejemplo de Minecraft fue básicamente para saber si funcionaba. En resumen, si funcionaba con Minecraft, entonces funcionaba con todo.
Ahora las siguientes posibilidades me emocionan mucho:
- Escritorio Remoto: Me ha pasado que necesito acceder a mi equipo, sobre todo para ejecutar una instancia de Overwatch eSports Watcher Bot y otras cosas. Con este túnel puedo abrir el puerto usado por el protocolo VNC (5900) o RDP (3389) y así conectarme remotamente.
- Deploy de aplicaciones: Ahora puedo hospedar mis aplicaciones con mi equipo local, muy bueno para hacer pruebas. Como con Mi-Red-Metropolitana.
El VPS que tengo contratado es el más barato existente, $2.500 mensuales ($2.900 en realidad). Pero como es tráfico y no procesamiento lo que se involucra en esto, los resultados son muy buenos.