NetBird: Implementación de una VPN de malla basada en WireGuard y confianza cero (Parte I)
Instalación de NetBird en modo autohospedado, siguiendo la guía avanzada oficial. Este apunte recoge los pasos necesarios para un entorno funcional, con integración OIDC mediante Authentik como proveedor de identidad y Caddy (instalado en el servidor, sin Docker) como proxy reverso.
No sustituye la documentación oficial, es un complemento práctico basado en un despliegue real.
Requisitos previos
-
Máquina virtual o servidor dedicado (AWS, Hetzner, DigitalOcean, bare-metal, etc.)
-
Cualquier sistema operativo Linux
-
Docker Compose instalado
-
jqinstalado- Debian/Ubuntu:
sudo apt install jq - RHEL/Fedora:
sudo yum install jq
- Debian/Ubuntu:
-
Dominio apuntando a la IP pública del servidor
-
Puertos abiertos:
-
Externos (desde Internet hacia el proxy): 80 y 443 (dashboard y APIs tras Caddy)
-
Internos (del stack de NetBird):
- TCP 33073 (Management gRPC API)
- TCP 10000 (Signal gRPC API)
- TCP 33080 (Relay/HTTP API)
-
Para Coturn:
- UDP 3478
- UDP 49152–65535 (para conexiones dinámicas del relay)
-
🔑 Importante: tanto NetBird como Authentik deben estar accesibles con certificados TLS válidos (no autofirmados).
Obtener la última versión estable
Script para clonar el repositorio en la última release estable:
#!/bin/bash
REPO="https://github.com/netbirdio/netbird/"
LATEST_TAG=$(curl -s https://api.github.com/repos/netbirdio/netbird/releases/latest | jq -r .tag_name)
echo "Última versión: $LATEST_TAG"
git clone --depth 1 --branch $LATEST_TAG $REPO
Luego acceder a la carpeta de infraestructura:
cd netbird/infrastructure_files/
Configuración del proveedor OIDC (Authentik)
NetBird requiere un proveedor OIDC para la autenticación. Aquí se usará Authentik.
Crear aplicación y proveedor
-
En Authentik, ir a Applications > Create with Provider.
-
Configurar:
-
Application name:
NetBird -
Provider type:
OAuth2/OpenID Connect -
Client type:
Public -
Redirect URIs estrictas:
http://localhost:53000https://nb.<tudominio>
-
Regex redirect:
https://nb.<tudominio>.* -
Asignar Signing Key (usar la por defecto si no hay otra).
-
Scopes:
openid,profile,email,offline_access, más los mappings por defecto de Authentik.
-
-
Guardar y anotar el Client ID y el slug.
⚠️ El cliente es público → obligatorio usar Signing Key. ⚠️ Audience: en despliegues self-hosted suele coincidir con el slug de la aplicación, no con un secret (que en públicos ni existe).
Crear cuenta de servicio
- En Directory > Users, crear usuario
NetBird. - Generar un App Password en Tokens and App Passwords (sin expiración).
- Añadir el usuario
NetBirdal grupo authentik Admins.
Configurar flujo de device token
-
En Flows > Create:
Name:default-device-code-flowSlug:default-device-code-flowDesignation: Stage ConfigurationAuthentication: Require authentication
-
En System > Brands, editar el brand por defecto y asignar ese flujo como
Default code flow.
Configuración de NetBird
-
Copiar
setup.env.example→setup.envy rellenar todos los valores necesarios (dominio, OIDC, Authentik, etc.). -
Ejecutar el script de configuración para generar los artefactos:
./configure.shEsto creará en la carpeta
artifacts/los archivos:-
docker-compose.yml -
management.json -
turnserver.conf
📌 Recomendado: cada vez que se edite
setup.env, volver a lanzarconfigure.shpara aplicar cambios. -
-
Entrar en la carpeta
artifacts/y levantar los contenedores:cd artifacts docker compose up -d
Verificación
Ejecutar en cliente:
netbird up
Problemas comunes
-
Bucle en
/peerstras reverse proxy con TLS: Añadir asetup.envy reconfigurar:NETBIRD_MGMT_API_PORT=443 NETBIRD_SIGNAL_PORT=443 -
Error 401 en login:
- Revisar que el
Audiencecoincide con el slug de Authentik. - Comprobar que el usuario de servicio
NetBirdestá en el grupo con permisos.
- Revisar que el