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
| Erreur | Cause | Solution |
|---|---|---|
| « server_url is invalid » | HTTPS non valide | Vérifier certificat Caddy/Let’s Encrypt |
| Tailscale client ne se connecte pas | WebSocket non proxifié | Ajouter handler @ws dans Caddyfile |
| Lent, latence élevée | DERP relay tiers | Déployer son propre DERP |
| Magic DNS ne marche pas | base_domain mauvais | Sous-domaine spécifique tailnet |
Pour aller plus loin
- Guide complet Tailscale
- ACLs et tags
- Tailscale SSH bastion
- Repository Headscale : github.com/juanfont/headscale