¿Por qué Vaultwarden con Tailscale?

Vaultwarden es una implementación alternativa del servidor de Bitwarden, escrita en Rust y mucho más liviana. Tus contraseñas se quedan en tu NAS, cifradas, sin pasar por servidores de terceros. Tailscale maneja el acceso externo seguro usando un sidecar — sin tener que abrir ningún puerto en el router.

Paso 1: Configurar la consola de Tailscale

Este paso se hace una sola vez y te sirve para todos los servicios que instales en el futuro.

  1. Ve a https://login.tailscale.com/admin/dns
  2. Activa Enable MagicDNS → On
  3. Activa Enable HTTPS Certificates → On
  4. Ve a https://login.tailscale.com/admin/settings/keys
  5. Clic en Generate auth key → marca Reusable → deja Ephemeral desactivado → Generate
  6. Copia y guarda la clave (tskey-auth-xxxxx) — la vas a necesitar en el Paso 4

Paso 2: Crear las carpetas en el NAS

Desde el Administrador de Archivos de UGOS, crea esta estructura dentro de tu carpeta docker:

/docker/vaultwarden/data
/docker/vaultwarden/tailscale/state
/docker/vaultwarden/tailscale/config

Paso 3: Crear el archivo serve.json

Dentro de la carpeta /docker/vaultwarden/tailscale/config/, crea un archivo nuevo llamado serve.json con este contenido:

{
  "TCP": {
    "443": {
      "HTTPS": true
    }
  },
  "Web": {
    "${TS_CERT_DOMAIN}:443": {
      "Handlers": {
        "/": {
          "Proxy": "http://127.0.0.1:80"
        }
      }
    }
  }
}

Paso 4: Crear el Stack en Portainer

Ve a Portainer → StacksAdd Stack. Ponle el nombre vaultwarden. Antes de darle Deploy, reemplaza TU_CLAVE_AQUI con la clave que generaste en el Paso 1, y TU-TAILNET con el nombre de tu red en Tailscale:

version: '3.9'

services:

  tailscale:
    image: tailscale/tailscale:latest
    container_name: vaultwarden-tailscale
    hostname: bitwarden
    cap_add:
      - NET_ADMIN
      - NET_RAW
    environment:
      - TS_AUTHKEY=tskey-auth-TU_CLAVE_AQUI
      - TS_STATE_DIR=/var/lib/tailscale
      - TS_SERVE_CONFIG=/config/serve.json
      - TS_EXTRA_ARGS=--accept-dns=true
    volumes:
      - /docker/vaultwarden/tailscale/state:/var/lib/tailscale
      - /docker/vaultwarden/tailscale/config/serve.json:/config/serve.json:ro
      - /dev/net/tun:/dev/net/tun
    devices:
      - /dev/net/tun:/dev/net/tun
    restart: unless-stopped

  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    network_mode: service:tailscale
    environment:
      - DOMAIN=https://bitwarden.TU-TAILNET.ts.net
      - ROCKET_PORT=80
      - WEBSOCKET_ENABLED=true
      - SIGNUPS_ALLOWED=true
      - LOG_LEVEL=warn
      - TZ=America/Puerto_Rico
    volumes:
      - /docker/vaultwarden/data:/data
    restart: unless-stopped
    depends_on:
      - tailscale

Zonas horarias

Cambia el valor de TZ según donde estés:

  • Puerto Rico / República Dominicana: America/Puerto_Rico
  • Cuba: America/Havana
  • México (CDMX): America/Mexico_City
  • Colombia / Perú / Ecuador: America/Bogota
  • Argentina / Uruguay: America/Argentina/Buenos_Aires
  • Chile: America/Santiago
  • Venezuela: America/Caracas
  • EE.UU. Este: America/New_York
  • EE.UU. Oeste: America/Los_Angeles

Paso 5: Verificar y asegurar

  1. Portainer → Stacks → vaultwarden → verifica que ambos contenedores estén en running
  2. Tailscale admin → Machines → debe aparecer bitwarden en la lista
  3. Abre https://bitwarden.TU-TAILNET.ts.net en el navegador y crea tu cuenta de administrador
  4. Una vez creada la cuenta, vuelve a Portainer → cambia SIGNUPS_ALLOWED=true a SIGNUPS_ALLOWED=falseUpdate the stack

Ese último paso es importante — si dejas los registros abiertos cualquiera que llegue a la URL puede crearse una cuenta en tu Vaultwarden.

Conectar los clientes Bitwarden

En la extensión del navegador o la app móvil de Bitwarden, ve a Configuración → Servidor y pon tu URL de Tailscale:

https://bitwarden.TU-TAILNET.ts.net

Después inicia sesión con la cuenta que creaste. Funciona igual que Bitwarden en la nube — la diferencia es que todo está corriendo en tu NAS.

Mi experiencia personal

Vaultwarden lleva meses corriendo sin interrupciones en mi Ugreen NAS. Consume menos de 50 MB de RAM y la sincronización es instantánea en todos mis dispositivos. Migrar desde Bitwarden en la nube fue bien sencillo: exportas tu vault, importas en Vaultwarden, y listo en diez minutos. Desde entonces mis contraseñas no pasan por ningún servidor que no sea el mío.