Skip to main content

NetBird: Implementación de una VPN de malla basada en WireGuard y confianza cero (Parte II)


Ubicación actual

Actualmente estamos ubicados en la carpeta:

netbird/infrastructure_files/

Desde aquí se encuentra el docker-compose.yml principal y demás archivos necesarios para continuar con el despliegue de NetBird.

🔑 Importante: tanto NetBird como Authentik deben estar accesibles con certificados TLS válidos (no autofirmados) y ser accesibles públicamente para que el flujo OIDC funcione correctamente.


Archivos a editar

Se editarán directamente ("en sucio") los siguientes archivos:

  • docker-compose.yml.tmpl
  • setup.env.example → una vez editado, se renombrará a setup.env

Cada vez que se realice un cambio en estos archivos, deberá ejecutarse el script configure.sh con:

./configure.sh

Esto generará los archivos finales dentro de la carpeta artifacts/, que también se encuentra en este mismo directorio. Desde ahí, se podrán levantar los contenedores cuando todo esté listo.

Una vez esté todo correctamente rellenado y configurado, volveremos a ejecutar ./configure.sh para generar el docker-compose.yml final y otros archivos necesarios dentro de la carpeta artifacts/. Será desde esa carpeta donde finalmente levantaremos el entorno completo de NetBird.

Después de eso, habrá que editar también el archivo Caddyfile. Se puede 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ñadida la sección correspondiente a NetBird en el Caddyfile, reiniciaremos Caddy para aplicar los cambios:

sudo systemctl restart caddy

Finalmente, con todo en su sitio (entorno, variables y proxy), levantaremos los contenedores de NetBird desde la carpeta artifacts:

cd artifacts/
docker compose up -d

Una vez realizado todo esto, solo tendremos que ir al dominio elegido para NetBird, autenticarnos con Authentik y... finalmente estaremos dentro.


Archivos de ejemplo listos para usar

Para facilitar la configuración, se han preparado versiones de ejemplo ya limpias y ajustadas a la configuración explicada en la primera parte. Algunas secciones se han eliminado porque no son necesarias para este escenario concreto.

Están disponibles en el siguiente repositorio:

Ejemplos NetBird en Gitea

Contiene:

  • docker-compose.yml.tmpl → listo para rellenar
  • setup.env → limpio y preparado para completar
  • Caddyfile → sección específica para NetBird, lista para copiar y pegar en tu propio archivo de Caddy. Solo hay que sustituir los datos ficticios por los reales

Ayuda para completar setup.env (Authentik como proveedor OIDC)

Qué valores hay que rellenar y de dónde sacarlos

NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT
  • Qué es: URL de configuración OIDC generada por Authentik.

  • Dónde está: Al guardar la aplicación en Authentik, aparece el botón "OpenID configuration".

  • Ejemplo:

    https://auth.<tudominio>/application/o/netbird/.well-known/openid-configuration
    
NETBIRD_AUTH_CLIENT_ID
  • Qué es: El Client ID generado por Authentik.

  • Dónde está: En Providers > netbird-provider > OAuth2 Configuration

  • Este valor también se usa en:

    • NETBIRD_AUTH_AUDIENCE
    • NETBIRD_AUTH_DEVICE_AUTH_CLIENT_ID
    • NETBIRD_AUTH_DEVICE_AUTH_AUDIENCE
    • NETBIRD_IDP_MGMT_CLIENT_ID
NETBIRD_AUTH_SUPPORTED_SCOPES
  • Qué poner:

    "openid profile email offline_access api"
    
NETBIRD_IDP_MGMT_EXTRA_USERNAME
  • Qué es: Nombre del usuario de servicio (creado manualmente).

  • Dónde se crea: Directory > Users > Create

    • Username: Netbird
    • Crear una contraseña de aplicación
NETBIRD_IDP_MGMT_EXTRA_PASSWORD
  • Qué es: Contraseña de aplicación del usuario de servicio.

  • Dónde se obtiene: Users > Netbird > Passwords

    • Crear nueva contraseña de aplicación
    • Copiar el string generado (no se podrá volver a ver)
NETBIRD_AUTH_PKCE_DISABLE_PROMPT_LOGIN=true
  • Qué es: Flag necesaria para evitar problemas con PKCE.
  • Qué hacer: Dejarla tal cual.

Resumen visual rápido

Variable en .env Dónde encontrarla en Authentik
NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT Botón "OpenID configuration" en la aplicación
NETBIRD_AUTH_CLIENT_ID En el Provider (OAuth2 Configuration)
NETBIRD_AUTH_AUDIENCE Igual que el Client ID
NETBIRD_AUTH_DEVICE_AUTH_CLIENT_ID Igual que el Client ID
NETBIRD_AUTH_DEVICE_AUTH_AUDIENCE Igual que el Client ID
NETBIRD_IDP_MGMT_CLIENT_ID Igual que el Client ID
NETBIRD_IDP_MGMT_EXTRA_USERNAME Usuario de servicio creado por ti (Netbird)
NETBIRD_IDP_MGMT_EXTRA_PASSWORD Contraseña de aplicación del usuario de servicio

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: