Headscale : Profitez de TOUTES les fonctionnalités Tailscale SANS abonnement !

BBetter Stack
Internet TechnologyTelecommutingComputing/Software

Transcript

00:00:00Voici Headscale, une version libre et open-source de Tailscale que vous pouvez installer sur n'importe quel serveur,
00:00:06ce qui vous donne le contrôle total de votre réseau chiffré au cas où l'internet tomberait ou si Tailscale augmentait soudainement ses tarifs.
00:00:13Mais ce qui est étrange, c'est que Headscale a été conçu par un employé de Tailscale.
00:00:18Pourquoi paient-ils quelqu'un pour construire leur propre concurrent ?
00:00:22Abonnez-vous et découvrons-le ensemble.
00:00:25Voyons rapidement Headscale en action avant d'entrer dans les détails.
00:00:30Alors, j'ai actuellement trois serveurs Hetzner : un pour le plan de contrôle Headscale et deux nœuds ici, que je veux connecter entre eux.
00:00:40Ces deux-là font actuellement partie de mon réseau chiffré.
00:00:44Si je lance cette commande, comme tout tourne sur Docker, je peux voir mes nœuds actuels : Ubuntu Test et Ubuntu Test 2.
00:00:53Et voici les adresses IP que je peux utiliser pour m'y connecter.
00:00:56Pour l'instant, connectons ces deux nœuds l'un à l'autre.
00:00:59D'abord, je copie cette adresse IP.
00:01:02Et maintenant, depuis Ubuntu Test 2, je vais me connecter en SSH sur le compte root.
00:01:07Oui, je ne devrais pas utiliser root, mais c'est juste pour le test.
00:01:09Et ça, c'est l'adresse IP fournie par Headscale.
00:01:11Si j'appuie sur Entrée et que je nettoie l'écran, vous voyez que je suis sur Ubuntu Test 1.
00:01:17Je suis donc passé d'Ubuntu Test 2 à Ubuntu Test 1, et je peux quitter pour revenir sur Ubuntu Test 2.
00:01:24Je peux faire la même chose depuis Ubuntu Test 1 en faisant SSH root et en collant l'IP d'Ubuntu Test 2.
00:01:31En nettoyant, on voit que je suis bien sur Ubuntu Test 2 depuis Ubuntu Test 1.
00:01:36Mais si je suis en dehors du tailnet, par exemple si j'ouvre un nouvel onglet sur mon Mac et que je tente un SSH root sur l'IP d'Ubuntu Test 2...
00:01:48Vous voyez que ça tourne dans le vide parce que je suis hors du réseau sécurisé.
00:01:52Comme vous venez de le voir, Headscale vous donne un accès complet à votre réseau.
00:01:56Vous contrôlez chaque détail et pouvez ajouter autant de nœuds que vous voulez, sans dépendance vis-à-vis d'un fournisseur.
00:02:03Et cela peut fonctionner sans internet si vous le connectez à un NAS ou un vieux Raspberry Pi.
00:02:08Mais la configuration est un peu complexe.
00:02:11D'ailleurs, laissez-moi vous montrer comment ça marche.
00:02:13Là, j'ai créé un nouveau serveur appelé Ubuntu Test 3, et je vais créer un nouveau tailnet avec un nouvel utilisateur pour connecter deux nœuds.
00:02:24Ubuntu Test 3 et Ubuntu Test 1, juste pour les besoins du test.
00:02:29Sur mon plan de contrôle Headscale, le logiciel est déjà installé, mais je vais vous montrer comment j'ai procédé.
00:02:37Actuellement, j'ai trois conteneurs Docker en cours d'exécution.
00:02:40L'un pour Headscale UI, un pour Headscale lui-même et un autre pour Caddy.
00:02:45Si on regarde le fichier Docker Compose, on voit que la config est très proche de celle de la documentation officielle.
00:02:56J'ai tout de même modifié quelques éléments comme la version de Headscale et les chemins de mes répertoires.
00:03:03J'ai aussi un conteneur pour Headscale UI, l'une des nombreuses interfaces web open source utilisables avec Headscale.
00:03:11Je vous montrerai ça un peu plus tard.
00:03:13Ensuite, il y a Caddy qui sert de reverse proxy.
00:03:16Je mettrai un lien vers ce fichier Docker Compose spécifique dans la description si ça vous intéresse.
00:03:21Dans ce dossier, nous avons aussi des répertoires “lib” et “config”.
00:03:26Le dossier “lib” sert principalement à stocker la base de données SQLite, qui gère les utilisateurs, les nœuds, le DNS et bien d'autres choses.
00:03:36Mais dans la configuration, vous pouvez passer à une base Postgres si vous préférez.
00:03:43Le dossier “config” contient la configuration de Tailscale et la liste de contrôle d'accès (ACL) dans un fichier JSON lisible.
00:03:52On en reparlera, mais jetons d'abord un œil à ceci, que vous pouvez récupérer via la doc de Tailscale ou même par un simple curl.
00:04:01En regardant l'exemple sur GitHub, on voit tout ce qu'on peut modifier, du serveur aux préfixes, ainsi que l'emplacement de notre fichier de politique.
00:04:11C'est très proche de ma config, j'ai juste changé l'URL du serveur pour pointer vers un domaine Cloudflare afin que mes nœuds sachent où se trouver.
00:04:23J'ai aussi ajouté le chemin vers mon fichier de politique, et c'est à peu près tout.
00:04:28Le domaine est un Cloudflare classique avec un enregistrement A pointant vers l'IP de mon Headscale sur un sous-domaine dédié.
00:04:37Une fois cela en place, si j'édite le fichier Caddy, on voit deux URL : une pour l'interface web et une pour le proxy Headscale.
00:04:49Après ça, la première chose à faire est de créer un utilisateur avec cette commande.
00:04:56Je vais l'appeler Tom, mais vous pouvez mettre ce que vous voulez.
00:05:00L'utilisateur est créé, on peut lister les utilisateurs et on voit le nôtre ici avec l'ID 6.
00:05:08Mais pour l'instant, cet utilisateur n'a aucun nœud associé.
00:05:11Donnons donc quelques nœuds à Tom.
00:05:13Sur Ubuntu Test 3, mon nouveau serveur, je dois d'abord installer le client Tailscale en lançant cette commande.
00:05:23Cela nous donne accès à l'exécutable Tailscale.
00:05:27Notez que si vous n'êtes pas root, vous devrez probablement utiliser sudo.
00:05:31Mais avant de lancer Tailscale ou de se connecter, il faut le faire d'une manière spécifique pour que ça marche avec Headscale.
00:05:38Pour cela, on doit créer des clés de pré-authentification, dont la commande se trouve dans le guide de démarrage de Headscale.
00:05:46Je descends dans la page et je copie cette commande.
00:05:49Ensuite, sur mon serveur Headscale, je tape “docker exec” et je colle la commande.
00:05:54Là où il y a l'ID utilisateur, on met celui de Tom, soit le 6.
00:05:59Et j'ajoute le nom du conteneur pour pouvoir y exécuter la commande.
00:06:04Et voilà notre clé de pré-authentification.
00:06:07On copie ensuite la commande pour la coller dans Ubuntu Test 3.
00:06:11On récupère notre clé et on la colle ici.
00:06:15Puis on change l'URL du serveur de connexion pour mettre le nôtre : headscale.pandor.css.
00:06:23Pandora était déjà pris, sinon je l'aurais pris.
00:06:26Maintenant, en validant, un nouveau nœud devrait être ajouté à notre réseau Headscale.
00:06:31Si on retourne sur le plan de contrôle et qu'on liste les nœuds, on voit Ubuntu Test 3 qui appartient à Tom avec ses adresses IP.
00:06:44Ajoutons maintenant Ubuntu Test 1 à l'utilisateur Tom.
00:06:47D'abord, je vais supprimer le nœud Ubuntu Test existant (ID 1) en forçant la suppression pour éviter les confirmations.
00:06:56C'est fait. Je crée une nouvelle clé et je l'ajoute à Ubuntu Test, sans oublier d'activer SSH avec le drapeau adéquat.
00:07:06Allons aussi sur Ubuntu Test 3 pour activer SSH, ce qui permettra les connexions distantes.
00:07:13Désormais, dans ma liste, j'ai Ubuntu Test 1 et Ubuntu Test 3, tous deux sous l'utilisateur Tom.
00:07:20Connectons-les.
00:07:21Je prends l'IP d'Ubuntu Test 3, je vais sur Ubuntu Test 1 et je lance SSH root avec cette IP.
00:07:30Une fois la clé activée, on voit que je suis sur Ubuntu Test 3 depuis Ubuntu Test 1.
00:07:35Et je peux faire l'inverse sans problème.
00:07:41Si vous avez suivi exactement mes étapes, il y a de fortes chances que ça ne marche pas chez vous car il faut configurer une politique d'accès.
00:07:49Laissez-moi vous montrer la mienne.
00:07:51Dans mon répertoire Headscale, sous le dossier config, on trouve le fichier ACL en JSON.
00:08:01C'est une configuration très simple qui accepte n'importe quelle source du réseau vers n'importe quelle destination ou port.
00:08:11Pour le SSH, elle autorise tout nœud du tailnet à se connecter à un autre en root, sans approbation manuelle.
00:08:24Bien sûr, selon vos besoins, vous devriez restreindre cela pour que certains nœuds ne communiquent que sur des ports précis.
00:08:33Mais c'est une base simple pour commencer.
00:08:37Encore une fois, le lien sera dans la description.
00:08:40Maintenant, qu'en est-il de Headscale UI ?
00:08:43Est-ce que ça simplifie tout le processus ?
00:08:45Je dirais oui et non.
00:08:47Regardez.
00:08:48Voici l'URL de mon interface Headscale, on y voit mes deux utilisateurs, Tess et Tom, avec leurs infos.
00:08:57On y voit les clés et les nœuds connectés.
00:09:01Au départ, il faut ajouter une clé API Headscale via une commande spécifique.
00:09:06Le problème que j'ai eu, c'est la vue des appareils.
00:09:09Comme vous voyez, il n'y a pas beaucoup d'infos, et j'ai une erreur de type TypeScript dans la console, ce qui n'est pas de mon fait puisque je n'ai pas touché au code.
00:09:22À ce stade, l'application a tendance à freezer et plus rien ne répond.
00:09:26Normalement, je devrais pouvoir ajouter un appareil ou modifier la config d'ici.
00:09:32Mais comme c'est buggé, je ne l'ai pas trouvée très utile.
00:09:35Il existe d'autres interfaces, dont certaines facilitent la gestion des politiques d'accès.
00:09:42Mais personnellement, je n'en ai pas encore trouvé une de vraiment convaincante.
00:09:46Alors oui, l'installation est un peu complexe.
00:09:49Ok, c'est vraiment complexe.
00:09:51Quelqu'un sans bagage technique ou même un développeur junior aurait du mal à le configurer seul.
00:09:57C'est sans doute pour ça que Tailscale laisse un employé travailler dessus : ça ne menace pas vraiment leur business pour l'instant.
00:10:07Il suffirait que quelqu'un utilise Claude Opus pour créer une superbe interface autour de ça pour que ça devienne sérieux, même si la licence pourrait freiner les choses.
00:10:18Mais une fois que tout tourne, Headscale fonctionne à merveille.
00:10:22Même s'il manque encore quelques fonctions, comme “funnel” et “serve” pour exposer un serveur publiquement.
00:10:32Il ne supporte pas non plus les tailnets multiples, les nœuds éphémères ou les journaux de flux réseau natifs.
00:10:38Mais pour un outil open source, c'est vraiment impressionnant.
00:10:42Et si un jour je veux faire tourner mon instance OpenClaude totalement hors ligne avec un LLM local, je l'envisagerai sérieusement.

Key Takeaway

Headscale offre une alternative souveraine et gratuite à Tailscale pour créer un réseau privé virtuel sécurisé, bien que sa configuration technique exigeante le réserve actuellement aux utilisateurs avancés.

Highlights

Headscale est une implémentation open-source et auto-hébergée du plan de contrôle Tailscale.

Le projet permet de s'affranchir des abonnements payants et de garder le contrôle total des données.

L'installation repose principalement sur Docker avec l'utilisation de Caddy comme reverse proxy.

La gestion des utilisateurs et des nœuds se fait via des commandes CLI et des clés de pré-authentification.

Les politiques d'accès (ACL) sont configurables via un fichier JSON pour sécuriser les connexions SSH.

L'interface graphique Headscale UI existe mais présente actuellement des bugs de stabilité.

Certaines fonctionnalités avancées de Tailscale comme "funnel" ou les nœuds éphémères ne sont pas encore supportées.

Timeline

Introduction et présentation de Headscale

L'auteur présente Headscale comme une version libre de Tailscale permettant de garder le contrôle total de son réseau chiffré. Il souligne l'ironie du fait que cet outil a été conçu par un employé de Tailscale lui-même. L'intérêt principal réside dans la protection contre d'éventuelles hausses de prix ou pannes d'Internet chez le fournisseur tiers. Cette section pose le décor d'une solution d'auto-hébergement robuste pour les passionnés d'infrastructure. L'objectif de la vidéo est de démontrer comment connecter des serveurs entre eux sans dépendre du cloud propriétaire.

Démonstration technique et connectivité entre nœuds

L'animateur utilise trois serveurs Hetzner pour illustrer le fonctionnement concret du réseau maillé. Il montre comment deux nœuds Ubuntu communiquent via des adresses IP privées fournies par le plan de contrôle Headscale. La démonstration prouve que la connexion SSH fonctionne parfaitement à l'intérieur du "tailnet" alors qu'elle échoue depuis l'Internet public. Ce segment met en avant l'avantage de pouvoir utiliser un NAS ou un Raspberry Pi pour faire tourner le réseau localement. L'accès est total et permet d'ajouter un nombre illimité de machines sans frais supplémentaires.

Architecture et configuration avec Docker

Cette partie détaille l'infrastructure logicielle reposant sur trois conteneurs Docker : Headscale, Headscale UI et Caddy. L'auteur explique l'importance du fichier Docker Compose et la gestion de la base de données SQLite pour les utilisateurs. On y découvre la configuration du fichier YAML et l'utilisation de Caddy comme reverse proxy pour sécuriser les accès. La configuration nécessite de pointer un domaine Cloudflare vers l'IP du serveur pour que les nœuds puissent se localiser. C'est une étape cruciale qui définit la complexité technique de l'installation par rapport à la version commerciale.

Création d'utilisateurs et enregistrement des machines

