ZeroTier relie des machines dispersées dans un réseau virtuel où elles se comportent comme si elles étaient sur le même switch Ethernet, même derrière des NAT. Ce guide montre comment l'installer depuis un dépôt signé, rejoindre un réseau, puis auto-héberger son controller pour ne pas dépendre du service de ZeroTier, et valider la connectivité. Il s'adresse aux administrateurs débutants à intermédiaires. Il dit aussi, sans détour, quand ZeroTier est le bon choix et quand Tailscale ou WireGuard font mieux. Les commandes et sorties proviennent d'un lab réel à trois nœuds.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre ce qui distingue ZeroTier (couche 2) de Tailscale et WireGuard (couche 3).
- Installer ZeroTier par dépôt signé, sans script exécuté à l'aveugle.
- Rejoindre un réseau et lire l'état avec
zerotier-cli. - Auto-héberger le controller via son API REST locale.
- Diagnostiquer un nœud bloqué ou une connexion coincée en relais.
Prérequis
Section intitulée « Prérequis »- un ou plusieurs hôtes Linux (le guide vaut aussi pour Windows, macOS, mobile, seul le client change) ;
- un accès
sudo; - la sortie UDP 9993 autorisée sur le pare-feu (le port de transport de ZeroTier) ;
- pour l'auto-hébergement du controller : une machine toujours allumée avec une IP stable.
Qu'est-ce que ZeroTier ?
Section intitulée « Qu'est-ce que ZeroTier ? »ZeroTier se présente comme un switch Ethernet programmable planétaire. Là où un VPN classique route de l'IP entre deux points, ZeroTier émule un réseau Ethernet virtuel : vos machines partagent un segment de niveau 2, avec broadcast, multicast et découverte de services, comme sur un vrai LAN.
Son architecture tient en deux couches. VL1 est le réseau pair-à-pair chiffré qui sert de transport : chaque nœud reçoit une adresse ZeroTier de 10 caractères hexadécimaux, dérivée de sa clé publique. VL2 est la couche d'Ethernet virtuel avec ses règles d'accès. Le chiffrement est de bout en bout (Curve25519/Ed25519 pour les clés, Salsa20/Poly1305 pour les données) : les clés privées ne quittent jamais la machine.
Deux rôles à ne pas confondre. Le controller est l'autorité qui configure un réseau (membres autorisés, plan d'adressage, routes) ; il ne voit pas passer le trafic. Les roots (le planet), eux, aident les nœuds à se découvrir et servent de relais de secours. Par défaut, ces roots sont opérés par ZeroTier, Inc., un point sur lequel nous reviendrons.
ZeroTier, Tailscale ou WireGuard ?
Section intitulée « ZeroTier, Tailscale ou WireGuard ? »C'est la vraie question, et la réponse est nuancée. Les trois créent un réseau privé chiffré, mais ne jouent pas dans la même catégorie.
| Critère | ZeroTier | Tailscale | WireGuard nu |
|---|---|---|---|
| Couche réseau | L2 (Ethernet) | L3 (IP) | L3 (IP) |
| Broadcast / multicast | Oui | Non | Non |
| Débit | Plus faible (userspace) | Élevé (noyau) | Le plus élevé |
| Protocole | Propriétaire | WireGuard | WireGuard (standard) |
| Licence | MPL 2.0 | Client BSD | GPLv2 |
| Self-host | Controller oui, roots difficiles | Headscale | Total |
Le point décisif est L2 contre L3. ZeroTier gagne franchement quand vous avez besoin de la couche 2 : jeux en réseau local, découverte par broadcast (Bonjour, mDNS), bridging vers un LAN physique, protocoles industriels, ou une flotte hétérogène d'appareils exotiques où WireGuard n'est pas disponible.
Partout ailleurs, soyez lucide. ZeroTier chiffre en espace utilisateur, ce qui plafonne son débit : des mesures indépendantes donnent WireGuard près de deux fois plus rapide. Pour un accès distant IP classique, WireGuard ou Tailscale sont plus rapides et plus simples à rendre pleinement souverains.
Installer ZeroTier
Section intitulée « Installer ZeroTier »ZeroTier propose un dépôt APT/DNF signé GPG. On l'utilise plutôt que le script curl ... | bash de la page d'accueil : télécharger la clé de signature dans un trousseau puis installer un paquet vérifié est une pratique saine, alors qu'exécuter un script distant à l'aveugle ne l'est pas.
curl -fsSL 'https://download.zerotier.com/contact%40zerotier.com.gpg' \ | sudo gpg --dearmor -o /usr/share/keyrings/zerotier.gpgecho "deb [signed-by=/usr/share/keyrings/zerotier.gpg] https://download.zerotier.com/debian/bookworm bookworm main" \ | sudo tee /etc/apt/sources.list.d/zerotier.listsudo apt updatesudo apt install zerotier-oneRemplacez bookworm par le nom de code de votre distribution (jammy, noble, etc.).
sudo rpm --import https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact@zerotier.com.gpgsudo tee /etc/yum.repos.d/zerotier.repo >/dev/null <<'EOF'[zerotier]name=ZeroTier, Inc. RPM Release Repositorybaseurl=https://download.zerotier.com/redhat/el/$releaseverenabled=1gpgcheck=1EOFsudo dnf install zerotier-oneVérifiez l'installation et notez l'adresse de ce nœud, une empreinte de 10 caractères :
sudo zerotier-cli info# 200 info 3c729e5e16 1.16.2 ONLINELe statut ONLINE confirme que le nœud a joint le réseau ZeroTier. OFFLINE signale en général un port UDP 9993 bloqué en sortie.
Rejoindre un réseau
Section intitulée « Rejoindre un réseau »Pour se connecter, un nœud rejoint un réseau par son Network ID (16 caractères), fourni par un controller (le vôtre, voir plus bas, ou ZeroTier Central).
sudo zerotier-cli join 3a54a442ef8aa568# 200 join OKLe nœud apparaît alors comme en attente d'autorisation côté controller. Un réseau privé n'admet une machine qu'après validation explicite : c'est une sécurité, pas un bug. Une fois autorisé, il reçoit une IP :
sudo zerotier-cli listnetworks# 200 listnetworks 3a54a442ef8aa568 lab-zt 6a:99:f8:71:1c:b2 OK PRIVATE ztpc5s5z4h 10.147.20.98/24Le statut OK et l'IP attribuée (10.147.20.98/24) signent un rattachement réussi. Pour quitter un réseau : sudo zerotier-cli leave 3a54a442ef8aa568.
Auto-héberger le controller
Section intitulée « Auto-héberger le controller »Point clé pour la souveraineté : le daemon zerotier-one contient déjà un controller. Vous n'avez rien à installer de plus. Une machine devient controller de tout réseau dont l'ID commence par sa propre adresse. L'administration se fait via une API REST locale sur le port 9993, authentifiée par un jeton.
-
Récupérer le jeton et l'adresse du controller :
Fenêtre de terminal TOKEN=$(sudo cat /var/lib/zerotier-one/authtoken.secret)CTRL=$(sudo zerotier-cli info | awk '{print $3}') -
Créer un réseau. Les six underscores demandent au controller de choisir le numéro. On définit le plan d'adressage et la route du segment :
Fenêtre de terminal curl -s -X POST --header "X-ZT1-AUTH: $TOKEN" \-d '{"name":"reseau-interne","private":true,"v4AssignMode":{"zt":true},"ipAssignmentPools":[{"ipRangeStart":"10.147.20.10","ipRangeEnd":"10.147.20.100"}],"routes":[{"target":"10.147.20.0/24"}]}' \"http://localhost:9993/controller/network/${CTRL}______"La réponse contient le Network ID (champ
id) à distribuer aux clients. -
Autoriser un membre une fois qu'il a fait
join, en passant son adresse de nœud :Fenêtre de terminal curl -s -X POST --header "X-ZT1-AUTH: $TOKEN" \-d '{"authorized":true}' \"http://localhost:9993/controller/network/<NWID>/member/<ADRESSE_NOEUD>"
Piloter le controller en curl convient pour automatiser, mais devient vite fastidieux à la main. Une interface web tierce comme ztncui (open source, GPLv3) se branche sur ce même controller local et offre une gestion visuelle des réseaux et des membres, sans jamais dépendre d'un service externe.
Valider la connectivité
Section intitulée « Valider la connectivité »Un ping sur l'IP ZeroTier d'un autre nœud confirme l'overlay. Le premier paquet est lent (le temps que les nœuds se découvrent), puis la latence s'effondre une fois la liaison directe établie :
ping -c 3 10.147.20.74# 64 bytes from 10.147.20.74: icmp_seq=1 ttl=64 time=128 ms# 64 bytes from 10.147.20.74: icmp_seq=2 ttl=64 time=0.464 msLa commande zerotier-cli peers révèle comment vos nœuds se parlent, et c'est instructif :
sudo zerotier-cli peers# <ztaddr> <ver> <role> <lat> <link># 3a54a442ef 1.16.2 LEAF 0 DIRECT 172.30.0.3/46856# bc982e420a 1.16.2 LEAF 4 DIRECT 172.30.0.4/9993# cafe04eba9 - PLANET 31 DIRECT 84.17.53.155/9993Vos machines (LEAF) communiquent en DIRECT, en pair-à-pair. Mais on voit aussi des PLANET : ce sont les roots de ZeroTier, Inc., présents même avec un controller local. C'est la nuance de souveraineté à connaître.
Souveraineté : la vérité sur les roots
Section intitulée « Souveraineté : la vérité sur les roots »Auto-héberger le controller rend votre plan de contrôle indépendant : autorisations, IP et routes sont chez vous, sans appel à ZeroTier Central. C'est déjà beaucoup.
Mais ce n'est pas une indépendance totale. La découverte des pairs et le relais de secours passent, par défaut, par les roots de ZeroTier, Inc. Pour couper complètement le cordon, il faut définir vos propres moons (des roots personnels, sur des machines toujours allumées à IP fixe), voire régénérer votre propre planet. Cette étape est réputée pénible, mal documentée, et non prise en charge par les applications mobiles officielles. À l'inverse, un serveur WireGuard est souverain de bout en bout dès la première configuration.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Correctif |
|---|---|---|
Nœud bloqué REQUESTING_CONFIGURATION | Membre pas autorisé sur le controller | Autoriser le membre (API ou ztncui) |
Statut ONLINE mais réseau ACCESS_DENIED | Réseau privé, autorisation manquante | Idem : valider le nœud côté controller |
Nœud OFFLINE | UDP 9993 bloqué en sortie | Ouvrir le port sur le pare-feu |
Pair en RELAY au lieu de DIRECT | NAT strict, UDP 9993 filtré | Autoriser l'UDP 9993, éviter le double NAT |
| Débit faible, latence élevée | Trafic relayé par les roots | Rétablir le P2P direct ou poser un moon |
Le passage en RELAY est le piège le plus courant : quand le hole punching UDP échoue, le trafic transite par les roots de ZeroTier, Inc. en TCP, ce qui ajoute de la latence et une dépendance externe. La cause est presque toujours un UDP 9993 filtré sans message d'erreur ICMP, ou un NAT symétrique. Vérifiez que le port sort librement des deux côtés.
FAQ : questions fréquentes sur ZeroTier
Section intitulée « FAQ : questions fréquentes sur ZeroTier »| Critère | ZeroTier | Tailscale |
|---|---|---|
| Couche | L2 (Ethernet) | L3 (IP) |
| Broadcast/multicast | Oui | Non |
| Débit | Plus faible (userspace) | Élevé (noyau) |
| Base | Protocole propriétaire | WireGuard |
- WireGuard est un tunnel IP de niveau 3, au protocole standard et intégré au noyau Linux. Il est plus rapide (des mesures indépendantes le donnent près de deux fois plus véloce) et souverain de bout en bout dès la première config.
- ZeroTier émule un réseau Ethernet de niveau 2 avec un protocole propriétaire tournant en espace utilisateur. Plus polyvalent (broadcast, multicast, appareils exotiques) mais plus lent.
zerotier-one contient déjà un controller : vous pilotez vos réseaux via son API REST locale (http://localhost:9993/controller/) ou une interface web tierce comme ztncui (open source), sans passer par my.zerotier.com.Mais attention : la découverte des pairs et le relais de secours passent par défaut par les roots de ZeroTier, Inc. (le planet). Pour une autonomie totale, il faut définir ses propres moons, une étape réputée pénible et non prise en charge sur mobile. Un serveur WireGuard, lui, est souverain de bout en bout.download.zerotier.com, à préférer au script curl ... | bash.Sur Debian/Ubuntu :curl -fsSL 'https://download.zerotier.com/contact%40zerotier.com.gpg' \
| sudo gpg --dearmor -o /usr/share/keyrings/zerotier.gpg
echo "deb [signed-by=/usr/share/keyrings/zerotier.gpg] https://download.zerotier.com/debian/bookworm bookworm main" \
| sudo tee /etc/apt/sources.list.d/zerotier.list
sudo apt update && sudo apt install zerotier-one
On télécharge la clé dans un trousseau puis on installe un paquet vérifié, sans exécuter de script distant à l'aveugle.join.À vérifier dans l'ordre :- Autoriser le membre côté controller (API REST ou ztncui), en cochant son adresse de nœud.
- Confirmer que le daemon
zerotier-onetourne bien. - Vérifier que le port UDP 9993 sort librement vers les roots (un port filtré empêche la découverte).
OK.À retenir
Section intitulée « À retenir »- ZeroTier émule un réseau Ethernet de niveau 2 : son atout unique est le broadcast/multicast et le bridging, absents de Tailscale et WireGuard.
- Pour un usage IP classique, WireGuard et Tailscale sont plus rapides (noyau contre espace utilisateur) et plus simples à rendre souverains.
- L'installation passe par un dépôt signé, pas par un script exécuté à l'aveugle.
- Le daemon contient son propre controller : on auto-héberge le plan de contrôle via l'API REST locale sur le port 9993.
- Un controller local ne coupe pas la dépendance aux roots de ZeroTier, Inc. : il faut des moons pour l'autonomie totale.
- ZeroTier One est aujourd'hui sous MPL 2.0 (open source), la BSL étant un épisode passé.
- Diagnostic : un nœud en attente s'autorise sur le controller ; un pair en
RELAYsignale un UDP 9993 filtré.