--- title: ZTNet created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, vpn, zerotier, mesh, controller, typescript, auto-hebergement] confidence: high contested: false sources: [https://selfh.st/apps/?tag=VPN, https://github.com/sinamics/ztnet] --- # 🔐 ZTNet > **Le controller ZeroTier auto-hĂ©bergĂ©** qui remplace le service central de ZeroTier Networks. Une UI moderne, multi-rĂ©seaux, ACL, gestion fine des peers — le tout en self-hosted. ## 📋 Informations GĂ©nĂ©rales | Champ | Valeur | | :--- | :--- | | **Site web** | (GitHub) | | **GitHub** | [sinamics/ztnet](https://github.com/sinamics/ztnet) | | **License** | AGPL-3.0 | | **Langage** | TypeScript | | **Étoiles GitHub** | 1,1k ⭐ | | **DerniĂšre MAJ** | 2026-05 | | **CatĂ©gorie** | [[cat-vpn|VPN]] | ## 📝 Description **ZTNet** est un **controller self-hosted pour ZeroTier One**, Ă©crit en TypeScript. ZeroTier est un VPN **mesh peer-to-peer** qui crĂ©e des rĂ©seaux virtuels overlay Ă  l'Ă©chelle planĂ©taire, similaire Ă  Tailscale mais avec un modĂšle de fĂ©dĂ©ration diffĂ©rent. Par dĂ©faut, les rĂ©seaux ZeroTier sont gĂ©rĂ©s via le service central de **ZeroTier Networks** (my.zerotier.com) ; ZTNet permet de **remplacer ce controller central** par votre propre instance. Avec ZTNet, vous gardez le **moteur ZeroTier** (installĂ© sur chaque peer via le client officiel) mais vous **administrez les rĂ©seaux, les membres et les ACL depuis votre propre serveur**, sans dĂ©pendre du SaaS ZeroTier Networks. C'est l'Ă©quivalent fonctionnel de [[app-headscale]] pour Tailscale. L'UI est moderne, rĂ©active, et propose toutes les opĂ©rations classiques : crĂ©ation de rĂ©seaux virtuels, gĂ©nĂ©ration de tokens d'adhĂ©sion, ajout/suppression de membres, dĂ©finition de **flow rules** (ACL ZeroTier), monitoring des pairs, et mĂȘme un **shell** pour piloter chaque peer Ă  distance. **Public cible** : admins qui veulent la flexibilitĂ© du mesh ZeroTier (LAN planĂ©taire, routage de niveau 2, support IPv6 natif) sans confier leur topologie rĂ©seau Ă  un tiers. - ✅ **Multi-rĂ©seaux** : gĂ©rer N rĂ©seaux ZeroTier depuis une seule instance - ✅ **UI web moderne** : Next.js, rĂ©active, multilingue - ✅ **Flow rules** (ACL) : rĂšgles de routage et de filtrage par rĂ©seau - ✅ **GĂ©nĂ©ration de tokens** d'adhĂ©sion (Ă  donner aux clients) - ✅ **Adresses IP managĂ©es** : attribution automatique d'IPs par pool - ✅ **DNS intĂ©grĂ©** : nommage des pairs dans le rĂ©seau - ✅ **API REST** pour intĂ©grations - ✅ **Auth intĂ©grĂ©e** : multi-utilisateurs - ✅ **Binaire Next.js standalone** : dĂ©ploiement Docker simple - ✅ **Audit** des actions et Ă©vĂ©nements rĂ©seau ## 🚀 Installation ### Docker Compose ```yaml # docker-compose.yml version: '3.8' services: ztnet: image: ghcr.io/sinamics/ztnet:latest container_name: ztnet restart: unless-stopped ports: - "3000:3000" # Web UI - "9993:9993/udp" # ZeroTier (communication peer-to-peer) volumes: - ztnet-data:/app/data - /var/lib/zerotier-one:/var/lib/zerotier-one # partagĂ© avec le service zerotier environment: - ZT_SECRET=NONCE_OU_SECRET_ALEATOIRE - ZT_NC_AUTH_TOKEN=votre_token_api_zerotier_localnet - ZT_BASE_URL=https://zerotier.example.com - ZT_UI_PROTOCOL=https labels: - "traefik.enable=true" - "traefik.http.routers.ztnet.rule=Host(`zerotier.example.com`)" - "traefik.http.routers.ztnet.entrypoints=websecure" - "traefik.http.routers.ztnet.tls.certresolver=letsencrypt" volumes: ztnet-data: ``` > **Notes** : Le port **9993/UDP** est le port standard de ZeroTier pour les paquets de plan de contrĂŽle (planet, moon, controllers). Il doit ĂȘtre joignable depuis Internet pour que les peers puissent rejoindre le rĂ©seau. Le binaire `zerotier-one` doit tourner sur l'hĂŽte (ou dans un conteneur sidecar) et ĂȘtre **partagĂ©** avec ZTNet via le volume `/var/lib/zerotier-one`. ## ⚙ Configuration Initiale 1. **Installer ZeroTier One** sur l'hĂŽte (`curl -s https://install.zerotier.com | bash`) 2. **Rejoindre un rĂ©seau localnet** ZeroTier avec le token `LOCALNET` (permet de piloter le node local) 3. **RĂ©cupĂ©rer le `ztncui` token** : `cat /var/lib/zerotier-one/authtoken.secret` 4. **CrĂ©er le compte admin** ZTNet au premier lancement 5. **CrĂ©er un premier rĂ©seau** : Networks > New Network > ZeroTier attribue un `network_id` (10 chiffres) 6. **DĂ©ployer les clients** : sur chaque machine Ă  inclure, installer le client ZeroTier officiel et rejoindre avec `zerotier-cli join ` ## 🔄 Alternatives ### Open Source - [[app-tailscale]] — Mesh VPN le plus populaire, client + controller - [[app-headscale]] — Controller Tailscale self-hosted (Ă©quivalent direct de ZTNet) - [[app-wireguard]] — VPN classique point-Ă -point, pas mesh - **NetBird** — Concurrent direct de Tailscale, UI moderne - **Nebula** (Slack) — Mesh VPN configurable, sans controller central - **MeshCentral** — Remote management + mesh ### Comparaison ZTNet vs alternatives mesh | CritĂšre | ZTNet (ZeroTier) | Tailscale | Headscale | NetBird | Nebula | | :--- | :--- | :--- | :--- | :--- | :--- | | Self-hosted full | ✅ (via ZTNet) | ❌ (controller SaaS) | ✅ | ✅ | ✅ | | Mesh P2P | ✅ | ✅ | ✅ | ✅ | ✅ | | Niveau OSI | L2 + L3 | L3 | L3 | L3 | L3 | | NAT traversal | ✅ (relay) | ✅ (DERP) | ✅ (DERP) | ✅ | ❌ (manuel) | | ACL | ✅ (flow rules) | ✅ (Tailscale ACL) | ✅ | ✅ | ✅ | | IPv6 natif | ✅ | ✅ | ✅ | ✅ | ✅ | | Licence | AGPL-3.0 | BSD-3 / propriĂ©taire | BSD-3 | BSD-3 | MIT | **Verdict** : ZTNet est **la** solution de rĂ©fĂ©rence pour self-host le controller ZeroTier. Le protocole ZeroTier offre une flexibilitĂ© rĂ©seau impressionnante (niveau 2 !), au prix d'une configuration un peu plus technique que Tailscale. Pour la plupart des cas d'usage, **Headscale** (pour Tailscale) ou **NetBird** offrent une expĂ©rience plus polie, mais ZeroTier brille sur les LAN planĂ©taires, le bridging Ethernet/IPX, et les topologies trĂšs custom. ### PropriĂ©taires (ce que ZTNet remplace) - **ZeroTier Central** (my.zerotier.com) — gratuit, mais hĂ©bergĂ© - **Tailscale** (plan personnel gratuit, mais controller chez eux) - **Netmaker** (Ă©dition commerciale self-hosted) - **Cisco SD-WAN** (trĂšs haut de gamme) - **LogMeIn Hamachi** (legacy) ## 🔐 SĂ©curitĂ© - **Cryptographie** : s'appuie sur le moteur ZeroTier One — **Salsa20/ChaCha20** pour le chiffrement, **Curve25519** pour l'Ă©change de clĂ©s, **Poly1305** pour le MAC, plus un **systĂšme de trust hiĂ©rarchique** entre root servers, moons et planets. ZTNet n'implĂ©mente pas de crypto, il pilote le node ZeroTier local. - **ClĂ©s privĂ©es** : chaque pair possĂšde une **identity** (clĂ© `identity.public` + `identity.secret`) gĂ©nĂ©rĂ©e localement et stockĂ©e dans `/var/lib/zerotier-one/identity.secret`. Cette clĂ© ne quitte jamais la machine. - **Authentification** : ZTNet utilise un token d'auth (`authtoken.secret`) pour parler au node ZeroTier local. Ce token est aussi sensible qu'une clĂ© SSH et doit ĂȘtre protĂ©gĂ© (chmod 600). - **Flow rules** : ZeroTier supporte un systĂšme d'ACL trĂšs puissant, comparable Ă  un firewall L3/L4 avec capabilities. Configurer **dĂšs le dĂ©part** des rĂšgles deny-by-default, puis ouvrir le strict nĂ©cessaire. - **Auth admin** : utilisateurs avec mots de passe hashĂ©s (argon2/bcrypt), support 2FA selon version. Activer HTTPS obligatoire via [[app-traefik]]. - **Audit log** : ZTNet journalise les ajouts/suppressions de pairs, modifications de flow rules, et Ă©vĂ©nements rĂ©seau ZeroTier. - **Port 9993/UDP** : restreindre par IP si possible (WAF) ou au minimum surveiller les logs pour dĂ©tecter des scans. ## 📚 Ressources - [GitHub sinamics/ztnet](https://github.com/sinamics/ztnet) - [Site officiel ZeroTier](https://www.zerotier.com/) - [ZeroTier — documentation protocole](https://docs.zerotier.com/) - [Wiki ZeroTier sur le self-hosting](https://github.com/zerotier/ZeroTierOne/wiki) ## Pages LiĂ©es - [[cat-vpn]] — CatĂ©gorie VPN - [[app-wireguard]] — VPN point-Ă -point, alternative - [[app-tailscale]] — Concurrent direct (mesh P2P) - [[app-headscale]] — Équivalent pour Tailscale - [[app-traefik]] — Pour exposer en HTTPS - [[securisation-home-lab]] — Bonnes pratiques sĂ©curitĂ©