Le processus commence par la création manuelle d'un utilisateur nommé Tom via l'interface en ligne de commande. Pour connecter un nouveau serveur, il faut installer le client Tailscale puis générer une clé de pré-authentification spécifique sur le serveur Headscale. L'auteur montre la syntaxe précise à utiliser, incluant l'URL du serveur personnalisé pour rediriger le trafic. Une fois la clé validée, le nœud apparaît instantanément dans la liste des appareils gérés. Cette procédure garantit que seuls les appareils autorisés peuvent rejoindre le réseau privé sécurisé.

Gestion des politiques d'accès (ACL) et interface web

Le narrateur explique que la communication entre les nœuds dépend d'un fichier de politique d'accès JSON appelé ACL. Il présente une configuration simplifiée qui autorise toutes les connexions, tout en recommandant de restreindre les ports en production. La section aborde ensuite Headscale UI, une interface web destinée à simplifier la gestion des appareils. Malheureusement, l'auteur note des bugs importants, notamment des erreurs TypeScript qui font geler l'application. Malgré le potentiel visuel, la gestion par ligne de commande reste préférable pour la fiabilité actuelle.

Conclusion et limites de la solution open-source

En conclusion, l'auteur admet que l'installation de Headscale est complexe et peut décourager les développeurs juniors ou les non-techniciens. C'est précisément cette barrière à l'entrée qui permet à Tailscale de ne pas voir en Headscale une menace commerciale directe. L'outil manque encore de certaines options avancées comme le support des tailnets multiples ou des journaux de flux natifs. Cependant, pour un usage personnel ou une infrastructure totalement hors ligne, Headscale est jugé impressionnant et performant. L'évolution vers une interface simplifiée pourrait transformer radicalement l'adoption de cet outil à l'avenir.

Community Posts

View all posts