Abstract violet and amber illustration of a mesh VPN network with devices connected directly to each other over encrypted tunnels

Tailscale

Tailscale

Tailscale est un VPN maillé (mesh) construit au-dessus de WireGuard : il relie vos appareils entre eux via un tunnel chiffré, peu importe où ils se trouvent. Installez-le sur un ordinateur portable, un smartphone et un serveur à la maison, et les trois se retrouvent sur le même réseau privé, avec des adresses stables. Aucune redirection de port à configurer, pas besoin d’IP fixe, et aucune clé WireGuard à échanger à la main.

Licence : le client Tailscale (le démon tailscaled et la CLI tailscale installés sur chaque appareil) est publié sous licence BSD 3-Clause, comme le confirme le fichier LICENSE du dépôt tailscale/tailscale sur GitHub. Le serveur de coordination exploité par Tailscale, lui, reste fermé. On y revient juste après.

En bref : site officiel tailscale.com · GitHub tailscale/tailscale · image Docker tailscale/tailscale sur Docker Hub · alternative de serveur de coordination auto-hébergée : Headscale (BSD 3-Clause) · le trafic WireGuard transite par le port UDP 41641.

Ce qui est open source, et ce qui ne l’est pas

Tailscale est un cas atypique pour un site consacré à l’auto-hébergement : la majeure partie du projet est open source, mais la pièce qui ne l’est pas est justement celle qui fait tout le travail de coordination. D’après la page open source officielle de Tailscale, le démon tailscaled et la CLI sont ouverts sur toutes les plateformes ; l’interface graphique l’est aussi sous Linux et Android, mais reste fermée sous Windows, macOS et iOS, même si le démon sous-jacent, lui, reste ouvert. Les serveurs relais DERP, qui aident les appareils à se joindre derrière un NAT strict, sont open source eux aussi. Ce qui reste fermé, c’est le serveur de coordination : la pièce qui échange les clés WireGuard et décide quel appareil peut joindre quel autre. En utilisant Tailscale tel quel, vous louez ce plan de contrôle à Tailscale Inc : gratuit pour un tailnet personnel, mais à code fermé.

C’est précisément le vide que comble Headscale.

Headscale : le serveur de coordination entièrement auto-hébergé

Headscale est une réimplémentation indépendante, maintenue par la communauté, du serveur de coordination de Tailscale, licence BSD 3-Clause confirmée par le fichier LICENSE du dépôt juanfont/headscale sur GitHub. Ce n’est pas un produit Tailscale, même si l’un des mainteneurs travaille chez Tailscale et a le droit d’y consacrer du temps sur ses heures de travail. Pointez un client Tailscale standard vers un serveur Headscale, et tout le reste continue de fonctionner à l’identique : tunnels WireGuard, traversée NAT, authentification des appareils. La FAQ de Tailscale elle-même décrit Headscale comme « une composante saine du plus large écosystème Tailscale », pensée pour les homelabbers et les cas d’usage où la souveraineté de l’infrastructure prime. Une déclaration inhabituelle venant d’une entreprise financée par du capital-risque, à propos d’un projet qui remplace son propre service.

Avertissement : la page officielle des releases de Headscale recommande les paquets DEB sur Debian ou Ubuntu, exécutés comme service systemd : c’est ce que les mainteneurs supportent réellement. Des images Docker existent (headscale/headscale sur Docker Hub, ghcr.io/juanfont/headscale sur GHCR), mais le README précise noir sur blanc qu’il ne « soutient ni n’encourage l’usage de reverse proxies et de conteneurs pour faire tourner Headscale ». Le guide d’installation en conteneur dans la documentation de Headscale est rédigé par la communauté et non vérifié par les mainteneurs. Commencez par le paquet natif, pas par un docker-compose.

Installer le client Tailscale avec Docker

Pour un serveur homelab qui fait déjà tourner tout le reste en conteneurs, l’image officielle tailscale/tailscale est la voie la plus simple. Contrairement à Headscale, celle-ci est pleinement supportée sous Docker.

services:
  tailscale:
    image: tailscale/tailscale:stable
    container_name: tailscale
    hostname: homelab
    environment:
      - TS_AUTHKEY=tskey-auth-xxxxxxxxxxxx
      - TS_STATE_DIR=/var/lib/tailscale
      - TS_USERSPACE=false
    volumes:
      - ./tailscale-state:/var/lib/tailscale
      - /dev/net/tun:/dev/net/tun
    cap_add:
      - NET_ADMIN
      - NET_RAW
    network_mode: host
    restart: unless-stopped
  1. Générez une clé d’authentification réutilisable depuis la console d’administration (Settings, puis Keys), pour que le conteneur s’authentifie sans passer par une connexion interactive.
  2. Montez un volume persistant pour TS_STATE_DIR, sinon le nœud se réenregistre comme un nouvel appareil à chaque redémarrage.
  3. Mettez TS_USERSPACE à false et montez /dev/net/tun si d’autres appareils doivent joindre directement les services à l’intérieur de ce conteneur.
  4. Lancez docker compose up -d, puis vérifiez le status pour confirmer que l’appareil a bien rejoint le tailnet.
docker compose up -d
docker exec tailscale tailscale status

Nœuds de sortie, routeurs de sous-réseau et contrôle d’accès

