Choisir un VPN #1
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ma box, dans mon LAN, doit communiquer avec d'autres boxes, dans d'autres LAN :
Il faut choisir une solution de VPN mesh entre les serveurs.
--- Comparatif de solutions VPN mesh : Mycelium vs NetBird vs Nebula ---
Illustration : Mycelium se présente comme un réseau maillé chiffré de bout-en-bout, s’adaptant dynamiquement pour trouver le meilleur chemin entre les nœuds (image promotionnelle Mycelium).
Contexte et critères de choix
Pour interconnecter plusieurs boxes réparties dans des LAN distincts (par exemple, des serveurs auto-hébergés sur différents sites), nous avons recherché une solution de VPN maillé (mesh) répondant aux besoins suivants :
Communication directe entre les LAN pour réplication de données et répartition de charge entre boxes.
Accès entrant sécurisé sur certaines boxes disposant d’une IP publique (serveur d’accès).
Utilisation en environnement mixte personnel/pro et échelle variable (d’une dizaine à plusieurs centaines de nœuds).
Critères techniques : solution 100 % logiciel libre, multi-plateforme (Windows, Linux, macOS, etc.), avec clients éventuellement sur mobile, un chiffrement solide (WireGuard, AES, etc.), des fonctions de NAT traversal (hole punching), une architecture simple (de préférence P2P sans lourde infrastructure serveurs), la possibilité de déploiement en conteneur (Docker/K8s), etc.
Après avoir étudié plusieurs options, trois solutions ont retenu notre attention initiale : Nebula, NetBird et Mycelium. Toutes trois sont des VPN maillés libres et modernes, répondant en grande partie aux critères ci-dessus. Nous présentons ci-dessous un comparatif synthétique de ces solutions, suivi des raisons du choix final de Mycelium pour notre projet.
1 Nebula : VPN maillé open source par Slack
Nebula est un outil de mise en réseau overlay (VPN mesh) open source créé à l’origine par Slack. Il permet de connecter de façon sécurisée des hôtes distribués partout dans le monde, avec un accent mis sur la performance, la simplicité et la sécurité.
Licence et langage : Licence MIT (logiciel libre), écrit en Go (langage moderne efficient).
Technologie sous-jacente : Nebula utilise le Noise Protocol pour établir des tunnels chiffrés en UDP. Chaque nœud obtient une adresse IP virtuelle (typiquement en 192.168.x.x) certifiée par une autorité (CA) interne. Le trafic est chiffré en AES-256-GCM avec échange de clés ECDH Curve25519, garantissant un haut niveau de sécurité.
Fonctionnement P2P : Réseau entièrement maillé et décentralisé. Nebula n’a pas de serveur central : on définit un ou plusieurs nœuds spéciaux dits « lighthouses » servant de points de rendez-vous pour que les pairs se découvrent. Une fois découverts, les nœuds établissent des tunnels directement de pair-à-pair, sans passer par un hub. Cela assure des communications optimales (faible latence). En cas de nœuds derrière des NAT, Nebula utilise le hole punching UDP via les lighthouses pour établir le tunnel P2P. (En dernier recours, un mécanisme de relais existe si deux peers ne peuvent pas communiquer directement.)
Clients et interface : Nebula est multiplateforme : disponible sur Linux, Windows, macOS et même Android/iOS (applications mobiles). C’est un démon en ligne de commande (fichiers de config YAML), sans interface graphique native (il existe des outils tiers de supervision mais pas d’UI officielle).
Architecture et déploiement : Un binaire unique nebula suffit pour chaque nœud (mode client ou lighthouse selon config). Le déploiement est léger : par exemple, Slack l’utilise pour connecter plus de 50 000 hôtes en production dans son infrastructure mondiale. Des packages existent pour la plupart des OS (y compris une image Docker), ce qui facilite l’intégration (on peut ainsi déployer un lighthouse dans un container si besoin).
Fonctionnalités notables : Nebula intègre une gestion fine des groupes d’appartenance et règles de pare-feu entre nœuds, semblable aux Security Groups dans le cloud. Il supporte également le chiffrage des noms DNS internes et un sous-système optionnel de SSH intégré pour administrer les nœuds.
Communauté et support : Nebula étant un projet communautaire piloté à l’origine par Slack, il bénéficie d’une documentation complète et d’une communauté active (forum Slack Nebula OSS, contributions sur GitHub). En revanche, il n’y a pas de support commercial dédié (pas d’entreprise proposant Nebula en service managé, hormis la société Defined Networking fondée par les auteurs). Cela reste avant tout une solution à autogérer.
Écosystème et pérennité : Avec ~15,9k étoiles GitHub et 1,1k forks, Nebula jouit d’une adoption significative par les administrateurs système et la communauté self-hosting. ~73 contributeurs au projet sont recensés, principalement des ingénieurs Slack et des développeurs open source. Le projet est mature : ~600 commits à ce jour et des publications régulières (dernière version v1.9.6 en juillet 2025). On peut donc compter sur sa stabilité et son efficacité éprouvée au fil des ans.
En résumé, Nebula coche quasiment toutes les cases (libre, multi-OS, performant, NAT traversal, pas d’architecture lourde). C’est une solution robuste et éprouvée pour créer un VPN maillé auto-hébergé. Ses principaux inconvénients résident dans l’absence d’interface utilisateur intégrée et la gestion manuelle des certificats et lighthouses (ce qui ajoute un peu de complexité initiale). Mis à part cela, Nebula demeure un excellent choix technique pour qui cherche un VPN de type mesh simple et fiable.
2 NetBird : Overlay VPN Zero-Trust basé sur WireGuard
NetBird est une solution de réseau privé virtuel maillé construite sur WireGuard®. Lancé plus récemment (projet open source soutenu par une start-up), NetBird vise à combiner la simplicité d’un VPN mesh avec les fonctionnalités avancées du Zero-Trust Network Access (authentification SSO, contrôles d’accès granulaires).
Licence et langage : NetBird est publié sous licence BSD-3-Clause (libre). Le cœur du projet est développé en Go, et il existe aussi des composants frontaux (web UI) en TypeScript/React.
Technologie sous-jacente : NetBird s’appuie entièrement sur le protocole WireGuard pour le transport VPN. Chaque machine cliente fait tourner un agent NetBird qui configure un tunnel WireGuard chiffré (WireGuard utilise des algorithmes modernes : échange de clés Curve25519, chiffrement ChaCha20-Poly1305, hash BLAKE2, etc. en standard). Aucun port n’a besoin d’être ouvert manuellement : les pairs se connectent de façon transparente via WireGuard une fois autorisés.
Fonctionnement et architecture : NetBird combine réseau P2P et contrôle centralisé. Le réseau de données est maillé (chaque nœud établit des tunnels WireGuard vers les autres selon les besoins), et la découverte/NAT traversal utilise WebRTC ICE (STUN/TURN) pour trouver le meilleur chemin entre pairs. Cependant, l’orchestration passe par un serveur central d’authentification et de gestion : soit le service cloud géré par NetBird, soit une instance auto-hébergée. Ce serveur gère les identités des appareils (par SSO/OAuth2, ex. via Zitadel, Keycloak…), les autorisations et distribue les configurations WireGuard aux clients. L’architecture est donc de type client-serveur pour la partie contrôle (similaire à Tailscale+Headscale). En contrepartie, le réseau de tunnel lui-même reste direct P2P une fois les pairs connectés.
NAT traversal : Grâce à l’utilisation de WebRTC, NetBird gère très bien les environnements NAT. Il utilise des STUN/TURN publics pour que deux clients derrière des NAT puissent se connecter en pair-à-pair (le mécanisme ICE essaye d’abord en UDP direct, puis via relais TURN si nécessaire). Cela évite d’avoir à déployer manuellement des relais, tout en assurant que tous les nœuds peuvent se joindre, y compris depuis des réseaux difficiles.
Clients et interface : NetBird fournit des clients pour Windows, Linux, macOS, et propose également des applications mobile (Android/iOS) pour intégrer smartphones et tablettes au VPN. Un point fort de NetBird est sa facilité d’utilisation : il offre une interface web d’administration pour gérer son réseau (règles d’accès, suivi des pairs connectés, etc.), ainsi que de petites interfaces locales (ex. une icône de zone de notification pour se connecter). Cette convivialité le rapproche des solutions commerciales tout en restant open source.
Fonctionnalités avancées : NetBird intègre nativement la gestion des comptes utilisateurs et droits d’accès. Via son portail, on peut inviter des membres, appliquer une authentification à deux facteurs (MFA), définir quelles machines peuvent accéder à quels services, etc. Il supporte également la notion de « External DNS » pour que les machines du VPN se résolvent sous un domaine commun. L’objectif est de fournir un environnement Zero Trust complet par-dessus le réseau WireGuard.
Déploiement : En mode self-hosted, l’installation du contrôleur NetBird est automatisée (script Docker Compose fourni pour déployer le backend et l’interface web avec une instance d’OAuth2). En quelques minutes on peut avoir son propre serveur NetBird. Alternativement, on peut utiliser le NetBird Cloud hébergé (il suffit alors d’installer les clients et de les lier via un code d’invitation). Les clients consommant très peu de ressources, la solution peut tourner sur des containers Docker, des NAS, voire des routeurs supportant WireGuard.
Communauté et support : NetBird étant soutenu par une jeune entreprise, on trouve un forum communautaire et un Slack officiels, ainsi qu’une documentation en ligne complète. Le projet a bénéficié d’un financement (programme StartUpSecure en Allemagne) pour accélérer son développement. L’équipe offre une assistance professionnelle via son service cloud et est réactive aux contributions open source (plus de 100 contributeurs déjà). On peut donc s’attendre à un suivi actif et à de nouvelles fonctionnalités régulières.
Écosystème et pérennité : Bien que relativement récent, NetBird est très dynamique sur GitHub : ~17,5k étoiles et 812 forks témoignent de l’intérêt qu’il suscite. Le dépôt compte plus de 2 200 commits et des releases fréquentes (version actuelle 0.52.2 en juillet 2025). Cette cadence rapide (plus de 240 versions publiées à ce jour) indique une évolution continue du produit. Le fait qu’il repose sur WireGuard, une techno éprouvée, est un gage de fiabilité. L’entreprise derrière NetBird cherche un modèle économique probablement via des offres hébergées premium, mais le cœur du produit demeure libre et open source.
En résumé, NetBird offre une approche très intégrée du VPN mesh : on apprécie sa facilité d’utilisation (UI, configuration zéro) et les fonctionnalités business (SSO/MFA, contrôle d’accès) ajoutées à WireGuard. Ces atouts en font une solution attrayante pour des équipes et entreprises voulant un VPN maillé clé en main. En contrepartie, il est un peu plus complexe architecturalement (il faut maintenir un service central d’authentification si on l’auto-héberge, ce qui introduit un point critique supplémentaire). Pour un usage purement technique entre serveurs, certaines de ses features (SSO, interface web) peuvent être excessives. Mais globalement NetBird se pose en alternative libre à Tailscale, combinant la robustesse de WireGuard avec une surcouche de gestion très conviviale.
3 --- --- Mycelium : Réseau IPv6 décentralisé piloté par ThreeFold --- ---
Mycelium est la solution que nous avons finalement choisie. Il s’agit d’un VPN maillé nouvelle génération, développé en Rust par la communauté ThreeFold. Mycelium propose un réseau overlay IPv6 chiffré de bout-en-bout, inspiré par le fonctionnement du mycélium en nature (d’où son nom) : entièrement décentralisé, résilient, toujours à la recherche du chemin le plus efficace entre les nœuds.
Licence et langage : Licence Apache 2.0 (logiciel libre). Développement en Rust, ce qui assure de hautes performances et sécurité mémoire. C’est un point positif pour la fiabilité du daemon, notamment sur des machines modestes.
Technologie sous-jacente : Mycelium crée un réseau overlay en IPv6 global : chaque nœud se voit attribuer une adresse dans le préfixe 400::/7. Ce choix évite les conflits d’adresse et prépare l’avenir (plus de souci de plage IPv4 privée à gérer). Le protocole utilise un pairage de clés Curve25519 (x25519) pour générer l’identité des nœuds et chiffrer le trafic. Le trafic est ainsi chiffré de bout-en-bout entre pairs dès la couche réseau. Mycelium se distingue en supportant plusieurs transports simultanément : il peut communiquer nativement sur UDP (via QUIC) ou TCP, voire basculer de l’un à l’autre. Par défaut, il écoute sur le port 9651 en UDP/QUIC.
Routage dynamique et performance : L’un des atouts majeurs de Mycelium est son routage intelligent. Chaque nœud participe à un algorithme de routage distribué basé sur le protocole Babel (protocole de routage à état de lien, adapté aux réseaux maillés). Concrètement, le réseau s’auto-organise pour trouver le chemin le plus court (en termes de latence) entre deux points. Si un lien tombe, le trafic est automatiquement rerouté via d’autres nœuds. Cette capacité de mesh routing multi-sauts (absence de point unique de transit) améliore la résilience et la rapidité du réseau. Cela correspond bien à notre besoin de répartir le trafic entre boxes sur différents sites de manière optimale.
Fonctionnement full P2P : Mycelium est entièrement décentralisé, sans composant serveur à déployer. Pour connecter des nœuds, on peut soit les découvrir via des nœuds publics (des peers de rendez-vous fournis par ThreeFold), soit échanger directement leurs adresses (clé publique/IPv6). Il n’y a pas de notion de serveur central ni même de lighthouse fixe : tous les nœuds sont égaux et peuvent relayer du trafic pour d’autres si nécessaire (comme les nœuds d’un réseau mesh MANET).
NAT traversal : C’est un point important pour notre usage (connecter des LANs derrière des NAT). Mycelium est en cours d’implémentation du hole punching en UDP/QUIC afin que deux nœuds derrière des NAT distincts puissent se connecter directement. À l’heure actuelle (v0.6), si deux pairs ne peuvent pas établir de connexion directe, ils peuvent passer par un nœud relais déjà accessible (fonctionnalité “addHostedPublicNodes” activée par défaut). En pratique, cela signifie que sans configuration additionnelle, un nœud Mycelium tentera d’utiliser des super-noeuds publics pour faire transiter le trafic si nécessaire, en attendant que le poinçonnage NAT P2P soit pleinement opérationnel. Ce compromis assure que tous les nœuds peuvent joindre le réseau même en environnement NAT, tout en visant à éliminer ces intermédiaires à terme.
Clients et interface : Mycelium propose des clients pour Linux, macOS, Windows (binaire CLI) ainsi que des applications mobiles (Android, iOS). L’installation est simple (exécutable unique, ou via un installeur Windows MSI). Une fois lancé, un client Mycelium tourne en arrière-plan et assigne une interface réseau virtuelle (TUN) avec l’IPv6 overlay. Côté interface utilisateur, Mycelium reste encore basique : pas de GUI desktop complète, mais une application mobile est disponible pour gérer son nœud, et l’intégration au tableau de bord ThreeFold permet de visualiser les pairs. Pour un usage serveur, la configuration via fichier TOML/CLI est semblable à Nebula.
Fonctionnalités annexes : En plus de la fonction VPN, Mycelium intègre un bus de messages fiable entre nœuds et une API pour échanger des données de manière structurée sur le réseau overlay. Cela ouvre la voie à des usages IoT, messagerie chiffrée, etc., par-dessus le VPN. ThreeFold envisage aussi d’autres extensions (stockage distribué, CDN décentralisé, etc.) utilisant Mycelium comme colonne vertébrale. Pour notre cas (réplication de données entre boxes), ces fonctions ne sont pas directement exploitées, mais témoignent de la souplesse de la plateforme.
Déploiement : Mycelium est fourni sous forme de binaire unique (Rust) très facile à déployer. On peut l’exécuter directement sur la machine (ou l’emballer dans un conteneur Docker manuellement). ThreeFold propose une intégration avec son Grid (déploiement via leur Dashboard et Kubernetes, avec Mycelium préinstallé sur certaines applis). Le fait qu’aucun composant serveur central ne soit requis simplifie l’infrastructure : il suffit de lancer le daemon sur chaque box et de les connecter entre elles.
Communauté et support : Mycelium est développé par l’initiative ThreeFold (communauté promouvant un internet décentralisé). On trouve une documentation et une FAQ actives