ITSkillsCenter
Cybersécurité

Headscale alternative self-hosted Tailscale : tutoriel 2026

4 min de lecture

Tailscale est merveilleux mais c’est un service hébergé chez Tailscale Inc. Pour les organisations qui veulent souveraineté complète, sécurité maximum, ou éviter les coûts pour grosses équipes, Headscale est une implémentation open-source du serveur de coordination Tailscale. Vous l’auto-hébergez sur votre VPS, vos clients Tailscale standard s’y connectent comme à Tailscale.com, et tout reste chez vous. Voici le tutoriel d’installation 2026.

Voir notre guide Tailscale pour les bases.

Pourquoi Headscale

  • Souveraineté complète : aucune donnée chez Tailscale Inc. Toutes vos clefs publiques, ACLs, sessions restent sur votre serveur.
  • Pas de coût par utilisateur : illimité pour le prix d’un VPS
  • Compatible clients Tailscale officiels : pas de fork, mêmes apps Linux/macOS/iOS/Android
  • Open-source BSD
  • Implémentation Go : binaire unique, simple à déployer

Limites vs Tailscale Cloud

  • Pas de dashboard web officiel inclus (mais headscale-ui communautaire existe)
  • Mises à jour à votre charge
  • SSO/OIDC à configurer manuellement
  • Pas de DERP relay automatique (vous devez en déployer un)
  • Logs et audit à gérer vous-même

Prérequis

  • Un VPS public avec IP fixe (Hetzner CX22 suffit largement)
  • Un domaine pointant sur le VPS (headscale.exemple.sn)
  • Reverse proxy HTTPS (Caddy ou Traefik)
  • Niveau attendu : avancé
  • Temps : 2-3 heures

Étape 1 — Installer Headscale

# Télécharger le binaire (vérifier la dernière version sur GitHub)
HEADSCALE_VERSION=0.23.0
wget -O /tmp/headscale.deb https://github.com/juanfont/headscale/releases/download/v${HEADSCALE_VERSION}/headscale_${HEADSCALE_VERSION}_linux_amd64.deb

sudo dpkg -i /tmp/headscale.deb
sudo systemctl enable headscale

Étape 2 — Configurer headscale.yaml

# /etc/headscale/config.yaml
server_url: https://headscale.exemple.sn
listen_addr: 0.0.0.0:8080
metrics_listen_addr: 127.0.0.1:9090
grpc_listen_addr: 0.0.0.0:50443
grpc_allow_insecure: false

private_key_path: /var/lib/headscale/private.key
noise:
  private_key_path: /var/lib/headscale/noise_private.key

prefixes:
  v4: 100.64.0.0/10
  v6: fd7a:115c:a1e0::/48

derp:
  server:
    enabled: false
  urls:
    - https://controlplane.tailscale.com/derpmap/default

database:
  type: sqlite3
  sqlite:
    path: /var/lib/headscale/db.sqlite

log:
  format: text
  level: info

dns:
  magic_dns: true
  base_domain: tailnet.exemple.sn
  nameservers:
    global:
      - 1.1.1.1
      - 8.8.8.8

Étape 3 — Reverse proxy Caddy

# /etc/caddy/Caddyfile
headscale.exemple.sn {
    reverse_proxy 127.0.0.1:8080

    @ws {
        header Connection *Upgrade*
        header Upgrade websocket
    }
    reverse_proxy @ws 127.0.0.1:8080
}
sudo systemctl restart caddy
sudo systemctl start headscale
sudo systemctl status headscale

Étape 4 — Créer un user et un device

# Créer un user
sudo headscale users create admin

# Générer une pre-auth key (clef d'inscription)
sudo headscale --user admin preauthkeys create --reusable --expiration 24h
# Copier la clef retournée

Étape 5 — Connecter un client Tailscale

# Sur la machine client (Linux/macOS)
sudo tailscale up \
  --login-server https://headscale.exemple.sn \
  --authkey LA_PRE_AUTH_KEY \
  --hostname laptop-1

# Vérifier
tailscale status

Sur Windows et iOS/Android, l’option login-server se configure dans les Settings/Préférences avancées de l’app Tailscale.

Étape 6 — ACLs Headscale

# /etc/headscale/acl_policy.json
{
  "groups": {
    "group:admins": ["admin"]
  },
  "tagOwners": {
    "tag:prod": ["group:admins"]
  },
  "acls": [
    {
      "action": "accept",
      "src": ["group:admins"],
      "dst": ["*:*"]
    }
  ],
  "ssh": [
    {
      "action": "accept",
      "src": ["group:admins"],
      "dst": ["tag:prod"],
      "users": ["root", "deploy"]
    }
  ]
}
# Référencer dans config.yaml
policy:
  mode: file
  path: /etc/headscale/acl_policy.json

sudo systemctl restart headscale

Étape 7 — Backup

# Backup quotidien de la base et des clefs
#!/bin/bash
DATE=$(date +%Y%m%d)
tar czf /tmp/headscale-$DATE.tar.gz /var/lib/headscale/ /etc/headscale/
aws s3 cp /tmp/headscale-$DATE.tar.gz s3://backups/headscale/
rm /tmp/headscale-$DATE.tar.gz

Headscale-UI (dashboard web)

Plusieurs UIs communautaires existent : headscale-ui, headplane. Déployables via Docker à côté de Headscale, accédant au gRPC sur le port 50443. Pratique pour les non-CLI.

Adaptation Afrique de l’Ouest

Pour une PME africaine qui veut souveraineté totale, Headscale sur un VPS local (chez Maktoob, DigitalRise) ou européen offre tout Tailscale sans dépendance externe. Coût : ~5 €/mois pour le VPS Headscale + 0 €/mois utilisateurs illimités. Excellent ROI face à 18 USD/user de Tailscale Premium.

Erreurs fréquentes

ErreurCauseSolution
« server_url is invalid »HTTPS non valideVérifier certificat Caddy/Let’s Encrypt
Tailscale client ne se connecte pasWebSocket non proxifiéAjouter handler @ws dans Caddyfile
Lent, latence élevéeDERP relay tiersDéployer son propre DERP
Magic DNS ne marche pasbase_domain mauvaisSous-domaine spécifique tailnet

Pour aller plus loin

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité