Aller au contenu principal

Intégration domotique Headscale, gratuite et open source

Intégration Headscale pour Gladys Assistant

Les machines de votre serveur Headscale auto-hébergé : en ligne, dernière connexion, expiration.

Suivez les machines de votre serveur Headscale dans Gladys : un appareil par machine (en ligne ou non, dernière connexion, jours avant l'expiration de sa clé, routes annoncées et activées), un appareil « Headscale » avec les machines en ligne et au total, un widget de tableau de bord, et des déclencheurs de scène quand une machine passe hors ligne, revient, ou quand sa clé va expirer.

Headscale est le serveur de coordination libre et auto-hébergé compatible avec les clients Tailscale. Cette intégration s'adresse à ceux qui hébergent leur propre serveur Headscale ; elle ne lit pas le service cloud de Tailscale. Elle a été testée contre de vrais serveurs Headscale 0.22.3, 0.23.0, 0.26.1 et 0.29.5 en Docker, avec des clients Tailscale enregistrés puis arrêtés. Vos retours sont les bienvenus sur le forum Gladys ou dans les issues.

Ce qu'il vous faut​

  • Gladys Assistant 5.1.0 ou plus récent.
  • Un serveur Headscale, version 0.22 ou plus récente, joignable depuis Gladys : son adresse publique (server_url) ou son adresse et son port sur votre réseau (8080 par défaut).
  • Une clé d'API de ce serveur. Gladys ne fait que lire : elle ne modifie rien sur Headscale.

Configuration​

  1. Sur le serveur Headscale, créez une clé d'API (voir plus bas) et copiez-la : elle n'est affichée qu'une fois.
  2. Dans Gladys, installez l'intégration, puis ouvrez son écran Configuration.
  3. Adresse du serveur : le server_url de Headscale (https://headscale.example.com), ou son adresse IP et son port (192.168.1.2:8080). Une adresse sans http:// ni https:// est lue en http, sur le port 8080 s'il n'est pas précisé.
  4. Clé d'API : la clé créée à l'étape 1.
  5. Accepter un certificat auto-signé : seulement pour une adresse https dont le certificat n'est pas signé par une autorité connue.
  6. Utilisateurs à suivre : noms d'utilisateurs Headscale, séparés par des virgules. Vide : les machines de tous les utilisateurs.
  7. Publier les adresses IP : désactivé par défaut. Activé, chaque machine reçoit une fonctionnalité Adresses IP avec ses adresses du tailnet.
  8. Intervalle de rafraîchissement : 1 minute par défaut. Chaque lecture coûte une requête (deux avant Headscale 0.26).
  9. Langue des noms : la langue des noms de fonctionnalités et des dates, le français par défaut.
  10. Enregistrez, puis cliquez sur Tester la connexion : elle indique combien de machines sont suivies et en ligne. Les appareils apparaissent alors dans l'onglet Découverte de l'intégration : ajoutez ceux que vous voulez.

La clé d'API​

Sur le serveur Headscale (ou dans son conteneur) :

headscale apikeys create --expiration 365d

Sans --expiration, la clé expire au bout de 90 jours, et Gladys affiche alors « Clé d'API refusée ». headscale apikeys list liste les clés et leur expiration, headscale apikeys expire --prefix <préfixe> en révoque une. La clé donne un accès complet à l'API de Headscale : gardez-la pour vous. L'intégration ne lit que la liste des machines (et des routes avant 0.26).

Quelle adresse ?​

Gladys appelle Headscale depuis son conteneur Docker. Si Headscale tourne sur la même machine, donnez l'adresse de la machine sur votre réseau, jamais 127.0.0.1. Derrière un reverse proxy, l'adresse publique en https:// fonctionne aussi.

Les appareils​

Headscale (un appareil) :

FonctionnalitéCe qu'elle indique
Machines en ligneMachines connectées au serveur en ce moment
MachinesMachines suivies (après le filtre sur les utilisateurs)

Chaque machine (son nom dans Headscale, suivi de (Headscale)) :

FonctionnalitéCe qu'elle indique
En ligneOui tant que la machine garde sa connexion au serveur
Vue pour la dernière foisQuand elle est passée hors ligne ; en ligne, quand elle s'est connectée
La clé expire dansJours avant l'expiration de la clé de la machine, 0 une fois expirée
Routes annoncéesRoutes de sous-réseau annoncées par la machine (le nœud de sortie compte pour une)
Routes activéesParmi elles, celles approuvées sur le serveur
Adresses IPSes adresses du tailnet, seulement avec Publier les adresses IP (désactivé)

La clé expire dans n'existe que pour une machine dont la clé expire : Headscale peut désactiver l'expiration par machine (headscale nodes expire --disable sur les versions récentes), et les machines à tag n'en ont souvent pas. Si une clé se met à expirer plus tard, Gladys propose Mettre à jour dans l'onglet Découverte. Une machine qui se déconnecte de son compte (logout) reçoit une clé expirée dans Headscale : elle affiche 0.

Une machine est identifiée par son identifiant Headscale : la supprimer de Headscale puis l'enregistrer à nouveau crée un nouvel appareil dans Gladys.

Tableau de bord​

Le widget Machines Headscale affiche les machines en ligne et au total, puis une ligne par machine : d'abord celles dont la clé expire sous 7 jours (en orange, en rouge une fois expirée), puis celles en ligne, puis les autres avec l'heure à laquelle elles ont été vues pour la dernière fois.

Scènes​

Déclencheurs​

  • Machine Headscale hors ligne : une machine a quitté le serveur (éteinte, hors réseau, déconnectée).
  • Machine Headscale revenue en ligne : une machine s'est reconnectée.
  • Clé de machine bientôt expirée : la clé d'une machine expire dans 30, 14, 7, 3 ou 1 jour(s), ou vient d'expirer. Son filtre Jours restants (vide : n'importe lequel) retient une de ces étapes.

Chaque déclencheur peut être limité à une machine (Machine (vide : n'importe laquelle)) ou aux machines d'un utilisateur (Utilisateur Headscale (vide : n'importe lequel), le nom exact). Ils donnent les variables Nom de la machine et Utilisateur Headscale, plus Jours restants et Date d'expiration pour la clé. Aucun événement n'est envoyé à la première lecture après un démarrage ou un changement de configuration, ni pour une machine qui vient d'apparaître : l'état précédent est inconnu. Les étapes de la clé sont vues pendant que l'intégration tourne : une étape franchie pendant qu'elle était arrêtée n'est pas envoyée après coup. Une déconnexion (logout, qui fait expirer la clé dans Headscale) ne déclenche que Machine Headscale hors ligne.

Idées de scènes​

  • Quand la clé d'une machine expire dans 7 jours, envoyez-vous un message avec son Nom de la machine et sa Date d'expiration, pour la renouveler à temps.
  • Quand le NAS distant qui garde vos sauvegardes passe hors ligne, envoyez un message.
  • Quand le téléphone d'un membre de la famille revient en ligne sur le tailnet, le soir, allumez la lumière de l'entrée.

Dépannage​

  • « Clé d'API refusée » : la clé est mal copiée, révoquée ou expirée (90 jours par défaut) : créez-en une nouvelle.
  • « Headscale ne répond pas » : vérifiez l'adresse et le port, et que Gladys peut les joindre (pare-feu, 127.0.0.1 depuis un conteneur).
  • « Certificat refusé » : le certificat https n'est pas signé par une autorité connue. S'il est le vôtre, activez Accepter un certificat auto-signé.
  • « Pas d'API Headscale à cette adresse » : l'adresse mène à un autre service (la page de connexion du reverse proxy, le port des métriques…) ou à un Headscale antérieur à 0.22.
  • Aucune machine dans l'onglet Découverte : cliquez sur Tester la connexion ; si aucune machine n'appartient aux utilisateurs de la configuration, vérifiez leurs noms (ou videz le champ).

Limites​

  • Un seul serveur Headscale par installation de l'intégration.
  • Gladys accepte 300 états par minute : sur un tailnet de plus d'une cinquantaine de machines, les premières valeurs mettent quelques lectures à arriver.
  • Lecture seule : l'intégration n'approuve pas de route, ne renouvelle pas de clé et ne supprime pas de machine. Cela reste le travail de la commande headscale ou de votre interface web.
  • En ligne est ce que dit Headscale : une machine est en ligne tant que sa connexion au serveur est ouverte, ce qui ne dit rien du trafic entre machines.
  • Les étapes de Clé de machine bientôt expirée ne sont pas mémorisées : une étape franchie pendant que l'intégration était arrêtée est perdue.
  • Sans lien avec le projet Headscale ni avec Tailscale Inc. Tailscale est une marque de Tailscale Inc.

Paramètres de configuration​

Voici les paramètres demandés par Headscale dans son écran de configuration dans Gladys.

ParamètreTypeObligatoireDescription
Votre serveur HeadscalesectionNonL'adresse de Headscale et une clé d'API, créée sur le serveur par : headscale apikeys create --expiration 365d. Lecture seule : Gladys ne modifie rien sur Headscale.
Adresse du serveurstringNonLe server_url de Headscale, ou son adresse IP et son port (8080 par défaut).
Clé d'APIsecretNonAffichée une seule fois par headscale apikeys create. Elle expire au bout de 90 jours sauf --expiration.
Accepter un certificat auto-signébooleanNonSeulement pour une adresse https dont le certificat n'est pas signé par une autorité connue.
Utilisateurs à suivrestringNonNoms d'utilisateurs Headscale, séparés par des virgules. Vide : les machines de tous les utilisateurs.
Publier les adresses IPbooleanNonDésactivé : les adresses du tailnet restent hors de Gladys. Activé : une fonctionnalité texte les affiche.
Intervalle de rafraîchissementselectNonFréquence de lecture de Headscale : une ou deux requêtes. Une machine passe hors ligne dès qu'elle quitte le serveur.
Langue des nomsselectNonLangue des noms de fonctionnalités et des dates, fixée à l'ajout d'un appareil.

Comment installer Headscale dans Gladys​

  1. Dans Gladys, ouvrez Intégrations : Headscale apparaît dans le catalogue, aux côtés des intégrations natives, avec un badge communautaire.
  2. Cliquez sur Installer. Gladys télécharge l'image Docker (ghcr.io/guim31/gladys-headscale:1.0.1), la démarre dans un bac à sable isolé du cœur, et génère l'interface de l'intégration (appareils, découverte et configuration).
  3. Ouvrez l'écran Configuration de l'intégration, remplissez les paramètres, puis enregistrez.
  4. Vous pouvez aussi l'installer directement depuis l'URL de son dépôt : https://github.com/guim31/gladys-headscale.

Headscale nécessite Gladys >=5.1.0. Le catalogue dans Gladys se rafraîchit toutes les heures : une nouvelle version est donc disponible au plus tard une heure après sa sortie.

Vous n'utilisez pas encore Gladys ? C'est gratuit et open source : suivez le guide d'installation pour démarrer.

À propos des intégrations externes​

Headscale est une intégration externe : une intégration communautaire empaquetée dans un conteneur Docker et publiée sur GitHub, que Gladys installe en un clic et exécute dans un bac à sable isolé de son cœur. Elle est publiée et maintenue par guim31, et non par l'équipe cœur de Gladys.

Inscrivez-vous à la newsletter Gladys Assistant

Quelques emails par mois sur les nouveautés et l'actualité du projet. Envoyés par Pierre-Gilles Leymarie, le fondateur du projet. Désinscription possible à tout moment 🙂