8.2 KiB
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 |
| License | AGPL-3.0 |
| Langage | TypeScript |
| Étoiles GitHub | 1,1k ⭐ |
| Dernière MAJ | 2026-05 |
| Catégorie | [[cat-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
# 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-onedoit tourner sur l'hôte (ou dans un conteneur sidecar) et être partagé avec ZTNet via le volume/var/lib/zerotier-one.
⚙️ Configuration Initiale
- Installer ZeroTier One sur l'hôte (
curl -s https://install.zerotier.com | bash) - Rejoindre un réseau localnet ZeroTier avec le token
LOCALNET(permet de piloter le node local) - Récupérer le
ztncuitoken :cat /var/lib/zerotier-one/authtoken.secret - Créer le compte admin ZTNet au premier lancement
- Créer un premier réseau : Networks > New Network > ZeroTier attribue un
network_id(10 chiffres) - Déployer les clients : sur chaque machine à inclure, installer le client ZeroTier officiel et rejoindre avec
zerotier-cli join <network_id>
🔄 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
- Site officiel ZeroTier
- ZeroTier — documentation protocole
- Wiki ZeroTier sur le self-hosting
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é