Tailscale : mesh VPN zero-config pour parc multi-VPS

Tailscale : mesh VPN zero-config pour parc multi-VPS

Reliez tous vos serveurs, postes et machines mobiles en un réseau privé sans configurer NAT, ports ou clés. Tailscale (basé sur WireGuard) automatise tout : authentification SSO, NAT traversal, routing. Le standard moderne pour gérer un parc distribué.

Introduction

Quand vous gérez 5 VPS, 2 postes, 1 NAS et 3 Raspberry Pi répartis sur plusieurs réseaux, configurer un VPN classique (OpenVPN, WireGuard manuel) devient un calvaire : keys, NAT, port forwarding, hub-and-spoke...

Tailscale simplifie radicalement :

  • Vous installez un agent sur chaque machine
  • Vous vous loguez avec votre compte Google/Microsoft/Github
  • Toutes vos machines apparaissent dans un réseau privé virtuel
  • Chaque machine a une IP privée stable (100.x.x.x ou Tailnet IPv6)
  • NAT traversal automatique (WebRTC-style)
  • Pas de serveur central à gérer (Tailscale héberge le control plane)

Architecture : mesh peer-to-peer. Chaque machine établit un tunnel WireGuard direct avec les autres. Tailscale n'est que la "carte d'identité" qui les fait se trouver.

