Tuto Headscale installation NAS Synology
  • 26 mai 2025
  • ComputaSYS
  • 0


I. Présentation

Comment installer un serveur Headscale sur un NAS Synology ? Voici la question à laquelle nous allons répondre dans ce tutoriel ! Mais, pourquoi est-il intéressant d’utiliser son NAS comme serveur Headscale ? Le NAS étant un équipement généralement en ligne 24/7, il peut s’avérer utile de l’utiliser pour un service qui doit, lui aussi, être en ligne constamment.

Plutôt que d’utiliser une ressource externe, telle qu’un serveur VPS, vous pouvez utiliser votre NAS pour héberger Headscale. Pour rappel, il s’agit d’une implémentation open source et auto-hébergeable du serveur de contrôle Tailscale, très utile pour déployer un VPN Mesh basé sur WireGuard.

Pour mettre en œuvre cette configuration, il y a quelques prérequis à respecter :

Un NAS Synology compatible avec Docker (Container Manager)

Un certificat TLS pour les connexions sécurisées HTTPS (Let’s Encrypt avec le DDNS Synology est suffisant)

Un nom de domaine pour l’application Headscale (le DDNS Synology est suffisant)

Un accès administrateur sur le NAS Synology, y compris en SSH, pour une plus grande flexibilité dans la gestion du serveur Headscale

Il est aussi recommandé d’avoir une bonne connaissance de DSM puisqu’il conviendra de manipuler Container Manager et la fonctionnalité de reverse proxy. Dans le cadre de ce tutoriel, le serveur Headscale sera publié sur l’URL suivante : https://headscale.itc-14.synology.me:5001.

Avant de commencer, je vous oriente vers mes précédents articles au sujet de Headscale et Tailscale :

II. Configurer le reverse proxy DSM pour Headscale

Nous allons commencer par configurer le reverse proxy afin de publier l’application Headscale. Cela pourrait aussi être fait après le déploiement du conteneur. Le nom de domaine DDNS Synology.me a déjà été déclaré et le certificat Let’s Encrypt pour *.itc-14.synology.me a déjà été obtenu. Pour éviter de me répéter, suivez ces tutoriels si nécessaire :

Connectez-vous à l’interface de DSM, ouvrez le “Panneau de configuration” et accédez à la section “Portail de connexion”. Ici, cliquez sur l’onglet “Avancé” puis sur le bouton nommé “Proxy inversé”. Créez une nouvelle entrée avec le bouton “Créer” puis déclarez votre application :

Nom du proxy inversé : headscale

Source

Protocole : HTTPS

Nom d’hôte : le nom de domaine de l’application Headscale, ici headscale.itc-14.synology.me

Port : port sur lequel vous souhaitez publier l’application. Choisissez autre chose que 5001 (car c’est le port par défaut de DSM en HTTPS)

Destination

Protocole : HTTP

Nom d’hôte : localhost, car notre conteneur Headscale est en local sur le NAS

Port : 8080, car le conteneur sera accessible sur ce port. S’il est déjà pris par un autre service, utilisez un autre port (vous adapterez la configuration du conteneur en conséquence).

Cliquez ensuite sur l’onglet “En-tête personnalisé”, puis cliquez sur le bouton “Créer” et choisissez “WebSocket”. Ceci permet d’avoir les bons en-têtes HTTP, sinon Headscale ne fonctionnera pas.

Validez. Voilà, vous venez d’accomplir la première étape importante de la configuration.

III. Préparer le conteneur Headscale

Avant de créer le conteneur en lui-même, nous allons préparer l’arborescence de dossiers qui lui sera associée. Dans le répertoire docker, créez un dossier nommé headscale et à l’intérieur, créez deux sous-dossiers : config et data. Vous obtenez le résultat suivant :

Dans le répertoire config créé précédemment, vous devez déposer le fichier de configuration config.yaml correspondant à la configuration de Headscale. Vous pouvez récupérer un modèle sur le GitHub de Headscale, en cliquant sur ce lien.

Nous n’allons pas modifier tous les paramètres, mais uniquement ceux indispensables pour démarrer. Les ACL se déclarent dans un autre fichier (référez-vous au tutoriel de mise en œuvre de Headscale). Voici 3 paramètres à modifier :

server_url : l’URL complète de votre serveur Headscale.

listen_addr : adresse IP sur laquelle écoute le service, il s’agit ici de la valeur recommandée pour la production.

base_domain : le nom de domaine que vous souhaitez utiliser pour le service MagicDNS.

server_url: https://headscale.itc-14.synology.me:5001
listen_addr: 0.0.0.0:8080
dns:
base_domain: it-connect.cloud

Enregistrez le fichier et déposez-le dans le répertoire config. Vous obtenez ceci :

Désormais, lancez Container Manager puis créez un nouveau projet nommé headscale. Spécifiez le répertoire /docker/headscale créé précédemment et indiquez ce code pour Docker Compose :

