Tailscale + SSH : mon VPN de dev en 15 minutes
J'ai arrêté d'utiliser WireGuard + fail2ban + port forwarding en 2024 au profit de Tailscale. Depuis, je peux accéder à ma station de dev, à mon NAS, et à mes VPS depuis n'importe où (aéroport, café, train) sans ouvrir un seul port, sans configurer un routeur, sans stress sécurité. Le setup prend 15 minutes. Voici exactement comment, les 3 usages qui justifient de l'installer, et les 2 limites à connaître.
Ce que Tailscale fait (et que les VPNs classiques ratent)
Tailscale crée un réseau mesh P2P entre tes machines. Chaque machine dans ton « tailnet » peut communiquer directement avec les autres, même derrière des NATs, même sur des réseaux différents, sans besoin d'un serveur central (en dehors du coordination server de Tailscale lui-même).
Ce que ça donne en pratique :
- •Zéro port ouvert sur internet
- •Pas de serveur VPN à maintenir
- •Authentification via Google/GitHub/OAuth
- •Une IP
100.x.y.zstable par machine, routable entre elles - •Fonctionne partout (WiFi public, 4G, réseau hôtel flaky)
Install en 5 minutes
Sur chaque machine, une seule commande :
# Linux (Debian/Ubuntu)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# macOS
brew install --cask tailscale
# Puis login via l'app
# Windows
winget install tailscale.tailscaleAu premier tailscale up, une URL d'auth s'ouvre. Tu te connectes avec ton compte (GitHub/Google). 30 secondes. La machine apparaît dans ton tailnet.
Répète sur chaque machine que tu veux connecter. Chaque machine obtient une IP 100.x.y.z et un hostname (typiquement ma-machine.tailnet-xyz.ts.net).
Les 3 usages qui justifient l'install
Usage 1 : accéder à ma station de dev depuis partout
Ma station de dev perso (RTX 4090, beaucoup de RAM) tourne chez moi. Avec Tailscale activé, je peux ssh patrice@desktop depuis mon MacBook dans un train à 300 km/h, et ça marche comme si j'étais assis devant.
Config SSH côté client :
# ~/.ssh/config
Host desktop
HostName desktop.tailnet-xyz.ts.net
User patrice
IdentityFile ~/.ssh/id_ed25519Puis ssh desktop. La connexion passe par Tailscale (P2P direct quand possible, relay sinon) sans avoir à ouvrir le port 22 sur mon routeur.
Tailscale SSH (feature plus récente) remplace même ta config SSH classique par une auth basée sur l'identité Tailscale :
sudo tailscale up --sshAvec ça, pas besoin de clés SSH du tout. L'auth passe par Tailscale. Attention : à n'utiliser que si tu fais confiance à Tailscale pour l'auth — ce qui est mon cas.
Usage 2 : exposer un service en dev sans tunnel public
Je développe souvent des features qui doivent être testées sur mobile (responsive, caméra, géoloc). Avant Tailscale, je utilisais ngrok pour exposer mon localhost:3000 sur un URL public temporaire. Problème : l'URL est publique, n'importe qui peut l'atteindre si elle fuit.
Avec Tailscale, je run next dev sur mon portable et j'accède directement depuis mon téléphone via http://100.x.y.z:3000 ou http://macbook.tailnet-xyz.ts.net:3000. L'URL n'est visible que dans mon tailnet — pas d'exposition publique.
Usage 3 : réseau partagé entre VPS pour mes déploiements
Mes VPS (Hetzner, OVH) sont aussi dans mon tailnet. Je peux faire communiquer mon VPS Hetzner (API) avec mon NAS Synology maison (stockage images) via leurs IPs Tailscale — pas besoin d'ouvrir les ports DB ou NFS sur internet.
# Depuis le VPS Hetzner
rsync -avz ./uploads/ nas.tailnet-xyz.ts.net:/volume1/backups/uploads/Le trafic passe par le tailnet, chiffré point-à-point, sans aucune exposition publique.
Le schéma mental
Les 2 limites à connaître
Limite 1 : dépendance à un service tiers
Tailscale est un service centralisé pour le coordination (le trafic lui est P2P, mais le coordinator est chez Tailscale). Si Tailscale plante, tu ne peux plus établir de nouvelles connexions.
Mitigation : installer headscale — une implémentation open source du coordinator. Tu self-host le coordinator et tu gardes les clients Tailscale officiels. C'est ce que j'ai commencé à faire pour mes projets clients.
Limite 2 : le plan gratuit a ses limites
Le plan gratuit permet jusqu'à 100 appareils et 3 utilisateurs. Au-delà, 6 $ / utilisateur / mois. Pour un usage solo ou petite famille, le gratuit est largement suffisant.
Mon setup complet (extrait `~/.tailscale/`)
# Chaque machine a son rôle tagué
sudo tailscale up --ssh \
--accept-routes \
--operator=patrice \
--hostname=$(hostname)
# Le VPS Hetzner agit comme exit node
# (seulement sur ce VPS)
sudo tailscale up --advertise-exit-nodeDans le dashboard Tailscale, j'ai configuré des ACL pour limiter qui peut accéder à quoi :
{
"acls": [
{"action": "accept", "src": ["patrice@example.com"], "dst": ["*:*"]},
{"action": "accept", "src": ["tag:ci"], "dst": ["tag:prod:22,443"]}
],
"ssh": [
{"action": "check", "src": ["patrice@example.com"], "dst": ["*"], "users": ["root", "patrice"]}
]
}Ce qu'il faut retenir
- 1.Tailscale remplace les VPNs classiques en 15 minutes d'install, sans ouverture de ports.
- 2.3 usages qui justifient l'install : dev remote, exposition privée, réseau VPS.
- 3.P2P + coordination centralisée — plus rapide qu'un VPN hub-and-spoke.
- 4.Alternative self-host :
headscalesi tu veux vraiment zéro dépendance. - 5.Plan gratuit suffit pour 99% des usages solos.
Pour le workflow complet de dev remote avec Claude Code sur une machine distante via Tailscale, j'ai écrit un livre dédié :
Soutenez mon travail sur Patreon
Accès anticipé aux articles, contenu exclusif, et la satisfaction de soutenir un auteur indépendant.
Rejoindre — à partir de 3€/mois