NetBird: Implementación de una VPN de malla basada en WireGuard y confianza cero (Parte II)
Introducción
Este artículo continúa el despliegue autohospedado de NetBird iniciado en la Parte I y se centra en la fase de ajuste fino y puesta en marcha real del stack. El objetivo es consolidar la configuración, generar los artefactos finales y exponer NetBird correctamente a través de Caddy como proxy reverso, manteniendo Authentik como proveedor OIDC.
El contenido no pretende guiar paso a paso, sino dejar claro qué archivos se tocan, por qué se regeneran y cómo encajan proxy, variables y contenedores dentro del flujo completo.
Ubicación actualde trabajo
ActualmenteEl estamospunto ubicadosde enpartida laes carpeta:el directorio de infraestructura de NetBird:
netbird/infrastructure_files/
Desde aquí se encuentragestionan eltodos los docker-compose.ymlprincipal y demás archivoselementos necesarios para continuar con el desplieguedespliegue:
configure.sh)
Directorio de salida (artifacts/)
🔑
Importante: tantoNetBirdcomoy Authentik debenestar accesibles con certificados TLS válidos (no autofirmados) yser accesibles públicamenteparayquemedianteelcertificados TLS válidos. El flujo OIDCfuncionefallacorrectamente.de forma silenciosa si se utilizan certificados autofirmados o endpoints no accesibles desde Internet.
Archivos aimplicados editaren la configuración
SeLa editaránconfiguración se realiza directamente ("ensobre sucio")plantillas, no sobre los siguientesarchivos archivos:finales:
docker-compose.yml.tmplsetup.env.example→ una vezeditado,ajustado, serenombrarárenombra asetup.env
CadaEstos vezarchivos queno se realiceusan un cambiodirectamente en estosejecución. archivos,Actúan deberácomo ejecutarsefuente elde scriptverdad a configure.shcon:partir de la cual se generan los artefactos finales.
Cada modificación requiere ejecutar:
./configure.sh
EstoEste generaráproceso losgenera archivosautomáticamente finalesel contenido definitivo dentro dede:
artifacts/,
Ahí se encuentracrean, enentre este mismo directorio. Desde ahí, se podrán levantar los contenedores cuando todo esté listo.otros:
Una
./configure.shdocker-compose.yml
management.json
turnserver.conf
El necesarios dentrostack de laNetBird carpetasolo debe levantarse desde artifacts/., Seránunca desde esala carpeta donde finalmente levantaremos el entorno completoraíz de NetBird.infraestructura.
Integración con Caddy
Además del stack de contenedores, es necesario exponer NetBird a través del proxy reverso.
Después de eso, habrá que editar también elEl archivo Caddyfile. Sedebe puedeampliarse tomar como base el ejemplo disponible en el repositorio Gitea (ver más abajo) y adaptarlo a los puertos que hayamos elegido en nuestra configuración.
Una vez añadidacon la sección correspondiente a NetBirdNetBird, tomando como base un ejemplo funcional y adaptándolo a:
setup.env
CaddyfileTras aplicar los cambios, se reinicia Caddy para aplicarque losel cambios:proxy cargue la nueva configuración:
sudo systemctl restart caddy
Finalmente,Una convez todo en su sitio (entorno,proxy, variables y proxy),artefactos levantaremosestán losalineados, contenedoresel deentorno NetBirdcompleto desdepuede lalevantarse carpeta artifacts:desde:
cd artifacts/
docker compose up -d
UnaEn vezeste realizadopunto, todoel esto, solo tendremos que iracceso al dominio elegidoconfigurado paradebería NetBird,redirigir autenticarnoscorrectamente cona Authentik y...y finalmentepermitir estaremosla dentro.autenticación en NetBird.
Archivos de ejemplo listos para usarpreparados
Para facilitarsimplificar lael configuración,despliegue, se han preparado versionesarchivos de ejemplo ya limpiasdepurados, yajustados ajustadasal aescenario la configuración explicadadescrito en la primeraParte parte.I. Algunas secciones seSe han eliminado porquesecciones no son necesarias para esteevitar escenarioruido concreto.y confusión.
EstánRepositorio disponiblesdisponible en el siguiente repositorio:Gitea:
EjemplosNetbird NetBird en- Gitea
Contiene:Incluye:
docker-compose.yml.tmpl→—listoplantilla lista pararellenarcompletarsetup.env→—limpiovariables limpias ypreparadoalineadasparaconcompletarAuthentikCaddyfile→—secciónbloqueespecíficaespecífico para NetBird,listapreparado paracopiar y pegarintegrar entuunpropioCaddyarchivoexistente
Solo hayes quenecesario sustituir los datosvalores ficticios por los reales del entorno.
AyudaVariables paraclave completarde setup.env (Authentik como proveedor OIDC)
Qué valores hay que rellenar y de dónde sacarlos
NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT
Qué es: URLEndpoint de configuración OIDC
generada
NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT
Define la URL de descubrimiento OIDC expuesta por Authentik.
Se
obtieneDónde está: Al guardar la aplicación en Authentik, aparecedesde el botón "OpenID configuration". al editar la aplicación en Authentik.
Ejemplo:
https://auth.<tudominio>/application/o/netbird/.well-known/openid-configuration
Client
ID y Audience
NETBIRD_AUTH_CLIENT_ID
QuéCorresponde es: Elal Client ID generado por Authentik.Authentik y actúa como identificador central del proveedor.
Este
Dónde está: En Providers > netbird-provider > OAuth2 Configuration
Estemismo valor también se usareutiliza en:
NETBIRD_AUTH_AUDIENCENETBIRD_AUTH_DEVICE_AUTH_CLIENT_IDNETBIRD_AUTH_DEVICE_AUTH_AUDIENCENETBIRD_IDP_MGMT_CLIENT_ID
En despliegues
self-hosted con Authentik, audience y client_id suelen coincidir.
Scopes soportados
NETBIRD_AUTH_SUPPORTED_SCOPES
QuéScopes poner:necesarios para funcionamiento completo, incluyendo login interactivo y device flow:
"openid profile email offline_access api"api
NETBIRD_IDP_MGMT_EXTRA_USERNAME
Qué es: Nombre del usuario
Usuario de servicio
NetBird manualmente).requiere credenciales técnicas para operaciones internas.
Dónde se crea:NETBIRD_IDP_MGMT_EXTRA_USERNAME Directory > Users > Create
Username:Usuario creado manualmente en Authentik
Netbird
NETBIRD_IDP_MGMT_EXTRA_PASSWORD
Qué es:Contraseña de aplicación del usuario deservicio.servicio- Se
Dóndegeneraseenobtiene:laUsersficha>delNetbird > Passwords
Ajuste
de PKCE
NETBIRD_AUTH_PKCE_DISABLE_PROMPT_LOGIN=true
Flag necesarianecesario para evitar problemas de autenticación relacionados con PKCE.
Debe hacer:
Resumen visualrápido rápidode variables
Variable |
|
|---|---|
NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT |
Botón |
NETBIRD_AUTH_CLIENT_ID |
→ OAuth2 Configuration |
NETBIRD_AUTH_AUDIENCE |
Igual que Client ID |
NETBIRD_AUTH_DEVICE_AUTH_CLIENT_ID |
Igual que Client ID |
NETBIRD_AUTH_DEVICE_AUTH_AUDIENCE |
Igual que Client ID |
NETBIRD_IDP_MGMT_CLIENT_ID |
Igual que Client ID |
NETBIRD_IDP_MGMT_EXTRA_USERNAME |
Usuario de servicio Netbird) |
NETBIRD_IDP_MGMT_EXTRA_PASSWORD |
Resumen breve
La segunda fase del despliegue de NetBird se centra en consolidar la configuración real del entorno: edición de plantillas, generación de artefactos, exposición correcta mediante Caddy y validación del flujo OIDC con Authentik. Mantener una separación clara entre plantillas y archivos finales permite regenerar el stack sin errores y facilita ajustes futuros sin romper el entorno.
Referencias
Esta guía está pensada como complemento práctico, no reemplaza a la documentación oficial. Se recomienda revisar los siguientes enlaces para entender en profundidad cada componente: