Esto no es realmente un versus. Cloudflare Tunnel (cloudflared) y PortPreview viven en habitaciones distintas. Cloudflare Tunnel es para mantener un servicio permanentemente en línea detrás del edge de Cloudflare — Zero Trust, túneles con nombre, dominios personalizados. PortPreview es para los próximos veinte minutos de tu sesión de desarrollo — pruebas de webhook, QA móvil, compartir una rama con un diseñador. Elegir entre ambos depende sobre todo de qué problema tienes en realidad.
En qué es bueno Cloudflare Tunnel
cloudflared se construyó para una cosa: poner un servicio en internet sin abrir un solo puerto entrante y sin exponer tu IP de origen. Córrelo en un servidor, adjunta un túnel con nombre a un hostname en tu dominio de Cloudflare, y el tráfico fluye por el edge de Cloudflare hasta tu origen por una conexión saliente que tu máquina inició.
Cosas que hace bien:
- Routing de producción. La función de túnel con nombre es duradera. Puedes correr cloudflared como servicio y el hostname sigue funcionando entre reinicios.
- Políticas de acceso Zero Trust. Protege el túnel detrás de SSO, MFA o allowlists de IP para exponer herramientas internas.
- Dominios personalizados. Trae tu propio dominio en Cloudflare. El túnel termina en
tu-dominio.com, no en un subdominio del proveedor. - Routing WARP. Alcanza servicios privados desde cualquier dispositivo en la red de Cloudflare sin configurar VPN.
Nada de eso trata sobre depuración de webhooks.
Dónde Cloudflare Tunnel se vuelve incómodo para desarrollo
El modo quick tunnel (cloudflared tunnel --url localhost:3000) es lo más cerca que cloudflared llega a ser una herramienta de desarrollo, y funciona. Obtienes una URL *.trycloudflare.com apuntando a tu puerto local. Pero:
- La URL rota cada sesión, como la mayoría de los túneles de desarrollo.
- No hay inspector de peticiones integrado. Ves lo que tu servidor de desarrollo registra y nada más. Capturar un payload de webhook para replay después requiere atornillar un proxy o logger separado.
- La configuración de túneles con nombre (la versión de URL estable) implica una cuenta de Cloudflare, registros DNS y un archivo de config. Vale la pena para un servicio de larga vida; excesivo para una sesión de iteración de webhook.
Dónde encaja PortPreview
PortPreview es un CLI de tunneling localhost para el bucle de desarrollo. Un comando, URL HTTPS pública, captura y replay de peticiones integrados.
npx portpreview 3000
Lo que optimizamos es el momento entre "cambié mi handler de webhook de Stripe" y "sé si funciona". Ese momento debería durar segundos. Captura el payload, arregla el handler, replay hasta que esté en verde, todo sin re-disparar el evento upstream.
Lado a lado
| Necesidad | Cloudflare Tunnel | PortPreview |
|---|---|---|
| Sesión rápida para depuración de webhook | Posible (quick tunnel) | Construido para esto |
| Captura y replay de peticiones | No | Sí |
| Hostname con nombre estable | Sí (con configuración) | No es el foco por defecto |
| Dominio personalizado | Sí | Subdominio del túnel |
| Política de acceso Zero Trust | Sí | No |
| Complejidad de configuración | Baja para quick, media para named | Un comando |
| Correr para siempre como servicio | Sí | Diseñado para sesiones |
| Cliente open source | Sí (cloudflared) | Sí |
Cuándo usar cada uno
Usa Cloudflare Tunnel cuando
- Necesitas un servicio en línea 24/7 sin abrir puertos del firewall.
- Quieres acceso protegido por SSO a un dashboard interno o herramienta de admin.
- Necesitas una URL estable de dominio personalizado respaldada por un cert de CA real y tu DNS de Cloudflare existente.
- Ya estás en Cloudflare y el costo marginal de configuración es pequeño.
Usa PortPreview cuando
- Iteras en un handler de webhook y quieres replay de un clic.
- Quieres compartir una rama con un diseñador por diez minutos.
- Pruebas callbacks de OAuth o flujos móviles sin configurar DNS.
- Prefieres no gestionar una cuenta de Cloudflare solo para probar un evento de Stripe.
Conviven bien
Varios equipos con los que hemos hablado usan ambos. Cloudflare Tunnel para la herramienta interna siempre activa que necesita una URL fija y SSO. PortPreview para la depuración diaria de webhooks que necesita replay y un solo comando. No entran en conflicto — solo sirven a partes distintas del arco dev-a-prod.
Si también estás sopesando ngrok o localtunnel, esas comparaciones pueden ser más directamente relevantes. Únete a la lista de espera de PortPreview para el lado del bucle de desarrollo.