Ver tus paneles internos sin abrir un solo puerto: tunel SSH y Tailscale
Monitoreo, consolas de administracion y editores de automatizacion accesibles desde tu maquina y desde el celular, sin publicarlos a internet. Con las dos trampas que hacen perder mas tiempo.
Tienes un panel de monitoreo, una consola de administración de almacenamiento y un editor de automatizaciones corriendo en tu servidor. Ninguno debería estar en internet, y aun así quieres entrar — a veces desde el celular.
Dos herramientas resuelven esto sin abrir un solo puerto. Este tutorial cubre las dos y cuándo usar cada una.
Antes: publica en loopback
Nada de esto sirve si el servicio está expuesto. En tu compose:
ports:
- "127.0.0.1:9001:9001" # y no "9001:9001"
Sin el prefijo, Docker escribe reglas de iptables que se saltan tu firewall. Puedes tener firewalld perfecto y el puerto abierto igual. Compruébalo desde otra máquina, no desde el servidor:
nmap -Pn -p 9001 tu-servidor.com # debe salir filtered o closed
Opción A: túnel SSH, para ratos cortos
Un túnel toma un puerto de tu máquina y lo conecta a un puerto del servidor, por dentro de la conexión SSH que ya tienes.
ssh -L 9001:127.0.0.1:9001 usuario@tu-servidor.com
Se lee de derecha a izquierda: conéctate al servidor y, una vez ahí, alcanza 127.0.0.1:9001 —loopback del servidor— y tráemelo a mi puerto 9001.
Deja esa ventana abierta: mientras viva, el túnel vive.
Y ahora el detalle que hace perder más tiempo de toda esta guía. En el navegador escribe:
http://127.0.0.1:9001
Con 127.0.0.1, no con localhost. Chrome y Edge en Windows resuelven localhost a ::1, que es IPv6, y el túnel de ssh escucha en IPv4. La página no carga, el error no menciona nada de IPv6, y parece que el túnel falló. No falló: le estás tocando la puerta equivocada.
Varios servicios a la vez, repitiendo la bandera:
ssh -L 9001:127.0.0.1:9001 -L 19999:127.0.0.1:19999 usuario@tu-servidor.com
Y si solo quieres el túnel, sin sesión interactiva:
ssh -N -L 9001:127.0.0.1:9001 usuario@tu-servidor.com
Se cierra con Ctrl+C, o cerrando la ventana.
Opción B: Tailscale, para el celular
El túnel es perfecto desde la computadora y muy incómodo desde el teléfono. Tailscale crea una red privada entre tus dispositivos: cada uno recibe una IP que solo existe dentro de esa red.
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
Te da una URL para autenticarte. Instala la app en el teléfono con la misma cuenta y listo: el servidor aparece con una IP tipo 100.x.y.z, alcanzable desde el celular esté donde esté, sin abrir nada al mundo.
tailscale status # ves tus nodos y sus IPs
La trampa de Tailscale con Docker
Aquí es donde casi todos tropiezan. Un servicio publicado como 127.0.0.1:9001 no se alcanza por la IP de Tailscale. Loopback es loopback: solo responde a peticiones que nacen dentro de la máquina, y una que llega por la interfaz de Tailscale viene de fuera.
Dos salidas. La primera, mapear el puerto también a esa IP:
ports:
- "127.0.0.1:9001:9001"
- "100.99.206.97:9001:9001" # la IP Tailscale del servidor
La segunda, dejar que el servicio escuche en todas las interfaces y confiar en el firewall para bloquear las públicas. Para eso, mete la interfaz de Tailscale en la zona de confianza:
sudo firewall-cmd --permanent --zone=trusted --add-interface=tailscale0
sudo firewall-cmd --reload
Con eso, lo que llega por la red privada pasa y lo que llega de internet sigue bloqueado. Es lo que uso para el monitoreo, que quiere ver el host entero.
Cuál usar
Túnel SSH cuando es puntual, desde tu computadora, y no quieres instalar nada en el servidor. Cero configuración permanente.
Tailscale cuando quieres entrar desde el celular, o revisar algo sin abrir una terminal primero. Requiere un demonio corriendo y una cuenta.
Yo tengo las dos. La consola de almacenamiento la abro por túnel dos veces al mes; el monitoreo lo veo por Tailscale desde el teléfono cuando algo huele mal.
Comprueba que sigue cerrado
Después de configurar, la prueba que importa es desde fuera:
curl -sI --max-time 5 http://tu-servidor.com:9001 || echo "cerrado, como debe ser"
Si eso responde algo, sigues publicando el panel a internet.