Prérequis

  • Compte Tailscale gratuit (jusqu'à 100 machines, 3 users)
  • Machines Linux/Windows/macOS/iOS/Android à connecter
  • Accès admin/root sur chaque machine

Étape 1 : Créer un compte Tailscale

  1. Inscription sur https://tailscale.com (gratuit pour usage perso/petit pro)
  2. Vous obtenez un tailnet (réseau personnel) : ex mathys.github.ts.net
  3. Loguez-vous avec Google, Microsoft, GitHub, ou Okta

Étape 2 : Installer Tailscale sur un VPS Linux

curl -fsSL https://tailscale.com/install.sh | sh

Démarrer et s'authentifier :

sudo tailscale up

Une URL apparaît : ouvrez-la dans votre navigateur, validez. La machine apparaît dans votre tailnet.

Vérifiez :

sudo tailscale status

Sortie type :

100.64.0.1  srv-web-01  mathys@  linux  -
100.64.0.2  srv-db-01   mathys@  linux  -
100.64.0.3  laptop      mathys@  macos  active; direct...

Étape 3 : Connecter d'autres machines

Windows

Téléchargez l'installeur : https://tailscale.com/download

macOS

Mac App Store ou : brew install --cask tailscale

iOS / Android

App Store / Play Store → "Tailscale"

Sur chaque machine, loguez-vous avec le même compte (sinon elles ne se voient pas).

Étape 4 : Communication entre machines

Une fois deux machines dans le tailnet :

# Depuis srv-web-01
ping 100.64.0.2

# Connexion SSH
ssh [email protected]

Vous pouvez aussi utiliser MagicDNS (activé par défaut) :

ping srv-db-01
ssh user@srv-db-01

Les noms sont les hostnames Tailscale, accessibles depuis n'importe quelle machine du tailnet.

Étape 5 : Désactiver l'auth périodique (clés perso)

Par défaut, les machines doivent se réauthentifier tous les 180 jours. Pour des serveurs, vous voulez du permanent :

  1. Dans l'admin Tailscale → Machines
  2. Clic sur la machine → Disable key expiry

Ou en CLI :

sudo tailscale up --advertise-tags=tag:server

Combiné avec des auth keys réutilisables (voir étape 6).

Étape 6 : Auth Keys (pour automatiser le déploiement)

Pour installer Tailscale sur 20 VPS sans cliquer 20 fois sur un lien d'auth :

  1. Dans Tailscale → Settings → Keys → Generate auth key
  2. Cochez :
    • Reusable (utilisable sur plusieurs machines)
    • Ephemeral : non (sinon machine supprimée à la déco)
    • Pre-authorized : oui
    • Expiration : 90 jours par exemple
  3. Tags : tag:server

Vous obtenez tskey-auth-XXXXXX.

Sur chaque nouveau VPS :

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --authkey=tskey-auth-XXXXXX --advertise-tags=tag:server

La machine apparaît automatiquement dans votre tailnet, sans interaction.

Étape 7 : ACLs (qui peut accéder à qui)

Dans l'admin Tailscale → Access controls. Le langage est en JSON.

Exemple : isoler les serveurs des clients

{
    "tagOwners": {
        "tag:server": ["mathys@github"],
        "tag:client":  ["mathys@github"]
    },
    "acls": [
        // Mathys (admin) accède à tout
        {
            "action": "accept",
            "src":    ["mathys@github"],
            "dst":    ["*:*"]
        },
        
        // Les serveurs peuvent se voir entre eux
        {
            "action": "accept",
            "src":    ["tag:server"],
            "dst":    ["tag:server:*"]
        },
        
        // Les clients ne voient PAS les serveurs (par défaut, deny)
    ]
}

Cliquez Save. ACLs sont appliquées en <10 secondes.

Étape 8 : Subnet Router (étendre l'accès au LAN d'un site)

Vous avez un VPN home avec un NAS à 192.168.1.50. Vous voulez que tout votre tailnet accède au NAS sans installer Tailscale sur le NAS lui-même.

Sur une machine du LAN (ex: Raspberry Pi à 192.168.1.10) :

sudo tailscale up --advertise-routes=192.168.1.0/24

Activez l'IP forwarding :

echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Dans l'admin Tailscale → Machines → Raspberry Pi → Edit route settings → cochez 192.168.1.0/24.

Maintenant, toutes vos autres machines du tailnet peuvent atteindre 192.168.1.50 directement.

Étape 9 : Exit Node (router tout votre trafic via un VPS)

Pour utiliser un VPS comme sortie internet (comme un VPN classique) :

Sur le VPS :

sudo tailscale up --advertise-exit-node

Activez dans l'admin → Edit → Use as exit node.

Sur un client (laptop, mobile) :

sudo tailscale up --exit-node=srv-web-01

Tout votre trafic passe maintenant par le VPS. Idéal pour bypasser des restrictions wifi ou pour anonymiser.

Étape 10 : Tailscale SSH (remplace les clés SSH)

Tailscale peut servir de bastion SSH : pas besoin de gérer les clés.

Sur les serveurs :

sudo tailscale up --ssh

Maintenant, depuis votre laptop tailnet :

ssh root@srv-web-01

Pas de mot de passe, pas de clé : Tailscale authentifie automatiquement avec votre identité (Google/Microsoft).

ACLs pour SSH

{
    "ssh": [
        {
            "action": "check",
            "src":    ["mathys@github"],
            "dst":    ["tag:server"],
            "users":  ["root", "ubuntu", "mathys"]
        }
    ]
}

"check" demande une revalidation auth toutes les 12h. "accept" autorise sans check.

Étape 11 : Funnel (exposer un service à internet via Tailscale)

Tailscale Funnel expose un service tailnet sur internet (genre Cloudflare Tunnel) :

# Active sur la machine
sudo tailscale serve --bg --https=443 http://localhost:3000

# Expose à internet
sudo tailscale funnel 443 on

Votre service est accessible sur https://srv-web-01.mathys.github.ts.net. Cert SSL géré automatiquement par Tailscale.

⚠️ Funnel est limité aux ports 443, 8443, 10000. Pas pour tout exposer en prod.

Étape 12 : Stats et monitoring

# Statut détaillé
sudo tailscale status

# Stats réseau (latence, débit, peer direct ou via DERP relay)
sudo tailscale netcheck

# IPs Tailscale d'une machine
sudo tailscale ip -4
sudo tailscale ip -6

# Vérifier la connectivité avec un peer
sudo tailscale ping srv-db-01

# Logs détaillés
sudo journalctl -u tailscaled -f

Étape 13 : Backup de la config tailnet

Pour exporter votre config (ACLs, machines, tags) :

  1. Settings → Tailnet policy file → bouton Export
  2. Téléchargez le JSON

Pour automatiser (via API Tailscale) :

curl -H "Authorization: Bearer YOUR_API_TOKEN" \
    https://api.tailscale.com/api/v2/tailnet/mathys.github.ts.net/acl > acl-backup.json

Dépannage

"no route to host" entre 2 machines tailnet

Vérifiez le statut :

sudo tailscale status

Si vous voyez idle; relay "derp...", le NAT traversal a échoué → trafic passe par les relais Tailscale (DERP), plus lent mais ça marche. Pour forcer le direct, ouvrez UDP 41641 sur le firewall.

"tailscaled.service failed to start"

sudo systemctl status tailscaled
sudo journalctl -u tailscaled -n 50

Souvent un problème de réseau initial. Reset :

sudo tailscale down
sudo tailscale up

Machine apparaît expirée

Allez dans l'admin → Disable key expiry sur la machine.

Conflits d'IP avec votre LAN local

Tailscale utilise par défaut 100.64.0.0/10. Si votre LAN utilise cette range, conflit. Solution : changer le range côté Tailscale (Settings → Network) ou changer votre LAN.

Performances dégradées

sudo tailscale netcheck

Si JustOK ou Bad, c'est qu'aucun peering direct n'est possible. Causes : NAT symétrique double, firewall, MTU mismatch.

Commandes utiles

# Up / Down
sudo tailscale up
sudo tailscale down

# Statut
sudo tailscale status
sudo tailscale status --json

# Info détaillée
sudo tailscale netcheck

# Lister les peers
sudo tailscale status --peers

# Désactiver le DNS (si conflit)
sudo tailscale up --accept-dns=false

# Définir un hostname custom
sudo tailscale up --hostname=mon-nom-personnalise

# Reset complet
sudo tailscale logout
sudo tailscale up

# Supprimer Tailscale
sudo apt purge tailscale -y

Conclusion

Tailscale élimine la complexité du VPN :

  • Setup: 1 commande pour rejoindre le tailnet
  • Sécurité: WireGuard + auth SSO entreprise
  • Performance: peer-to-peer direct quand possible
  • ACLs: contrôle fin par tag/user
  • Free tier: 100 machines, 3 users

Idéal pour :

  • Administration de parc multi-VPS
  • Accès à votre lab depuis n'importe où
  • Connexion entre sites/clients
  • Remplacement OpenVPN d'entreprise

Pour aller plus loin :

  • Headscale : implémentation open-source du control plane Tailscale (auto-hébergé, gratuit illimité)
  • NetBird : alternative similaire, mesh open-source
  • WireGuard pur : si vous voulez 100% self-hosted sans agent (voir tuto dédié)

Ressources

  • Site officiel : https://tailscale.com
  • Documentation : https://tailscale.com/kb
  • Tuto VeryCloud — WireGuard VPN : /docs/article/wireguard
  • Tuto VeryCloud — Reverse SSH : /docs/article/reverse-ssh
  • Tuto VeryCloud — SSH hardening : /docs/article/ssh-hardening

Rejoignez notre serveur communautaire Discord

Pour toute question, suggestion ou simplement pour discuter avec la communauté, rejoignez-nous sur Discord !

900+Membres