Configuración de Tailscale
Accede a tu Crow's Nest y a tu gateway de forma segura desde cualquier lugar, sin exponerlos a internet.
¿Qué es esto?
Tailscale crea una red privada (llamada tailnet) entre tus dispositivos. Una vez configurado, tu teléfono, tu laptop y tu servidor Crow pueden comunicarse entre sí como si estuvieran en la misma red local — incluso cuando estás fuera de casa.
¿Por qué querría esto?
- Acceso remoto seguro — Llega al Crow's Nest desde tu teléfono o laptop en cualquier lugar
- Sin redirección de puertos — Funciona a través de NAT y firewalls sin configurar el router
- Sin exposición pública — Tu gateway de Crow permanece invisible para internet
- Configuración fácil — Instala, inicia sesión, listo
Paso 1: Crea una Cuenta de Tailscale
Regístrate en tailscale.com. La capa gratuita admite hasta 100 dispositivos.
Paso 2: Instala en Tu Servidor Crow
En Ubuntu/Debian:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale upSigue la URL de inicio de sesión que aparece en la terminal para autorizar el dispositivo.
Después de iniciar sesión, obtén la IP de Tailscale de tu servidor:
tailscale ip -4Esto devuelve una IP como 100.x.x.x. Anótala — la usarás para acceder a Crow de forma remota.
Paso 3: Instala en Tu Dispositivo
Instala Tailscale en el dispositivo desde el que quieres acceder a Crow:
- macOS/Windows/Linux: Descarga desde tailscale.com/download
- iOS: App Store
- Android: Play Store
Inicia sesión con la misma cuenta que usaste en tu servidor.
Paso 4: Configura MagicDNS (Opcional pero Recomendado)
En lugar de memorizar direcciones IP, define un nombre de host amigable para poder acceder a Crow en http://crow/ desde cualquier dispositivo de tu tailnet.
sudo tailscale set --hostname=crowMagicDNS
MagicDNS está habilitado por defecto en las tailnets nuevas. Si http://crow/ no resuelve, revisa tu consola de administración de Tailscale y habilita MagicDNS.
Si crow ya está tomado en tu tailnet, usa una alternativa:
sudo tailscale set --hostname=crow-home
# Luego accede en http://crow-home/Paso 5: Accede a Crow de Forma Remota
Una vez que ambos dispositivos estén en tu tailnet, accede al Crow's Nest en:
http://crow:3001/dashboardO usando la IP de Tailscale:
http://100.x.x.x:3001/dashboardReemplaza 100.x.x.x con la IP de Tailscale de tu servidor del Paso 2.
Paso 6: Verifica la Conexión
Desde tu dispositivo, prueba la conexión:
tailscale ping crow
curl http://crow:3001/healthDeberías ver una respuesta de verificación de salud del gateway.
Hacer Público Tu Blog
Tu blog es público en la URL de tu gateway, pero el Crow's Nest permanece privado. Para hacer que el blog sea accesible fuera de tu tailnet:
Opción A: Tailscale Funnel (Uso Personal/Aficionado)
Nunca expongas la ruta raíz con Funnel
sudo tailscale funnel 3001 (o cualquier comando que mapee / al gateway) expone el inicio de sesión del dashboard del Crow's Nest a internet. El gateway bloquea del lado del servidor las solicitudes al dashboard que llegan por Funnel, pero la configuración correcta es exponer por Funnel solo las rutas públicas del blog. Usa siempre --set-path como se muestra abajo.
Expón solo las rutas públicas del blog (blog, feeds, descubrimiento OAuth):
sudo tailscale funnel --bg --set-path=/blog http://localhost:3001/blog
sudo tailscale funnel --bg --set-path=/robots.txt http://localhost:3001/robots.txt
sudo tailscale funnel --bg --set-path=/sitemap.xml http://localhost:3001/sitemap.xml
sudo tailscale funnel --bg --set-path=/.well-known/ http://localhost:3001/.well-known/Verifica que el Crow's Nest no sea accesible públicamente:
curl -I https://<your-tailnet>.ts.net/dashboard # se espera 404 (sin handler)
curl -I https://<your-tailnet>.ts.net/blog # se espera 200El gateway también rechaza del lado del servidor cualquier solicitud por Funnel a una ruta privada (Tailscale agrega Tailscale-Funnel-Request al tráfico de Funnel, que isAllowedNetwork() usa para fallar de forma cerrada). Esto es defensa en profundidad — aun así no debes exponer / por Funnel.
Para acceso solo desde la tailnet al gateway completo (dashboard, MCP, chat de IA), usa tailscale serve en un puerto separado:
sudo tailscale serve --bg --https=8444 http://localhost:3001Luego llega al Nest en https://<your-tailnet>.ts.net:8444/dashboard desde cualquier dispositivo de tu tailnet.
Limitaciones de Tailscale Funnel
Tailscale Funnel está diseñado para uso personal y de aficionados. Tiene límites de ancho de banda y no está pensado como solución de hosting de producción. Si planeas monetizar tu blog o podcast (anuncios, suscripciones, contenido de pago), usa un proxy inverso apropiado con un dominio propio (Opción B abajo) o considera el hosting administrado.
Opción B: Proxy Inverso con Caddy (Recomendado para Producción)
Para uso en producción, contenido monetizado o mayor tráfico, usa Caddy con un dominio propio. Caddy proporciona HTTPS automático vía Let's Encrypt sin límites de ancho de banda:
Instala Caddy:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install -y caddyConfigura /etc/caddy/Caddyfile para exponer solo las rutas del blog:
yourdomain.com {
# Páginas del blog, posts, feeds y sitemap
handle /blog* {
reverse_proxy localhost:3001
}
# Bloquear todo lo demás (Crow's Nest, MCP, API)
handle {
respond "Not Found" 404
}
}Luego define CROW_GATEWAY_URL en tu .env para que los feeds RSS, las URLs de podcast y los sitemaps usen el dominio público:
CROW_GATEWAY_URL=https://yourdomain.comReinicia ambos servicios:
sudo systemctl restart crow-gateway
sudo systemctl restart caddyCaddy obtiene y renueva automáticamente los certificados de Let's Encrypt. Asegúrate de que el registro DNS A de tu dominio apunte a la IP pública de tu servidor, y de que los puertos 80 y 443 estén abiertos en tu firewall.
Capa Gratuita de Oracle Cloud
Si estás ejecutando en Oracle Cloud, también necesitas agregar reglas de ingreso para los puertos TCP 80 y 443 en la security list de tu VCN. Consulta la guía de Oracle Cloud para más detalles.
Más allá del acceso de un solo dispositivo
Tailscale también habilita el encadenamiento multi-instancia — ejecuta Crow en varias máquinas y sincroniza datos entre ellas a través de tu red privada de Tailscale. Consulta el Inicio Rápido Multi-Dispositivo.
Solución de Problemas
No se puede llegar al servidor
- Confirma que ambos dispositivos aparezcan como "Connected" en la consola de administración de Tailscale en login.tailscale.com/admin/machines
- Comprueba que el gateway de Crow esté funcionando:
curl http://localhost:3001/healthen el servidor - Verifica que la IP de Tailscale no haya cambiado:
tailscale ip -4 - Prueba reiniciar Tailscale:
sudo systemctl restart tailscaled
La conexión expira
- Tailscale necesita una conexión inicial a un servidor de coordinación. Si tu servidor está detrás de un firewall estricto, puede necesitar acceso de salida a
login.tailscale.comen el puerto 443. - Algunas redes corporativas bloquean el tráfico UDP que Tailscale usa para conexiones directas. Tailscale recurrirá a servidores relay (DERP), que pueden ser más lentos pero igual funcionan.
El Crow's Nest devuelve 403
La verificación de red del Crow's Nest permite automáticamente localhost, los rangos privados RFC 1918 y el rango CGNAT de Tailscale (100.64.0.0/10).
Si necesitas permitir direcciones IP o rangos adicionales, define la variable de entorno CROW_ALLOWED_IPS en tu archivo .env:
# Una sola IP
CROW_ALLOWED_IPS=203.0.113.50
# Varias IPs y rangos CIDR, separados por comas
CROW_ALLOWED_IPS=203.0.113.50,198.51.100.0/24Como alternativa, define CROW_DASHBOARD_PUBLIC=true para desactivar la verificación de red por completo. Usa esto solo si tienes otros controles de acceso implementados (por ejemplo, un proxy inverso con autenticación).
Tailscale no inicia al arrancar
Habilita el servicio de systemd:
sudo systemctl enable tailscaled