Aller au contenu

Configuration de Netbird

dashboard Netbird

Contexte

Pour rappel, l'idée de départ est d'utiliser Netbird pour proposer Paperless-NGX en SaaS à différentes entités. Chaque entité aura donc une infra dédiée.

Chaque infrastructure bénéficiera de son propre domaine. Exemple : l'entité 01 aura comme NDD "int01.quercylibre.fr". Il ne sera pas pour autant résolvable sur le net pour éviter les accès en direct et les énumérations DNS. Cela permet surtout de pouvoir générer des certificats HTTPS par le biais du DNS Challenge du protocole ACME.

Chaque infra aura la stack suivante sur Proxmox VE :

  • VM Docker :
    • Traefik
    • Paperless-NGX
  • VM routing peer : ce peer nous permettra d'accéder aux ressources locales. J'aurai pu également l'installer directement sur la VM Docker.

La passerelle OPNSense en tête des infras (Netbird et les services SaaS) fera office de serveur DNS local. C'est lui qui sera poussé aux clients pour leur permettre de résoudre les NDD non déclarés chez le registrar.

La configuration suivante concerne l'entité01 qui aura accès à l'infra int01.quercylibre.fr.

Installation des clients

Client Windows

Créez un utilisateur sur Keycloak (dans le realm Netbird).

Sur le poste Windows, rendez-vous sur l'URL du dashboard de Netbird et authentifiez-vous avec les creds de l'utilisateur créé précédemment. Vous devriez alors arriver sur cette interface vous proposant l'installation du client Netbird.

Dashboard Netbird

Téléchargez le logiciel et installez-le. Une fois installée, un icône apparrait dans la barre des tâches. Faites un clic droit sur l'icône en question et cliquez sur "Connect". Si tout se passe bien, une coche verte apparait sur celui-ci.

On peut vérifier également le statut du client en mode CLI. Ouvrez une console PowerShell :

Commande CLI status de Netbird client
PS C:\ netbird status --detail
Peers detail:
 srv-inter01-peer.netbird.selfhosted:
  NetBird IP: 100.85.31.120
  Public key: PUBLIC_KEY
  Status: Connected
  -- detail --
  Connection type: Relayed
  ICE candidate (Local/Remote): -/-
  ICE candidate endpoints (Local/Remote): -/-
  Relay server address: rels://netbird.dev.quercylibre.fr:443/relay
  Last connection update: 3 minutes ago
  Last WireGuard handshake: 1 minute, 7 seconds ago
  Transfer status (received/sent) 1.0 KiB/1.4 KiB
  Quantum resistance: false
  Networks: 192.168.100.9/32, ged.int01.quercylibre.fr
  Latency: 0s
