vuzon es un panel web ligero y autoalojado para gestionar Cloudflare Email Routing: los alias de tu dominio, las reglas de enrutamiento y las direcciones de destino, desde una interfaz pensada para el uso diario. Se despliega como un único contenedor Docker en tu homelab o red privada y trabaja siempre contra tu cuenta de Cloudflare, con tu token de API.
El problema
Email Routing es una de las mejores piezas gratuitas del catálogo de Cloudflare, pero se administra desde un panel diseñado para operar infraestructura, no para crear un alias en diez segundos desde el móvil. Con esa fricción, la idea de «una dirección distinta por servicio» se queda en la teoría.
vuzon reduce ese flujo a una sola pantalla: crear netflix@tudominio.com, ver de un vistazo cuáles siguen activos y pausar o borrar el que empieza a recibir spam.
Qué hace
Alias
- Crear, pausar y eliminar alias de tu dominio. Pausar conserva la regla pero detiene la entrega.
- Cambiar el destino de un alias sin borrarlo y volver a crearlo.
- Elegir qué pasa con el correo: reenviarlo a una dirección verificada o descartarlo, útil para que una dirección parezca válida sin recibir nada.
- Renombrar reglas y ver todas las que existen en la zona, incluidas las que no creó vuzon: una ruta de Email Worker muestra su script y un reparto múltiple muestra todas sus direcciones. Editar una de esas sustituye su acción, así que el panel avisa antes.
- Generador de alias aleatorios de 8 caracteres con
crypto.getRandomValues(nuncaMath.random: un alias adivinable no sirve de nada). - Copia a un clic de la dirección que vas a crear y búsqueda para filtrar la lista cuando crece.
Direcciones de destino
- Alta y baja de destinos, con el estado verificado / pendiente siempre visible.
- Solo los destinos verificados pueden asignarse a un alias, y lo comprueba el servidor, no únicamente la interfaz.
Catch-all
- Se puede pausar o cambiar qué hace: reenviar el resto del correo a una dirección verificada o descartarlo.
- Lo que no se puede es romperlo. La API escribe siempre el criterio «coincide con todo» y no ofrece borrado, así que la regla de reserva no puede dejar de capturar correo sin que te enteres.
Interfaz y operación
- Español e inglés, conmutables desde la cabecera; la elección se recuerda en el navegador. Los mensajes de error también están localizados: la API responde con un código y el panel escribe la frase en tu idioma.
- Imagen Docker única, multiarquitectura amd64 / arm64, publicada en GHCR con cada release.
- Sin base de datos. En el volumen de datos solo viven tres ficheros pequeños: tus credenciales del panel (hasheadas), la clave de firma de la cookie y la marca de revocación de sesiones.
- Autodetección de zona y cuenta a partir de
DOMAIN, de modo que normalmente solo hay dos variables que rellenar. - Se niega a arrancar con una configuración claramente insegura (un
CF_API_TOKENde plantilla, un directorio de datos no escribible) en lugar de levantar en un estado roto.
Seguridad y alcance
vuzon está pensado para uso personal en un homelab o una red privada, no como despliegue multiinquilino ni como SaaS público. No tiene backend propio, ni telemetría, ni servicios de terceros: todo ocurre entre tu navegador, tu servidor y la API de Cloudflare.
- Las credenciales del panel se eligen en el navegador la primera vez que lo abres y se guardan hasheadas con scrypt en el volumen de datos. No existe una variable
AUTH_PASS, y la contraseña no está en texto plano en ningún sitio. - Completa esa configuración inicial cuanto antes: hasta que lo hagas el panel no tiene dueño y cualquiera que llegue a él podría reclamarlo (el mismo modelo de confianza en el primer uso que Uptime Kuma o Nextcloud). El servidor lo repite en el log en cada arranque mientras siga sin configurar.
- Haz copia del volumen de datos y trátalo como secreto: perderlo significa perder la contraseña y volver al asistente.
- Detrás de un proxy inverso, configura
TRUST_PROXYpara que el límite de intentos de login vea la IP real, yCOOKIE_SECURE=1si terminas TLS. Ambas están desactivadas por defecto para que un homelab sobre HTTP funcione sin tocar nada.
Stack
React y Vite en el frontend; Node.js con Express y validación con Zod en el backend; Docker para el empaquetado; la API de Cloudflare como única dependencia externa. Licencia Apache-2.0, imagen ghcr.io/kn990x/vuzon.
Empezar
mkdir vuzon && cd vuzon
curl -fsSL -O https://raw.githubusercontent.com/KN990x/vuzon/main/docker-compose.yml \
-O https://raw.githubusercontent.com/KN990x/vuzon/main/.env.example
cp .env.example .env
# Rellena DOMAIN y CF_API_TOKEN
docker compose pull && docker compose up -d
Abre http://localhost:8001 (o la IP de tu servidor) y elige usuario y contraseña en el asistente. El .env se distribuye vacío a propósito: vuzon no arranca hasta que rellenes DOMAIN y CF_API_TOKEN, y no hay nada más obligatorio.
El token de API necesita tres permisos: Account → Email Routing Addresses → Edit, Zone → Email Routing Rules → Edit y Zone → Zone → Read (este último solo para resolver la zona y la cuenta a partir de DOMAIN). Usa un token de API, no la Global API Key, y restringe el alcance a la zona que vayas a gestionar.
La documentación completa —permisos del token, variables opcionales, proxy inverso y notas de actualización desde 1.x— está en vuzon.cc y en el repositorio KN990x/vuzon.