Cómo exponer un puerto local a internet sin complicaciones
Una situación familiar: levantas un backend en tu máquina local, configuras la integración con un servicio externo como Stripe o Telegram, y luego necesitas probar un webhook. No hay acceso externo a tu localhost:8000, pedir una IP estática se siente como demasiado esfuerzo, y desplegar un entorno de staging solo para un par de solicitudes toma demasiado tiempo.
Por lo general, en momentos como estos, tu mano instintivamente busca ngrok o servicios similares. Pero las alternativas comerciales siempre vienen con limitaciones molestas: límites de tráfico, URLs que cambian con cada reinicio, o suscripciones pagadas para funciones básicas. Recientemente descubrí tunnelto — una utilidad de código abierto escrita en Rust que hace exactamente lo que promete, sin las complicaciones adicionales.
Qué es esta herramienta
El proyecto tunnelto te permite exponer un servidor web local a internet pública mediante un túnel. Ejecutas un único comando en la terminal, obtienes una URL pública válida y la pasas a servicios externos o clientes para demostraciones.
Lo principal es que tanto el cliente como el servidor están escritos en Rust utilizando el motor async tokio. Esto resulta en un uso modesto de memoria y un manejo rápido de las conexiones entrantes. No hay runtimes pesados ni procesos en segundo plano que consuman gigabytes de RAM.
El repositorio del proyecto está disponible en https://github.com/tunneltodev/tunnelto.
Cómo funciona en la práctica
La instalación toma un par de minutos. Si estás en macOS, la utilidad se instala mediante Homebrew:
brew install agrinman/tap/tunnelto
Si ya tienes una cadena de herramientas de Rust configurada, puedes compilar el paquete mediante Cargo:
cargo install tunnelto
Para otros sistemas, el autor ha preparado binarios compilados en la sección de Releases en GitHub.
Inicio rápido
Digamos que tienes una aplicación web ejecutándose localmente en el puerto 8000. Puedes exponerla al mundo exterior con este comando:
tunnelto --port 8000
Después de la ejecución, la utilidad abre un túnel e inmediatamente proporciona una dirección funcional. Cualquier solicitud entrante a esa dirección desde internet se reenvía instantáneamente a tu puerto local.
Parámetros útiles
En el trabajo diario, a menudo necesitas configuración adicional. Aquí están los flags que ahorran tiempo:
--subdomainestablece un nombre de subdominio fijo para que no tengas que cambiar la URL en la configuración del webhook después de cada reinicio--schemecambia el protocolo entre http y https si tu servicio local requiere una conexión segura--dashboard-addresslevanta una interfaz local para inspeccionar y ver las solicitudes entrantes--keyacepta una clave API para la autorización del túnel
Comando de ejemplo con especificación explícita de subdominio:
tunnelto --port 3000 --subdomain my-test-app
Para qué sirve
En desarrollo, hay varios escenarios donde el túnel ahorra horas de trabajo:
- Depurar webhooks entrantes de sistemas de pago, mensajeros o proveedores de OAuth directamente en tu depurador local con breakpoints.
- Probar una aplicación móvil en un smartphone real conectado a una red móvil, sin configurar el router Wi-Fi.
- Mostrar rápidamente diseños o prototipos a colegas mientras el código aún no se ha enviado al repositorio o desplegado a un servidor de pruebas.
- Verificar certificados HTTPS y encabezados de seguridad antes del lanzamiento.
Impresiones personales
El README menciona la capacidad de autoalojar el componente del servidor, aunque la documentación carece de instrucciones detalladas. Si la privacidad total del tráfico es importante para ti, necesitarás profundizar en el código base y desplegar un relay en tu propio VPS.
El proyecto no tiene muchas estrellas (alrededor de 400), y los commits no llegan todos los días, pero para tareas básicas la utilidad funciona de manera confiable. Inicia rápidamente, no requiere registro para el túnel básico, y hace exactamente una cosa clara. Si buscas un reemplazo simple de código abierto para ngrok, vale la pena revisar el repositorio y probarlo.
Proyectos relacionados