Events:
OS: windows/amd64
Daemon version: 0.38.2
CLI version: 0.38.2
Management: Connected to https://netbird.dev.quercylibre.fr:443
Signal: Connected to https://netbird.dev.quercylibre.fr:443
Relays:
  [stun:netbird.dev.quercylibre.fr:3478] is Available
  [turn:netbird.dev.quercylibre.fr:3478?transport=udp] is Available
  [rels://netbird.dev.quercylibre.fr:443/relay] is Available
Nameservers:
  [192.168.100.9:53] for [int01.quercylibre.fr] is Available
FQDN: labwin11-01.netbird.selfhosted
NetBird IP: 100.85.194.253/16
Interface type: Userspace
Quantum resistance: false
Networks: -
Forwarding rules: 0
Peers count: 1/1 Connected

Dans cet extrait, nous pouvons constater la présence du serveur DNS "192.168.100.9" qui est la patte IP locale de OPNSense pour cette infra. Nous verrons plus tard comment configurer cela depuis le dashboard de Netbird.

En tant qu'admin sur le Dashboard de Netbird, ajoutez le client au groupe : "int01-clients". Pour cela, cliquez sur le peer en question et ajoutez le groupe à la volée dans la case "Assigned groups".

Client routing-peer

Le routing-peer est un client offrant une ou plusieurs routes pour accéder par exemple à des ressources internes. Dans mon cas, c'est une VM Debian tournant sur l'infra int01. Il va permettre aux clients distants d'accéder aux ressources internes telles que le serveur DNS et l'application.

Rendez-vous sur le dashboard de Netbird en tant qu'admin et cliquez sur "Setup keys". Cliquez sur le bouton "Create Setup Key" et renseignez le nom de la clé.

Netbird Setup Key

Terminez en cliquant sur "Create Setup Key". Netbird vous affiche la clé et vous propose son installation. Cliquez sur "Intall Netbird" et utilisez les commandes affichées pour installer Netbird sur le routing peer.

Netbird Setup Key

Configuration des accès

Maintenant que nos clients sont installés, il nous faut paramétrer Netbird pour pusher le serveur DNS local et définir les accès à nos ressources.

Configuration du DNS

Depuis le dashboard Netbird, rendez-vous sur DNS > Nameservers puis cliquez sur "Add Nameserver"

Ajout serveur DNS local

Sélectionnez "Custom DNS" puis :

  • Namerservers :
    • Spécifiez l'IP locale du DNS et le port
    • Précisez le groupe de peers qui recevra ce serveur DNS (int01-clients dans mon cas, contenant le PC Windows)
  • Domains :
    • Le domaine sur lequel ce serveur fait authorité.
  • Name & Description :
    • Finissez en renseignant le nom et une description

Configuration des accès

Jusqu'à la version 0.35, il fallait passer par Network routes. Ce dernier est depuis déprécié et remplacé par Networks.

Nous allons ici créer un "réseau" autorisant notre client à requêter le serveur DNS et à se connecter à Paperless-NGX.

Cliquez sur Add Network :

  • Renseignez le nom. Par exemple : entité01
  • Ajoutez une ressource en cliquant sur "Add Ressource" proposé dans la foulée :
    • Name : Local DNS
    • Description
    • Address : renseignez l'IP locale du serveur DNS
    • Assigned groups : saisissez "DNS" et ajoutez le à la voléee
    • Laissez coché la case "Enable Ressource"
    • Cliquez sur "Add Ressource"
  • Ajoutez une stratégie en cliquant sur Create Policy proposé dans la foulée :
  • Protocol : Sélectionner UDP
    • Source : sélectionnez le groupe du client (int01-clients)
    • Destination : par défaut le groupe DNS créé juste avant
    • Ports : 53
    • Enable Policy : laissez coché puis cliquez sur "Continue"
    • Posture check : laissez tel quel et cliquez sur "Continue"
    • Name & Description : Renseignez le nom de la stratégie et la description
    • Terminez en cliquant sur "Add policy"
  • Renseignez le routing peer comme proposé dans la foulée :
    • Sélectionnez le serveur GNU/Linux où nous avons installé précédemment le client Netbird.
    • Laissez le options suivantes cochées puis terminez en cliquant sur "Add Routing Peer"

Au final, un "réseau" est composé :

  • d'une ou plusieurs ressources auxquelles sont attribuées des stratégies (policy)
  • d'un routing peer pouvant contenir un ou plusieurs peers.
Network entité 01

Nous allons maintenant une nouvelle ressource dans le network "Entité 01" permettant d'accéder à l'application web Paperless-NGX.

Ressource accès web

Dans ce cas, la ressource fera parti du groupe "web" ajouté dans la foulée et l'adresse sera l'IP locale du reverse-proxy de l'infra.

Une fois la ressource crée, ajoutez une stratégie en cliquant sur "Add policy" :

Ressource accès web stratégie

Et voilà ! Il nous reste plus qu'à tester cela depuis notre client Windows. Sur ce dernier, déconnectez-vous et reconnectez-vous sur Netbird.

Filtrage sur les domaines

Il est possible de filtrer sur les domaines ou les ndd mais en fait cela se résume à une résolution IP. Si l'accès à vos applications locales passent par un reverse-proxy, alors tous les NDD sont accessibles même si vous filtrez sur un NDD en particulier.

Afin de vérifier si les ressources ont bien été poussée, ouvrez une console PowerShell et exécutez la commande : netbird networks ls et vérifiez également le status du client :

Liste des ressources poussées
PS C:\ netbird networks ls
Available Networks:

  - ID: Accès web
    Network: 192.168.100.10/32
    Status: Selected

  - ID: Local DNS
    Network: 192.168.100.9/32
    Status: Selected

PS C:\ netbird status --detail
Peers detail:
 srv-inter01-peer.netbird.selfhosted:
  NetBird IP: 100.85.31.120
(...)
OS: windows/amd64
Daemon version: 0.38.2
CLI version: 0.38.2
Management: Connected to https://netbird.dev.quercylibre.fr:443
Signal: Connected to https://netbird.dev.quercylibre.fr:443
Relays:
  [stun:netbird.dev.quercylibre.fr:3478] is Available
  [turn:netbird.dev.quercylibre.fr:3478?transport=udp] is Available
  [rels://netbird.dev.quercylibre.fr:443/relay] is Available
Nameservers:
  [192.168.100.9:53] for [int01.quercylibre.fr] is Available
FQDN: labwin11-01.netbird.selfhosted
NetBird IP: 100.85.194.253/16
Interface type: Userspace
Quantum resistance: false
Networks: -
Forwarding rules: 0
Peers count: 1/1 Connected

Ouvrez votre navigateur web et rendez-vous sur votre application web locale. Et ça marche ! Enfin presque... Je ne sais pas si c'est lié à ma méconnaissance de Keycloak mais je dois authentifier l'utilisateur en passant par Keycloak, alors que celui-ci l'a déjà été lors de la connexion au dashboard de Netbird. Cependant si je m'authentifie sur Paperless-NGX en premier, je le suis automatiquement sur Netbird.

Conclusion

Comme indiqué en introduction, Netbird est plus adapté pour mettre en place un bastion que du VPN classique. Je pense que c'est une très bonne solution pour exposer des applications sensibles sans pour autant les rendre visible sur Internet et trop compliqué pour y accéder pour les utilisateurs finaux.

Le projet est relativement jeune, très actif et donc évolue régulièrement ce qui peut légèrement refroidir pour de la mise en production.

On pourrait lui préférer l'application Teleport qui n'implique aucune installation de logiciel côté client mais il faudra alors passer par la version payante pour bénéficier du SSO.