Headscale : une implémentation open source et auto-hébergée du serveur de contrôle Tailscale …

Dans l’article précédent, j’avais parlé de Tailscale, un VPN à configuration zéro. Il s’installe sur n’importe quel appareil en quelques minutes, gère les règles du pare-feu pour vous et fonctionne de n’importe où.

Néanmoins, on était dépendant d’un serveur de coordination qui centralise les connexions depuis nos instances qui y sont attachées :

Ici on va remplacer le serveur de coordination Tailscale par une implémentation open source et auto-hébergée via Headscale.

Le code d’Headscale est écrit en Go et est distribué sous licence BSD. Le projet est développé par Juan Font de l’Agence spatiale européenne :

Pour cela, je lance une petite instance Ubuntu 20.04 sur DigitalOcean qui va porter le serveur Headscale :

en récupérant le binaire sur GitHub :

Je récupère un fichier de configuration modèle sur GitHub pour le serveur Headscale :

https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml

où je définis un domaine privé :

Il est alors possible de lancer le serveur Headscale sur cette instance Ubuntu 20.04 :

Je peux vérifier que le serveur répond bien via ce test :

Création du tailnet, son réseau privé avec son espace de nom ou namespace :

à partir de là, la création d’une clé de pré-authentification est possible pour ce réseau privé :

On est alors prêt pour la création comme dans l’article précédent d’un Scale Set de machines virtuelles dans Azure sans adresses IP publiques qui vont se connecter à ce réseau privé. J’utilise ces deux scripts :

La création des machines virtuelles est effective …

Je peux le vérifier avec le client Tailscale depuis ma station connectée au réseau privé :

Tailscale fait en effet tourner des serveurs relais DERP pour aider à connecter vos nœuds. En plus ou au lieu d’utiliser les serveurs DERP de Tailscale, vous pouvez également exécuter vos propres serveurs via ce fichier de configuration pour Headscale :

https://raw.githubusercontent.com/juanfont/headscale/main/derp-example.yaml

Et MagicDNS est ici également de la partie via le domaine privé défini dans le fichier de configuration du serveur Headscale sous la forme :

NOM-DE-MACHINE.NAMESPACE.DOMAINE

MagicDNS enregistre en effet automatiquement les noms DNS des appareils au sein de ce réseau privé.

Rapide test avec Ketchup ou k3sup :

Création du serveur k3s avec k3sup :

Création et connexion des Workers du cluster k3s :

Le cluster k3s est opérationnel au travers du réseau privé fourni par le serveur Headscale :

Rapide déploiement du sempiternel démonstrateur FC via ce manifest YAML :

Le démonstrateur est accessible via Traefik et j’utilise MagicDNS pour cela sur les trois noeuds du cluster pour y accéder …

J’aurais pu aussi déployer un serveur web de test sur un noeud pour tester sa latence …

avec httping par exemple :

Le serveur Headscale au final n’ayant pas consommé énormément de ressources sur l’instance Ubuntu 20.04 :

On a vu qu’il était possible de se passer d’un serveur de coordination Tailscale via cette implémentation open source.

On peut adapter son réseau privé pour y ajouter ou supprimer des nœuds, diviser les sous-réseaux à l’aide des namespaces (on peut créer un réseau VPN pour plusieurs utilisateurs), organiser l’accès partagé des nœuds aux sous-réseaux dans différents namespaces, contrôler le routage (y compris l’attribution de nœuds de sortie pour accéder au monde extérieur).

Il manque encore la possibilité d’obtenir le mode Subnet Router, le mode Certificat SSL ou une interface Web comme on n’a pu le voir dans le précédent article mais il est probable que cela puisse apparaître dans les futures versions d’Headscale …

Une image Docker officielle existe avec un modus operandi exposé sur le dépôt GitHub :

À suivre !

--

--

Above the clouds, the sky is always blue ...

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store