Deux fonctionnalités couvrent l’essentiel de ce qu’un homelab attend de Tailscale. Un nœud de sortie fait transiter le trafic internet d’un appareil par un autre membre du tailnet, pratique sur le wifi d’un hôtel ou pour accéder à quelque chose d’accessible uniquement depuis votre pays d’origine en voyage. Un routeur de sous-réseau fait l’inverse : il expose un sous-réseau local (un NAS, une TV connectée, une imprimante) via un seul appareil du tailnet, pour éviter d’installer Tailscale sur du matériel qui ne peut pas le faire tourner.

sudo tailscale set --advertise-exit-node
sudo tailscale set --advertise-routes=192.168.1.0/24

Les deux nécessitent une approbation depuis la console d’administration, ou une règle autoApprovers dans le fichier de politique, avant de prendre effet. Ce même fichier utilise des tags pour restreindre les accès plutôt que de faire confiance à chaque appareil par défaut, et les nœuds éphémères se désenregistrent automatiquement, pour qu’un runner CI ne reste pas indéfiniment comme appareil approuvé.

MagicDNS peut aussi rediriger chaque appareil vers un résolveur auto-hébergé plutôt que celui de votre FAI, pour que le blocage de pub vous suive en dehors du réseau domestique. Faire tourner Pi-hole ou AdGuard Home comme membre du tailnet bloque les mêmes traqueurs, que le téléphone soit sur le wifi de la maison ou en itinérance à des centaines de kilomètres.

Tailscale vs Headscale

Tailscale (hébergé)Headscale (auto-hébergé)
Serveur de coordinationCelui de Tailscale Inc, code ferméLe vôtre, en BSD 3-Clause
Temps de mise en placeEnviron 5 minutes30 à 60 minutes ou plus, nécessite un nom de domaine et une IP publique
Limite d’appareils (offre gratuite)Généreuse mais plafonnéeAucune, c’est votre propre base de données
Console d’administrationSoignée, hébergée par TailscaleInterfaces web communautaires comme Headplane, ou CLI seule
Support officielOui, une vraie équipe de supportCommunautaire : Discord et issues GitHub
Idéal pourLa majorité des homelabbersNe vouloir aucun tiers dans la boucle, à tout prix

Lequel choisir ? Si c’est juste vous, connectant vos propres appareils à votre propre tailnet : Tailscale hébergé, offre gratuite, cinq minutes, c’est réglé. Tournez-vous vers Headscale quand le fait qu’un tiers détienne votre serveur de coordination (même s’il ne peut pas voir votre trafic) est une dépendance que vous refusez d’accepter.

  • Une mise en place qui se compte en minutes, pas en heures, et aucune redirection de port, jamais
  • Une traversée NAT qui fonctionne presque toujours toute seule, en pair-à-pair direct dans la plupart des cas
  • Une offre gratuite réellement utilisable pour un foyer entier, pas juste un essai bridé
  • Le serveur de coordination par défaut appartient à Tailscale Inc, pas à vous
  • Le plafond d’appareils de l’offre gratuite s’applique aussi à votre tailnet homelab, appareils de la famille compris
  • Passer au tout auto-hébergé signifie faire tourner et maintenir Headscale vous-même, avec moins de finitions

Matériel : le client Tailscale est un simple binaire léger, parfaitement à l’aise sur un Raspberry Pi en plus de tout ce qu’il fait déjà tourner. Headscale, lui, a besoin d’une IP publique avec un vrai nom de domaine pour le TLS, généralement un petit VPS allumé en permanence plutôt qu’une machine derrière une box internet. Notre guide de démarrage homelab pour débutants détaille comment choisir le matériel pour un premier serveur.

L’accès distant à un serveur multimédia à la maison est l’une des raisons les plus courantes pour lesquelles les homelabbers installent Tailscale. Notre guide d’accès distant à Jellyfin détaille exactement ce cas : une IP de tailnet, MagicDNS, et tailscale serve pour du HTTPS sans reverse proxy séparé.

FAQ

Est-ce que Tailscale est open source ?

Le client, oui, sous licence BSD 3-Clause. Le serveur de coordination auquel il se connecte par défaut, non. Headscale est l’alternative open source pour cette pièce-là.

Est-ce que Tailscale est gratuit pour un usage personnel ?

Oui, l’offre gratuite couvre un nombre généreux d’appareils par tailnet. Headscale supprime toute limite d’appareils, puisque la base de données vous appartient, au prix de devoir faire tourner le serveur vous-même.

Est-ce que Tailscale, c’est la même chose que WireGuard ?

Non. Tailscale s’appuie sur WireGuard pour les tunnels chiffrés, mais y ajoute la couche de coordination, la traversée NAT, la rotation des clés et le contrôle d’accès, tout ce que WireGuard brut laisse à configurer à la main.

Peut-on auto-héberger Tailscale entièrement ?

Pas Tailscale lui-même : son serveur de coordination est à code fermé. Headscale est une réimplémentation indépendante, en BSD 3-Clause, qui parle le même protocole ; les clients standards se connectent alors à votre propre serveur.

Pour la plupart des homelabs, Tailscale hébergé est le bon point de départ : gratuit, rapide, open source côté client. Tournez-vous vers Headscale quand l’idée qu’un tiers détienne votre serveur de coordination vous dérange. Notre guide de démarrage homelab pour débutants et notre guide d’accès distant à Jellyfin couvrent la suite.