Construí mi propia plataforma de tunelización
Pasé tres días puliendo una aplicación web en mi portátil. Se veía perfecta. Luego intenté probarla en mi teléfono. Todo se rompió.
El desarrollo local se vuelve caótico cuando necesitas un segundo dispositivo. Compartir una IP local falla debido a los firewalls y a los problemas con los certificados HTTPS.
Probé Ngrok. Funciona, pero el nivel gratuito corta las conexiones. Las URLs también se ven terribles. Las cadenas aleatorias como a1b2-34-56.ngrok-free.app son malas para compartir con clientes o equipos.
Quería un túnel con URLs limpias y legibles. Así que construí el mío propio.
Combiné un túnel personalizado con un acortador de URLs. Añadí IA para crear slugs inteligentes e integré protecciones de seguridad.
El stack tecnológico: • Túnel / Proxy: Django Channels, Daphne, WebSockets, Python & Node.js CLI • Frontend: Next.js, TailwindCSS, Shadcn/UI • Backend: Django 5, Graphene GraphQL • Base de datos: PostgreSQL (Neon) • Autenticación: JWT, bcrypt • IA: Google Gemini • Seguridad: MaxMind GeoLite2, Google Safe Browsing API
Cómo funciona:
- Tunelización WebSocket bidireccional. Un agente CLI local se conecta a un servidor Django para reenviar solicitudes HTTP.
- Protección contra condiciones de carrera (race conditions). Utilizo expresiones F() de Django para actualizaciones atómicas y mantener la precisión de las analíticas.
- Telemetría no bloqueante. Las búsquedas de ubicación y sistema operativo se ejecutan en hilos de fondo para mantener la latencia baja.
- Slugs con IA. Gemini lee la URL de destino para crear un slug significativo en lugar de texto aleatorio.
- Seguridad proactiva. Bloqueo rangos de IP privados y ejecuto comprobaciones de Google Safe Browsing antes de guardar cualquier enlace.
El backend y la lógica de tunelización son estables. El frontend aún es un trabajo en progreso.
Actualmente estoy estudiando para mis exámenes en el IITM. He pausado las nuevas funcionalidades para centrarme en mis estudios. En lugar de dejar el código abandonado, lo estoy abriendo para revisión.
Necesito vuestro feedback sobre algunas cosas:
- Latencia: ¿Cómo puedo mantener las redirecciones por debajo de los 10 ms a gran escala?
- Seguridad: ¿Cuál es la mejor manera de reforzar la mitigación de SSRF?
- Escalabilidad: ¿Debería usar WebSockets o TCP para túneles de larga duración?
- Observabilidad: ¿Qué métricas debería monitorizar para la salud del túnel?
Si tienes experiencia con proxy workers o diseño de sistemas, por favor comparte tus opiniones.
Desglose completo del diseño del sistema: [Link] Repositorio de código: [Link]
¿Cómo gestionáis las pruebas de permisos móviles durante el desarrollo local? ¿Utilizáis túneles de terceros o herramientas personalizadas?
Fuente: https://dev.to/zallu/my-ngrok-urls-got-so-ugly-i-built-my-own-tunneling-platform-instead-59d
