Si tiene la suerte de tener una dirección IP dedicada de su ISP, puede configurar un servidor doméstico y ponerlo a disposición en Internet agregando algunas reglas de reenvío de puertos a su enrutador. Pero si su ISP lo obliga a compartir esta IP con sus vecinos, el reenvío de puertos no ayudará. Otros proveedores simplemente bloquean las conexiones recibidas a través de reglas de firewall.
Puede evitar todas estas restricciones utilizando un servidor privado virtual. Todo funcionará, incluso si tiene menos de 512 MB de RAM, porque todo lo que tiene que hacer es redirigir el tráfico de la red. Es muy simple en la CPU y la RAM. El servidor recibirá las conexiones recibidas y las redirigirá a su computadora a través de lo que se llama un «túnel SSH inverso». De esta forma puedes configurar cualquier tipo de servidor en casa, con unos costes mensuales muy reducidos.
Imagine que está creando un servidor NextCloud para cargar / sincronizar sus archivos. Obtendrá la privacidad de tener estos archivos en su servidor doméstico, luego puede comprar un disco duro de 6TB para obtener todo el espacio que necesita. Solo tienes que pagar una factura de luz mensual y menos de 5 USD / mes por un servidor privado virtual. Eso es mucho más barato que la factura mensual de un servidor con 6 TB de espacio.
Notar: solo funciona para redirigir el tráfico de red TCP. TCP es utilizado por cosas como servidores web (puerto 80 / tcp). Algunos (no todos) servidores de juegos utilizan UDP, por ejemplo Counter Strike (puerto 27015 / UDP). La tunelización UDP es posible, pero con algunos «trucos», que podrían ser el tema de un tutorial futuro.
Windows 10 ahora tiene un cliente SSH incorporado
Ya no necesita usar PuTTY para iniciar conexiones SSH. De hecho, para este tutorial, utilizará este cliente integrado para configurar el túnel. Lea el tutorial en Windows Cliente OpenSSH 10 si aún no lo conoce.
Prepare el servidor privado virtual para conectarse al túnel
Crea un servidor privado virtual con tu proveedor preferido, como DigitalOcean, Linode, Vultr o el que prefieras. Lo más importante es elegir una ubicación de servidor lo más cerca posible de usted para minimizar la latencia de la red. Intente configurar el servidor para que se conecte directamente a la cuenta raíz, preferiblemente con una clave SSH, ya que esto es más seguro. Esto es necesario si desea que el servidor escuche las conexiones que llegan a puertos por debajo de 1024, los llamados puertos privilegiados.
Abra el símbolo del sistema (o una terminal si está en Linux) y conéctese al servidor a través de SSH.
Modifique la configuración del servidor OpenSSH:
nano /etc/ssh/sshd_config
Si no ha iniciado sesión como root, pero como usuario normal, deberá utilizar este comando; de lo contrario, no podrá guardar el archivo:
sudo nano /etc/ssh/sshd_config
Desplácese hacia abajo hasta encontrar una variable llamada «GatewayPorts». La línea podría verse así: #GatewayPorts no
. Elimina el «#» anterior (para descomentar) y reemplaza la línea con GatewayPorts yes
.
Si no puede encontrar la línea, desplácese hasta el final y agregue la línea usted mismo:
GatewayPorts yes
Prensa control + X, entonces presione síy finalmente Enter para guardar el archivo.
Vuelva a cargar el demonio SSH para asumir la nueva configuración.
systemctl reload ssh.service
Salga de la sesión SSH.
exit
Cómo configurar un túnel SSH inverso
Los parámetros del comando son los mismos en Linux, Windows, e incluso sistemas operativos BSD. La sintaxis general es:
ssh -R remote_port:host:localport your_username@IP-of-server
-
remote_port
le dice al servidor que redirija las conexiones que llegan a él en este puerto. -
host
le dice al servidor a qué dirección IP se debe redirigir la conexión.127.0.0.1
se utilizará aquí para redirigir a su propia computadora. -
localport
indica a qué puerto se deben redirigir los paquetes de datos. Aquí debe ingresar el número de puerto en el que está escuchando su aplicación instalada en su computadora local.
Por ejemplo, para redirigir todas las conexiones que llegan al puerto 80 (al servidor) y enviarlas al puerto 8080 en su computadora local, el comando sería:
ssh -R 80:127.0.0.1:8080 root@203.0.113.1
Esto supone que tiene un servidor web, como Apache o Nginx, que escucha en el puerto 8080 de su máquina local. Pero si Apache / Nginx escucha en el puerto 80 de forma predeterminada, entonces no hay problema para usar el mismo puerto dos veces en el comando anterior (porque se refiere al puerto 80 en otro servidor).
ssh -R 80:127.0.0.1:80 root@203.0.113.1
En este punto, si alguien ingresa la dirección IP de su servidor privado virtual en la barra de direcciones de un navegador, su conexión será redirigida y servida por su computadora local.
En la imagen de arriba, un servidor web simple para Chrome se usó que escucha por defecto en el puerto 8887. Puede probar esta configuración usted mismo instalando la aplicación y luego usando el comando, como en la imagen.
Cabe mencionar que para mantener el túnel activo, la sesión SSH debe permanecer activa. Para cerrar el túnel, escriba exit
en la ventana de terminal / símbolo del sistema.
Conclusión
Como puede ver, no es difícil crear un túnel SSH inverso, pero proteger un sitio web sí lo es. Entonces, si elige implementar una idea como un servidor NextCloud local, al menos aíslela en una máquina virtual. De esta manera, si su sitio web se ve comprometido, al menos el resto de su sistema operativo saldrá ileso.
Y ya sabes … ¡siempre devuelve lo que no quieras arriesgarte a perder!