Runbook — Relanzar los proxies socat de NetBird tras un deploy
Propósito
Relanzar los proxies socat que exponen servicios internos del stack de CreaRack a la VPN NetBird, re-resolviendo las direcciones IP de los contenedores. Debe ejecutarse tras cada docker compose up que recree los contenedores, especialmente después de despliegues vía Dokploy.
Por qué existe
Los proxies socat escuchan en la interfaz NetBird (wt0) y redirigen tráfico a direcciones IP internas de contenedores Docker. Estas IPs cambian en cada recreate/deploy. Sin relanzar el script después del despliegue, el acceso NetBird queda apuntando a IPs obsoletas.
Footgun conocido: En el Hito A de observabilidad (mayo 2026), al recrear la VM de PROD, el acceso a VictoriaMetrics por NetBird se rompió porque los proxies socat apuntaban a la IP antigua del contenedor. Se detectó después de intentar consultar métricas remotamente.
Desde el 25-09-2026 (mega-auditoría B-45)
8428 y 9093 ya NO apuntan directos a VictoriaMetrics ni a Alertmanager: pasan por dos contenedores vmauth que piden usuario y contraseña (decisión completa: [[decision—20260925—vmauth-auth-netbird-b45]]). El script:
- Usa un mapa
puerto NetBird:contenedor:puerto internoen vez del mismo puerto en los dos lados, porquevmauth/vmauth-amescuchan en puertos propios (18428/19093), no en los de VictoriaMetrics/Alertmanager. - Cierra el proxy viejo del puerto ANTES de buscar el contenedor nuevo: si el contenedor destino no está (p. ej. vmauth sin su fichero de contraseña no arranca), el puerto NetBird queda cerrado en vez de seguir sirviendo tráfico sin autenticar contra el contenedor anterior.
Servicios expuestos
| Puerto NetBird | Contenedor:puerto interno | Uso |
|---|---|---|
| 8428 | vmauth:18428 | Consultas PromQL a VictoriaMetrics — pide usuario y contraseña desde B-45 |
| 5432 | db:5432 | Acceso directo a PostgreSQL (desarrollo/auditoría) — sin cambios |
| 9093 | vmauth-am:19093 | Panel de Alertmanager; enlaces del email de alarmas — pide usuario y contraseña desde B-45 |
Ejecución
Requisitos previos
- Acceso
sudoorooten el servidor (PROD o STAGE) - NetBird levantado y la interfaz
wt0activa - Los contenedores objetivo ya en ejecución (
docker pslos muestra)
Pasos
# 1. En el servidor PROD o STAGE, acceder por SSH
ssh user@crearack-prod.example.com
# 2. Ejecutar el script
sudo bash /etc/dokploy/compose/<app>/code/scripts/netbird-proxies.sh
Donde <app> es el nombre de la aplicación en Dokploy (ej: crearack-prod).
Salida esperada:
NetBird IP (wt0): 100.64.X.X
proxy 100.64.X.X:8428 -> crearack-prod-vmauth-1 (172.XX.X.XX:18428)
proxy 100.64.X.X:5432 -> crearack-prod-db-1 (172.XX.X.XX:5432)
proxy 100.64.X.X:9093 -> crearack-prod-vmauth-am-1 (172.XX.X.XX:19093)
OK. Proxies NetBird relanzados.
Idempotencia
El script es idempotente:
- Cierra el proxy
socatviejo de cada puerto antes de buscar el contenedor nuevo. - Omite servicios cuyo contenedor no esté corriendo (deja el puerto cerrado, no falla).
- Se puede ejecutar múltiples veces sin efectos secundarios.
Verificación post-ejecución
Desde un cliente conectado a la VPN NetBird:
# Verificar accesibilidad a cada puerto (salud real del servicio, no del panel)
curl -s -o /dev/null -w '%{http_code}\n' http://crearack-prod.netbird.cloud:8428/backend-health # 200
curl -s -o /dev/null -w '%{http_code}\n' http://crearack-prod.netbird.cloud:9093/backend-health # 200
nc -zv crearack-prod.netbird.cloud 5432
Acceder al panel de Alertmanager pide ahora usuario y contraseña del equipo (ver la decisión enlazada arriba):
http://crearack-prod.netbird.cloud:9093/
Si alguno responde con Connection refused o timeout, el script no ejecutó exitosamente o el contenedor se cayó (con vmauth: revisar si arrancó — ver la sección “Si vmauth arrancó sin su fichero” en context/INFRA.md).
Automatización futura
Actualmente el script se lanza manualmente post-deploy. Candidatos para automatizar:
- Ejecutar en un
post_deploy_hookde Dokploy (si soporta). - Incluir en un script de despliegue automático.
- Monitorear cambios de IP de contenedor y relanzar automáticamente.
Debugging
Si el script falla:
-
Interfaz wt0 no encontrada: NetBird no está activo. Iniciar NetBird en el servidor.
sudo systemctl start netbird -
Contenedor no encontrado: Verificar que existe y está corriendo.
docker ps | grep vmauth # ejemplo -
Error de permisos en socat: Asegurar que ejecutas como
sudoy quesocatestá instalado.which socat sudo apt install socat # si no existe -
Puerto ya en uso: Si
socatno puede bindear, algo otro está usando ese puerto enwt0.netstat -tuln | grep 8428 # ejemplo # O matar manualmente: sudo pkill -f "socat.*TCP-LISTEN:8428" -
vmauth en bucle de reinicio: no es un fallo de este script — vmauth no arranca sin sus ficheros de contraseña. Ver
context/INFRA.md, sección vmauth.
Véase también
- [[decision—20260707—netbird-ssh-apex]]
- [[runbook—infra—hetzner-firewall-solo-netbird]]
- [[crearack-tech—guides—deploy-checklist]]
- [[decision—20260925—vmauth-auth-netbird-b45]]
- [[concept—general—como-esta-configurado-el-acceso-a-los-servidores-h]]