services:
headscale:
container_name: headscale
image: headscale/headscale:0.25.1
restart: unless-stopped
ports:
– 8080:8080
volumes:
– /volume1/docker/headscale/config:/etc/headscale
– /volume1/docker/headscale/data:/var/lib/headscale
entrypoint: headscale serve

Ce fichier Docker Compose définit un service nommé headscale basé sur l’image headscale/headscale:0.25.1, ce qui permettra d’installer la version 0.25.1 de Headscale (attention, lorsque vous passez d’une version à une autre de Headscale, il y a parfois des impacts).

Nom du conteneur : headscale

Redémarrage automatique : activé via la directive restart: unless-stopped.

Port exposé : le port 8080 du conteneur est mappé au port 8080 de l’hôte.

Volumes montés :

/volume1/docker/headscale/config : mappé dans le répertoire /etc/headscale du conteneur

/volume1/docker/headscale/data : mappé dans le répertoire /var/lib/headscale du conteneur

Commande de démarrage : le conteneur démarre avec la commande headscale serve, ce qui lance directement le serveur Headscale sans passer par un shell. Ceci est déclaré via la directive entrypoint.

Poursuivez et lancez la création du projet. Container Manager va télécharger l’image et créer le conteneur.

Le conteneur headscale est en cours d’exécution sur le NAS. Ici, nous utilisons le reverse proxy de DSM, sinon nous pourrions déployer un second conteneur pour assurer la fonction de reverse proxy.

IV. Interagir avec le conteneur Headscale

Pour configurer l’application Headscale, notamment pour créer des utilisateurs et des nœuds (appareils), vous devez lancer des commandes à partir d’un Terminal. Ceci est vrai sauf si vous optez pour l’installation d’une interface web pour la gestion de Headscale, ce qui reste facultatif (et implique l’utilisation d’un autre projet, car ce n’est pas natif).

Pour exécuter des commandes telles que headscale users list, vous avez au moins ces deux options :

Le mode Terminal de Container Manager

L’utilisation du Terminal de DSM

A. Exécuter des commandes Docker avec DSM

Pour exécuter des commandes Docker directement depuis le terminal DSM, vous devez un accès root en ligne de commande. Pour cela, vous devez accéder au NAS en SSH, en vous connectant avec le compte admin créé par défaut sur DSM (prérequis avec DSM 7+).

Pour activer le compte admin par défaut :

Panneau de configuration > Utilisateur et groupe > admin > Décocher la case “Désactiver ce compte” – Pensez à le désactiver à la fin de vos manipulations.

Pour activer l’accès SSH :

Panneau de configuration > Terminal & SNMP > Cocher la case “Activer le service SSH”.

Ensuite, depuis votre PC, ouvrez une console et connectez-vous en SSH (vous pouvez aussi utiliser une application comme PuTTY).

ssh admin@

Saisissez le mot de passe du compte. Puis, passez en tant que root pour exécuter les commandes de configuration de Tailscale. En effet, ceci nécessite des permissions élevées.

sudo -i

Ainsi, dans le Terminal, vous pouvez lancer vos commandes dans le conteneur via docker exec. Suivez ce modèle :

docker exec -it
docker exec -it headscale headscale users list

B. Exécuter des commandes Docker avec Container Manager

L’alternative consiste à utiliser Container Manager. Cliquez sur le conteneur headscale, puis sur le bouton “Action” afin de localiser l’option “Ouvrir le Terminal”. Cette image n’intègre pas de shell (pas de /bin/sh ni de /bin/bash), ce qui ne facilite pas l’exécution de commande. Ensuite, cliquez sur la flèche à côté du bouton “Créer” et choisissez “Lancer avec une commande”.

Saisissez votre commande et validez. Un nouveau Terminal va s’afficher dans la liste à gauche et il contiendra le résultat de l’exécution de cette commande. Par exemple :

La première méthode est clairement plus confortable et pratique lorsqu’il y a plusieurs commandes à lancer. Quand il y a un besoin ponctuel pour afficher rapidement une information ou inscrire ponctuellement un appareil, la seconde méthode peut convenir.

V. Conclusion

Votre serveur Headscale est prêt à l’emploi ! Vous n’avez plus qu’à créer vos utilisateurs, à inscrire vos appareils et à configurer vos ACL. Ces étapes ne sont pas décrites dans cet article, car elles ont déjà été abordées dans le tutoriel de mise en œuvre global de Headscale.

Si vous ne parvenez pas à faire fonctionner votre serveur Headscale :

Vérifiez qu’il est bien joignable, y compris depuis Internet, par vos clients Tailscale

Testez une connexion HTTPS avec un navigateur pour vérifier que le certificat TLS de votre domaine Headscale est bien valide

Vérifiez que le pare-feu de DSM autorise les connexions sur le port sur lequel vous avez publié l’application

Consultez les journaux du conteneur Headscale (Container Manager > Conteneur > headscale > Journal)

Ingénieur système et réseau, cofondateur d’IT-Connect et Microsoft MVP “Cloud and Datacenter Management”. Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.



Source link

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *