Un VPN maillé fait partie de ces outils qui simplifient tout en silence : votre portable, votre serveur maison, votre téléphone et vos VPS se voient sur des adresses privées, où qu'ils soient. Le hic des VPN maillés hébergés, c'est le serveur de coordination : une entreprise détient la carte de tous vos appareils. Headscale est un remplaçant open source de ce serveur de contrôle. Faites-le tourner sur un petit VPS, continuez d'utiliser les applications habituelles, et la carte vous appartient.
Comment tout s'articule
- Headscale (sur votre VPS) attribue les adresses, distribue les clés publiques et applique vos ACL.
- Les clients sont les applications Tailscale standard, pointées vers votre serveur.
- Le trafic va d'appareil à appareil en WireGuard. Le serveur de contrôle ne le transporte jamais.
C'est ce dernier point qui permet une toute petite offre : le VPS ne répond qu'à de petites requêtes de coordination.
Ce qu'il vous faut
- Nano-IP (8 $/mois) — 2 vCPU et 1 Go de RAM, c'est bien plus que ce qu'utilise Headscale.
- Une IPv4 dédiée et un domaine, par exemple
hs.example.com. Les appareils parlent au serveur de contrôle en HTTPS, le VPS doit donc accepter le 443 entrant — ce que les offres NAT ne font pas (détails).
Installation (Debian 12 / Ubuntu 24.04)
Récupérez le .deb actuel sur la page des versions de Headscale sur GitHub — remplacez la version par la plus récente :
HS_VER=0.26.1
wget -O headscale.deb \
"https://github.com/juanfont/headscale/releases/download/v${HS_VER}/headscale_${HS_VER}_linux_amd64.deb"
apt install -y ./headscale.deb caddy
Modifiez /etc/headscale/config.yaml — les deux lignes qui comptent :
server_url: https://hs.example.com
listen_addr: 127.0.0.1:8080
Placez Caddy devant pour le HTTPS :
cat > /etc/caddy/Caddyfile <<'EOF'
hs.example.com {
reverse_proxy 127.0.0.1:8080
}
EOF
systemctl enable --now headscale
systemctl reload caddy
Ajouter un utilisateur et un appareil
headscale users create alice
headscale users list # note the user's ID
headscale preauthkeys create --user 1 --expiration 24h
Les anciennes versions attendent le nom de l'utilisateur plutôt que son ID dans --user ; headscale preauthkeys create --help vous dira ce qu'attend la vôtre.
Sur un appareil Linux :
tailscale up --login-server https://hs.example.com --authkey YOUR_KEY
Sur téléphone et ordinateur, l'application Tailscale permet de définir un serveur de contrôle personnalisé dans ses réglages. Lancez headscale nodes list sur le VPS : votre appareil doit y figurer.
Relais et traversée de NAT
La plupart des appareils se connectent directement. Quand deux d'entre eux n'y arrivent pas (réseaux mobiles stricts, double NAT), le trafic passe par un relais DERP. Par défaut, Headscale utilise les relais publics de Tailscale — ils ne voient que des paquets chiffrés. Si vous ne voulez rien d'extérieur sur le chemin, activez le relais intégré dans config.yaml (derp.server.enabled: true) et ouvrez l'UDP 3478. Le trafic relayé est alors décompté de la bande passante de votre VPS.
Limites, honnêtement
Pas de tableau de bord web officiel : utilisateurs, clés et routes sont des commandes CLI (on s'y fait dès la deuxième fois). Les nouveautés du service hébergé arrivent dans Headscale plus tard, voire jamais. Et le serveur de contrôle est désormais sous votre responsabilité : s'il tombe, les connexions existantes continuent, mais aucun nouvel appareil ne peut rejoindre le réseau et les clés ne se renouvellent plus. Sauvegardez-le : tout l'état se trouve dans /var/lib/headscale.
Pour un homelab, une famille ou une petite équipe qui veut garder la carte de ses appareils hors des serveurs d'autrui, c'est l'un des meilleurs usages d'un VPS à 8 $.
Pour aller plus loin
- Auto-héberger un VPN WireGuard — WireGuard seul, si un tunnel vous suffit
- VPS pour un VPN
- VPS pour l'accès à distance à Home Assistant
Commentaires
Pas encore de commentaires. Soyez le premier.