Tuxvador's Blog
Présentation de WorkItOut — Trouve ton partenaire de sport Rapports quotidiens automatisés CrowdSec par e-mail Gestion programmatique du DNS avec l'API IONOS Premiers pas avec Proxmox VE pour votre laboratoire maison Mon Homelab Proxmox VE : Aperçu de l'infrastructure
EN

Utiliser Headscale pour un Accès VPN Auto-Hébergé


Tailscale simplifie les VPN — il crée un réseau maillé basé sur WireGuard où chaque appareil reçoit une IP unique et peut atteindre directement tous les autres appareils. L’inconvénient est que Tailscale dépend de leur serveur de contrôle pour la coordination.

Headscale est la réponse open-source : il implémente le protocole de contrôle Tailscale afin que vous puissiez exécuter votre propre serveur de coordination. Cela signifie aucune dépendance envers un service externe et un contrôle total sur votre réseau maillé.

Architecture

┌─────────────────┐      WireGuard       ┌──────────────────┐
│  Laptop (home)  │ ◄──────────────────► │  Headscale Server │
│  100.x.x.1      │                      │  vpn-srv:8080     │
└─────────────────┘                      └────────┬─────────┘
         ▲                                         │
         │            WireGuard mesh               │
         ▼                                         │
┌─────────────────┐                                │
│  Phone (4G)     │ ◄──────────────────────────────┘
│  100.x.x.2      │
└─────────────────┘

Chaque nœud se connecte au serveur Headscale, reçoit une IP unique dans la plage 100.x.x.x/10, et peut atteindre les autres nœuds directement via WireGuard (pair-à-pair lorsque c’est possible, relayé via DERP lorsque la traversée NAT échoue).

Configuration de Headscale

Sur un conteneur LXC dédié :

# Télécharger la dernière version
wget https://github.com/juanfont/headscale/releases/latest/download/headscale_0.23.0_linux_amd64.deb
dpkg -i headscale_0.23.0_linux_amd64.deb

# Configurer
nano /etc/headscale/config.yaml

Paramètres de configuration clés :

server_url: https://vpn.tuxvador.fr:8080
listen_addr: 0.0.0.0:8080
grpc_listen_addr: 0.0.0.0:50443
private_key_path: /var/lib/headscale/private.key
derp:
  server:
    enabled: true
    stun_listen_addr: 0.0.0.0:3478
dns_config:
  base_domain: headscale.home.lab

Activer et démarrer :

systemctl enable --now headscale

Ajouter des Nœuds

Sur le serveur Headscale :

headscale users create homelab
headscale preauthkeys create -user homelab -expiration 24h

Sur chaque client (ordinateur portable, téléphone, serveur) :

Installez le client Tailscale et pointez-le vers votre serveur Headscale :

curl -fsSL https://tailscale.com/install.sh | sh
tailscale up --login-server=https://vpn.tuxvador.fr:8080 --authkey <your-key>

L’appareil s’enregistre auprès de votre serveur et reçoit une IP. Répétez pour chaque nœud que vous souhaitez dans le maillage.

Vérifier le Maillage

tailscale status

Vous devriez voir tous les nœuds connectés et leurs IP. Testez la connectivité :

ping 100.x.x.2

Routage vers les Services Internes

La vraie valeur est d’accéder aux services internes qui ne sont pas exposés sur Internet. Si votre blog tourne sur dev-srv:5000, ajoutez une route de sous-réseau Tailscale :

Sur votre conteneur dev-srv :

tailscale up --login-server=https://vpn.tuxvador.fr:8080 --advertise-routes=10.99.99.0/24

Ensuite, sur le serveur Headscale, activez la route :

headscale routes enable -r <route-id>

Maintenant, depuis votre ordinateur portable sur Tailscale, vous pouvez accéder directement à http://10.99.99.20:5000 — sans proxy inverse ni redirection de port.

Pourquoi Auto-Héberger ?

  • Aucune dépendance : Le SaaS de Tailscale pourrait tomber en panne ou modifier ses conditions d’utilisation. Votre serveur Headscale vous appartient.
  • Contrôle total : Les logs, clés et l’authentification restent dans votre infrastructure.
  • DNS personnalisé : Mettez en place votre propre résolution de domaine au sein du maillage.
  • Réseaux isolés : Fonctionne entièrement hors ligne si nécessaire.

Utilisation des Ressources

Headscale est extrêmement léger. Sur mon conteneur Debian 13 :

  • ~50 Mo de RAM avec 5 nœuds actifs
  • CPU minimal — occupé seulement lors de l’enregistrement des nœuds et des échanges de clés
  • WireGuard gère le trafic réel, donc le débit dépend de votre lien, pas de Headscale

Pour un homelab, c’est la solution VPN parfaite — sans abonnement, sans dépendance externe, et les performances de WireGuard sont excellentes.