**SmallCountry** | | **T..."> Runbook: VPN caída - SmallCountry **SmallCountry** | | **T..." /> **SmallCountry** | | **T..." />
Saltar a contenido

Runbook: VPN caída

Gravedad 🔴 Crítica — nadie fuera de casa puede acceder a SmallCountry
Tiempo de respuesta < 15 minutos
Roles implicados Hermes (red), Jano (identidad), Argos (observabilidad)

Síntomas

  • Los usuarios reportan que no pueden acceder a ningún servicio desde fuera de casa
  • La app de NetBird en el móvil muestra "Desconectado" o no conecta
  • https://inicio.sc no carga desde fuera del WiFi doméstico
  • Los servicios funcionan correctamente desde dentro de casa

Diagnóstico

flowchart TD
    A([Alerta: VPN caída]) --> B[Diagnóstico]
    B --> B1[Verificar NetBird:\ndocker logs netbird]
    B1 --> B2[Verificar\nconectividad del túnel]
    B2 --> B3[Comprobar\nIP pública en deSEC]
    B3 --> B4[Revisar logs\nde Caddy]
    B4 --> B5[Verificar Authentik\ncurl healthcheck]
    B5 --> C{¿Causa\nencontrada?}
    C -->|Sí| D[Resolución]
    C -->|No| B
    D --> D1[Paso 1: Restaurar\nconfiguración]
    D1 --> D2[Paso 2: Reiniciar\nservicios NetBird]
    D2 --> D3[Paso 3: Activar\nWireGuard emergencia]
    D3 --> E[Verificación]
    E --> E1[Usuario externo accede\na inicio.sc]
    E1 --> E2[App NetBird\nmuestra Conectado]
    E2 --> F{¿Funciona?}
    F -->|Sí| G[Prevención]
    F -->|No| D
    G --> G1[Monitorizar IP\ncon deSEC + timer]
    G1 --> G2[Alerta Uptime Kuma\npara NetBird]
    G2 --> G3[Documentar\nWireGuard emergencia]
    G3 --> H([Fin])
  • [ ] Confirmar que el problema es externo (los servicios funcionan desde dentro de casa)
  • [ ] Verificar que NetBird está corriendo: docker logs netbird --tail 20
  • [ ] Verificar conectividad del túnel desde fuera: ping 10.10.10.1 desde un cliente remoto
  • [ ] Comprobar que la IP pública no ha cambiado: curl -s https://desec.io/api/v1/domains/sc/ y comparar con curl -s ifconfig.me
  • [ ] Revisar logs de Caddy: docker logs caddy --tail 20
  • [ ] Verificar que Authentik responde: curl -s https://authentik.sc/health
  • [ ] Verificar que NetBird management responde: systemctl status netbird y netbird status
  • [ ] Comprobar conectividad del relay de NetBird: curl -s https://relay.sc:33080/health

Resolución

  • [ ] Reinicio suave de NetBird: docker restart netbird y esperar 30 segundos
  • [ ] Reinicio del stack de red: docker restart caddy y verificar que retoma los certificados
  • [ ] Reinicio duro del LXC de VPN: pct reboot <ID_LXC_NETBIRD> desde Proxmox (https://proxmox.sc:8006 o ssh ra)
  • [ ] Si la IP pública cambió: actualizar registros en deSEC — curl -X PUT https://desec.io/api/v1/domains/sc/rrsets/vpn/A/ -H "Authorization: Token $DESEC_TOKEN" -d '{"records":["<NUEVA_IP>"]}'
  • [ ] Si NetBird no arranca tras reinicio: restaurar última snapshot ZFS del LXC — zfs rollback rpool/data/subvol-<ID>-disk-0@<snapshot> desde Proxmox, luego pct start <ID>
  • [ ] Si todo lo anterior falla: activar WireGuard de emergencia:
    # En Ra (servidor principal)
    wg-quick up wg-emergencia
    
    # En el cliente del administrador
    wg-quick up wg-emergencia-cliente
    
    WireGuard es independiente de NetBird y Authentik. Usa claves precompartidas estáticas. Verificar: wg show debe mostrar handshake reciente y transferencia de datos en ambos extremos.
  • [ ] Si WireGuard de emergencia tampoco funciona: verificar que el puerto UDP 51820 está abierto en el router doméstico (nmap -p 51820 -sU <IP_PUBLICA>)

Verificación

  • Un usuario fuera de casa confirma que puede acceder a https://inicio.sc
  • La app de NetBird muestra "Conectado" y el administrador puede hacer ssh ra a través de la VPN
  • netbird status muestra peers conectados con IPs de la malla (10.10.10.x)
  • Si se usó WireGuard de emergencia: wg show muestra handshake < 2 minutos y transferencia de datos

Si no funciona

  1. Acceder físicamente al servidor Ra o pedir a alguien en casa que lo haga
  2. Verificar que el router doméstico tiene conectividad a Internet: ping 8.8.8.8
  3. Verificar que el reenvío de puertos en el router sigue activo (UDP 51820 para WireGuard, puerto de NetBird relay)
  4. Si es caída del ISP: esperar a que vuelva el servicio. Los servicios locales siguen funcionando dentro de casa.

Rollback

Si la activación de WireGuard de emergencia causó conflictos con NetBird:

# En Ra
wg-quick down wg-emergencia
docker restart netbird
# Los usuarios recuperan NetBird en ~60 segundos

Prevención

  • Monitorizar la IP pública con deSEC + systemd timer (cada 5 minutos): systemctl status desec-update.timer
  • Configurar alerta en Uptime Kuma para el endpoint de NetBird (https://vpn.sc/health)
  • Documentar el procedimiento de WireGuard de emergencia en el gestor de contraseñas compartido
  • Probar WireGuard de emergencia una vez al mes (primer domingo de mes)
  • Mantener las claves de WireGuard de emergencia en Vaultwarden y en copia física (papel en caja fuerte)