Runbook: VPN caída¶
| Gravedad | 🔴 Crítica — nadie fuera de casa puede acceder a |
| 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.scno 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.1desde un cliente remoto - [ ] Comprobar que la IP pública no ha cambiado:
curl -s https://desec.io/api/v1/domains/sc/y comparar concurl -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 netbirdynetbird status - [ ] Comprobar conectividad del relay de NetBird:
curl -s https://relay.sc:33080/health
Resolución¶
- [ ] Reinicio suave de NetBird:
docker restart netbirdy esperar 30 segundos - [ ] Reinicio del stack de red:
docker restart caddyy verificar que retoma los certificados - [ ] Reinicio duro del LXC de VPN:
pct reboot <ID_LXC_NETBIRD>desde Proxmox (https://proxmox.sc:8006ossh 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, luegopct start <ID> - [ ] Si todo lo anterior falla: activar WireGuard de emergencia:
WireGuard es independiente de NetBird y Authentik. Usa claves precompartidas estáticas. Verificar:
# En Ra (servidor principal) wg-quick up wg-emergencia # En el cliente del administrador wg-quick up wg-emergencia-clientewg showdebe 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 raa través de la VPN netbird statusmuestra peers conectados con IPs de la malla (10.10.10.x)- Si se usó WireGuard de emergencia:
wg showmuestra handshake < 2 minutos y transferencia de datos
Si no funciona¶
- Acceder físicamente al servidor Ra o pedir a alguien en casa que lo haga
- Verificar que el router doméstico tiene conectividad a Internet:
ping 8.8.8.8 - Verificar que el reenvío de puertos en el router sigue activo (UDP 51820 para WireGuard, puerto de NetBird relay)
- 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)