Files
wiki/Catalogue-Self-Hosted/apps/app-ztnet.md
T
2026-06-09 18:40:21 +02:00

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-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

Pages Liées