Initial vault setup
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
---
|
||||
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 <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](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é
|
||||
Reference in New Issue
Block a user