>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
CSS

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:

  • --subdomain establece un nombre de subdominio fijo para que no tengas que cambiar la URL en la configuración del webhook después de cada reinicio
  • --scheme cambia el protocolo entre http y https si tu servicio local requiere una conexión segura
  • --dashboard-address levanta una interfaz local para inspeccionar y ver las solicitudes entrantes
  • --key acepta 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:

  1. Depurar webhooks entrantes de sistemas de pago, mensajeros o proveedores de OAuth directamente en tu depurador local con breakpoints.
  2. Probar una aplicación móvil en un smartphone real conectado a una red móvil, sin configurar el router Wi-Fi.
  3. 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.
  4. 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