Tailscale est un VPN mesh basé sur WireGuard : chaque machine reçoit une IP privée stable et parle aux autres en pair-à-pair chiffré, sans ouvrir un seul port sur le pare-feu. Là où un VPN classique fait transiter tout le trafic par une passerelle centrale, Tailscale crée un réseau maillé où les nœuds se joignent directement. Ce guide montre comment former ce mesh, le sécuriser avec des ACL grants zero-trust, l'étendre avec des subnet routers et des exit nodes, puis reprendre le contrôle du plan de contrôle avec Headscale, l'implémentation open source auto-hébergeable. Pour administrateurs et DevSecOps, sur Linux. Les sorties proviennent d'un lab réel Headscale + clients Tailscale.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Installer le client Tailscale sur Debian/Ubuntu et RHEL/Fedora
- Former un mesh chiffré et résoudre les noms avec MagicDNS
- Écrire une politique zero-trust avec les grants (le format 2026)
- Exposer un LAN (subnet router) et router Internet (exit node)
- Auto-héberger le control plane avec Headscale pour la souveraineté
Prérequis
Section intitulée « Prérequis »Au moins deux machines Linux (physiques, VM ou conteneurs) avec un accès root, et une sortie Internet sur le port UDP 41641 (ou n'importe quel port sortant : Tailscale s'adapte). Aucun port entrant à ouvrir. Pour la partie auto-hébergée, Docker et Docker Compose suffisent.
Comment Tailscale relie des machines sans ouvrir de port
Section intitulée « Comment Tailscale relie des machines sans ouvrir de port »Tailscale sépare deux plans. Le data plane (le transport des données) repose entièrement sur WireGuard : le chiffrement est de bout en bout et les clés privées ne quittent jamais la machine qui les génère. Le control plane (le coordination server) orchestre le reste : il authentifie les appareils via votre fournisseur d'identité (Google, Microsoft, GitHub, SSO), distribue les clés publiques, pousse la politique d'accès, et aide les nœuds à se découvrir.
Pour traverser les NAT et les pare-feu sans configuration, chaque nœud tente d'abord une connexion directe (technique de hole punching). Si elle échoue (NAT symétrique, CGNAT des réseaux mobiles), le trafic bascule sur un relais DERP. Point crucial pour la confidentialité : un relais DERP ne déchiffre rien, il relaie du trafic déjà chiffré par WireGuard. Tailscale continue de sonder un chemin direct et bascule automatiquement dès qu'il en trouve un.
Cette architecture a une conséquence de souveraineté qu'il faut comprendre. Le coordination server voit les clés publiques, l'inventaire des appareils, les identités et les métadonnées de connexion (qui parle à qui). Il ne voit jamais le contenu du trafic. Pour un usage où même ces métadonnées doivent rester sous votre juridiction, on remplace ce plan de contrôle propriétaire par Headscale, traité plus bas.
Installer le client Tailscale
Section intitulée « Installer le client Tailscale »Le client s'installe via le dépôt officiel de votre distribution. La version stable à la rédaction est v1.98.
curl -fsSL https://tailscale.com/install.sh | shsudo tailscale upPour un contrôle plus fin en production, ajoutez le dépôt manuellement plutôt que d'exécuter un script distant :
curl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.noarmor.gpg \ | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/nullcurl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.tailscale-keyring.list \ | sudo tee /etc/apt/sources.list.d/tailscale.listsudo apt-get update && sudo apt-get install tailscalesudo dnf config-manager --add-repo https://pkgs.tailscale.com/stable/fedora/tailscale.reposudo dnf install tailscalesudo systemctl enable --now tailscaledsudo tailscale upLa commande tailscale up ouvre une URL d'authentification à valider dans le navigateur. Pour une machine sans interface (serveur, CI), utilisez une clé d'authentification : sudo tailscale up --authkey tskey-auth-xxxx. Vérifiez ensuite l'IP attribuée (dans la plage 100.x.y.z) et l'état des pairs :
tailscale ip -4tailscale statusFormer le mesh et résoudre les noms avec MagicDNS
Section intitulée « Former le mesh et résoudre les noms avec MagicDNS »Une fois deux machines connectées, elles se joignent par leur IP Tailscale. Le test décisif est tailscale ping, qui indique si la connexion est directe ou via un relais :
tailscale ping node-bpong from node-b (100.64.0.2) via 172.22.0.4:52433 in 1msLe via <ip>:port (et non via DERP) confirme une connexion pair-à-pair directe, ici en 1 ms. C'est exactement ce qu'on attend d'un mesh sain.
MagicDNS rend le réseau lisible : au lieu de retenir des IP, on utilise le nom court de chaque machine. Activé, il résout automatiquement les noms d'appareils :
tailscale ip node-b100.64.0.2fd7a:115c:a1e0::2MagicDNS gère aussi des certificats HTTPS valides (via Let's Encrypt) pour vos services internes avec tailscale cert. C'est ce qui permet d'exposer une application en HTTPS sans bricoler d'autorité de certification interne.
Sécuriser le réseau avec les ACL grants (zero-trust)
Section intitulée « Sécuriser le réseau avec les ACL grants (zero-trust) »Par défaut, un VPN à plat laisse toute machine joindre toutes les autres. Tailscale applique au contraire un modèle zero-trust : la politique d'accès décrit explicitement qui peut joindre quoi, et tout le reste est refusé par défaut. Depuis 2026, le format recommandé est celui des grants, qui contrôlent le réseau et la couche applicative dans une syntaxe plus lisible que les anciennes ACL.
Une politique se définit en HuJSON (du JSON tolérant aux commentaires). Voici une politique de moindre privilège : le groupe ops ne peut joindre les machines taguées prod que sur SSH et HTTPS, rien d'autre.
{ "groups": { "group:ops": ["alice@example.com", "bob@example.com"], }, "tagOwners": { "tag:prod": ["group:ops"], }, "grants": [ { "src": ["group:ops"], "dst": ["tag:prod"], "ip": ["tcp:22", "tcp:443"], }, ],}L'effet est vérifiable. Dans le lab, après avoir tagué une machine en prod, une connexion vers le port autorisé aboutit, une connexion vers un port hors politique reste silencieusement bloquée :
# Port 443 (autorisé par le grant)nc -zv node-b 443 # node-b (100.64.0.2:443) open# Port 8000 (hors grant)nc -zv node-b 8000 # node-b (100.64.0.2:8000): Operation timed outVersionnez ce fichier dans Git : la politique devient revue en pull request et testable en CI, exactement comme du code d'infrastructure.
Étendre le réseau : subnet routers et exit nodes
Section intitulée « Étendre le réseau : subnet routers et exit nodes »Un subnet router expose un réseau local entier (une baie, un VLAN, un cloud) au tailnet, sans installer Tailscale sur chaque machine de ce réseau :
sudo tailscale up --advertise-routes=192.168.1.0/24La route annoncée doit ensuite être approuvée côté administration. Un exit node va plus loin : il route tout le trafic Internet d'un client à travers lui, utile pour sortir depuis une région précise ou sécuriser un poste sur un réseau hostile. Il faut d'abord activer le routage IP sur le nœud de sortie :
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-tailscale.confecho 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.confsudo sysctl -p /etc/sysctl.d/99-tailscale.confsudo tailscale up --advertise-exit-nodeCôté client, on choisit le nœud de sortie une fois approuvé :
sudo tailscale up --exit-node=node-bL'oubli du routage IP est la cause numéro un d'un exit node qui « se connecte mais ne donne pas Internet ». Vérifiez toujours sysctl net.ipv4.ip_forward (doit renvoyer 1).
Tailscale SSH, Serve et Funnel
Section intitulée « Tailscale SSH, Serve et Funnel »Tailscale SSH supprime la gestion des clés SSH : l'authentification s'appuie sur l'identité du tailnet et la politique. On l'active sur la machine cible, puis une règle ssh dans la politique décide qui peut se connecter et sous quelle identité :
sudo tailscale up --sshServe et Funnel exposent un service local. serve le rend accessible au sein du tailnet uniquement, avec HTTPS automatique ; funnel le publie sur l'Internet public :
tailscale serve 3000 # service privé, tailnet seulementtailscale funnel 3000 # service exposé publiquement, HTTPS automatiquefunnel est pratique pour un webhook ou une démo, mais c'est une exposition publique : réservez-la à des services conçus pour l'être, et préférez serve par défaut.
Reprendre le contrôle : Headscale, le coordination server souverain
Section intitulée « Reprendre le contrôle : Headscale, le coordination server souverain »C'est ici que se joue la souveraineté. Headscale est une implémentation open source (BSD-3) du coordination server : vous gardez les clients Tailscale officiels, mais vous pointez leur plan de contrôle vers votre propre serveur. Plus aucune dépendance à Tailscale Inc, et toutes les métadonnées restent sur votre infrastructure (région européenne, conformité RGPD). La version stable à la rédaction est v0.29.1.
On le déploie en conteneur. Le docker-compose.yml minimal :
services: headscale: image: headscale/headscale:0.29.1 command: serve restart: unless-stopped volumes: - ./config:/etc/headscale - ./lib:/var/lib/headscalePartez du fichier de configuration officiel de la version (le config-example.yaml du dépôt), et ne touchez qu'à l'essentiel : server_url (l'URL publique de votre Headscale), listen_addr, et base_domain pour MagicDNS (ce domaine doit différer de celui de server_url). On crée ensuite un utilisateur et une clé de pré-authentification :
-
Créer l'utilisateur :
Fenêtre de terminal docker compose exec headscale headscale users create equipe -
Générer une clé de pré-authentification réutilisable (l'identifiant de l'utilisateur s'obtient avec
headscale users list) :Fenêtre de terminal docker compose exec headscale headscale preauthkeys create --user 1 --expiration 1h --reusable -
Enregistrer un client en le pointant vers votre serveur :
Fenêtre de terminal sudo tailscale up --login-server=https://headscale.example.com --authkey <clé>
Le serveur voit alors ses nœuds, en ligne et joignables :
docker compose exec headscale headscale nodes listID | Name | User | IP address | Online1 | node-a | equipe | 100.64.0.1 | online2 | node-b | equipe | 100.64.0.2 | onlineHeadscale gère les grants, MagicDNS, les subnet routers (avec sonde de santé), les exit nodes, Tailscale SSH et les tags. La politique se gère en mode fichier (déclaratif, versionnable) en renseignant policy.path dans la configuration, puis en rechargeant le service. Deux limites à connaître : pas de console web officielle (des interfaces communautaires existent) et un projet encore en 0.x dont l'API n'est pas figée.
Et si on veut tout auto-héberger : NetBird
Section intitulée « Et si on veut tout auto-héberger : NetBird »Là où Headscale réutilise les clients Tailscale, NetBird est une plateforme mesh complète et indépendante : ses propres agents, son control plane, son interface web de gestion, son infrastructure de relais. Tout est open source et auto-hébergeable de bout en bout (version v0.73 à la rédaction). NetBird permet aussi de choisir son propre plan d'adressage (un network_range configurable, y compris hors du CGNAT), là où Headscale reste contraint au 100.64.0.0/10.
Le bon choix selon le besoin : Tailscale managé pour la simplicité, Headscale pour garder l'écosystème Tailscale avec un plan de contrôle souverain, NetBird pour une plateforme d'accès interne complète avec UI, SSO et plan d'adressage libre.
Sécurité et bonnes pratiques
Section intitulée « Sécurité et bonnes pratiques »La force de Tailscale est aussi sa surface de confiance : vous faites confiance au coordination server pour distribuer les bonnes clés publiques. Quelques réflexes réduisent le risque :
- Grants minimalistes versionnés en Git, segmentés par
group:ettag:, n'ouvrant que les ports nécessaires plutôt que*. - Expiration des clés activée (rotation forcée), avec device approval pour qu'aucun appareil ne rejoigne le réseau sans validation.
- Tailnet lock pour signer les nœuds et empêcher un control plane compromis d'injecter une machine pirate.
- Pour les besoins de souveraineté, control plane Headscale ou NetBird auto-hébergé en région européenne.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
tailscale status affiche relay au lieu de direct | NAT symétrique ou CGNAT | tailscale netcheck pour diagnostiquer ; la connexion reste fonctionnelle via DERP |
| Résolution DNS qui casse quand Tailscale monte | conflit MagicDNS avec systemd-resolved | passer à un client récent (v1.98+), vérifier /etc/resolv.conf |
| Exit node sans accès Internet | routage IP désactivé | sysctl net.ipv4.ip_forward doit valoir 1 |
| « ça ping mais le service ne répond pas » | trafic bloqué par un grant | revoir la politique : ping n'est pas filtré, le TCP oui |
| HTTPS lent sur lien PPPoE/tunnel | MTU trop élevé pour l'encapsulation WireGuard | réduire le MTU de l'interface en aval |
À retenir
Section intitulée « À retenir »- Tailscale crée un mesh WireGuard chiffré de bout en bout, sans ouvrir de port, avec traversée de NAT automatique (relais DERP en repli).
- MagicDNS résout les machines par leur nom ;
tailscale pingdistingue direct et relay. - Les grants (format 2026) imposent un accès zero-trust deny-by-default, vérifiable port par port et versionnable en Git.
- Subnet routers et exit nodes étendent le réseau ; les exit nodes exigent le routage IP (
ip_forward=1). - Headscale auto-héberge le coordination server pour la souveraineté ; NetBird est une alternative complète avec UI.
- Pièges récurrents : self-access des appareils d'un même utilisateur, et propagation de la netmap après un changement de politique.
FAQ : questions fréquentes sur Tailscale
Section intitulée « FAQ : questions fréquentes sur Tailscale »VPN mesh vs VPN classique
Tailscale est un VPN mesh (maillé), pas un VPN client-serveur classique.| Aspect | VPN classique | Tailscale |
|---|---|---|
| Architecture | Client → Serveur central | Peer-to-peer (mesh) |
| Trafic | Passe par le serveur | Direct entre machines |
| Point de défaillance | Serveur = SPOF | Aucun point central |
| Latence | Ajoutée par le serveur | Minimale (direct) |
| Protocole | OpenVPN, IPSec | WireGuard |
Comment ça fonctionne
- Control plane (Tailscale) : distribue les clés publiques et coordonne
- Data plane (vos machines) : trafic chiffré direct entre appareils
┌─────────┐ ┌─────────┐
│ Machine │ ◄─────► │ Machine │
│ A │ direct │ B │
└─────────┘ chiffré └─────────┘
▲ ▲
│ coordination │
└──────┬───────────┘
│
┌────────▼────────┐
│ Serveurs Tailscale │
│ (clés publiques) │
└─────────────────┘
Tailscale ne voit jamais vos données, seulement les métadonnées de coordination.Aucun port à ouvrir
Non, Tailscale ne nécessite aucun port entrant ouvert sur votre box ou pare-feu.Comment ça marche
Tailscale utilise uniquement des connexions sortantes et des techniques avancées de NAT traversal :| Technique | Rôle |
|---|---|
| STUN | Découvrir l'IP publique et le type de NAT |
| ICE | Négocier le meilleur chemin de connexion |
| UDP hole punching | Établir des connexions P2P à travers le NAT |
Si la connexion directe échoue
Si le NAT est trop restrictif (double NAT, CGNAT symétrique), Tailscale utilise des relais DERP :# Vérifier le type de connexion
tailscale status
# Diagnostic complet
tailscale netcheck
Ports utilisés (sortants uniquement)
| Port | Protocole | Usage |
|---|---|---|
| 41641 | UDP | Connexions WireGuard directes |
| 443 | TCP | Fallback HTTPS, coordination |
| 3478 | UDP | STUN |
Comparaison exit node vs subnet router
| Fonction | Subnet router | Exit node |
|---|---|---|
| Objectif | Accéder à un réseau privé | Router tout le trafic Internet |
| Routes | Sous-réseaux spécifiques (192.168.x.x) | Routes par défaut (0.0.0.0/0, ::/0) |
| Trafic concerné | Vers le LAN uniquement | Tout le trafic sortant |
| Cas d'usage | NAS, routeur, imprimante | Wi-Fi public, géo-restriction |
Subnet router
Permet d'accéder à des appareils sans Tailscale installé :# Sur la machine passerelle
sudo tailscale up --advertise-routes=192.168.1.0/24
Exit node
Fait transiter tout votre trafic Internet :# Sur le serveur (chez vous)
sudo tailscale up --advertise-exit-node
# Sur le client (en déplacement)
sudo tailscale up --exit-node=nom-serveur
Schéma
Subnet router : Exit node :
Vous ──► LAN privé Vous ──► Serveur ──► Internet
(192.168.x.x) (tout le trafic)
Les deux peuvent être combinés sur la même machine.Oui, Tailscale gère le CGNAT
CGNAT (Carrier-Grade NAT) est courant sur les connexions 4G/5G et certains FAI. Tailscale fonctionne dans la plupart des cas grâce à plusieurs techniques.Mécanismes de connexion
| Méthode | Priorité | Condition |
|---|---|---|
| Connexion directe | 1 | NAT permet UDP hole punching |
| Relais DERP | 2 | NAT trop restrictif |
Diagnostic
# Vérifier le type de NAT
tailscale netcheck
# Résultat typique derrière CGNAT
# UDP: true
# MappingVariesByDestIP: true ← NAT symétrique
Performances selon le NAT
| Type de NAT | Connexion directe | Performance |
|---|---|---|
| NAT simple (box standard) | Oui | Excellente |
| Double NAT | Souvent | Bonne |
| CGNAT endpoint-independent | Oui | Bonne |
| CGNAT symétrique | Non (via DERP) | Correcte |
Si DERP est utilisé
- Le trafic reste chiffré de bout en bout
- Latence légèrement augmentée
- Tailscale choisit le relais le plus proche
# Voir si DERP est utilisé
tailscale status
# relay "par" ← utilise le relais de Paris
Chiffrement de bout en bout garanti
Vos données sont toujours chiffrées de bout en bout avec WireGuard, quel que soit le chemin emprunté.Ce que Tailscale voit (et ne voit pas)
| Élément | Visible par Tailscale ? |
|---|---|
| Contenu des paquets | Non (chiffré WireGuard) |
| Clés privées | Non (restent sur vos appareils) |
| Clés publiques | Oui (pour la coordination) |
| IP des appareils | Oui (métadonnées) |
| Taille/timing des paquets | Oui (métadonnées) |
Schéma du chiffrement
┌──────────┐ ┌──────────┐
│ Machine A │ ══════════════════► │ Machine B │
│ (chiffre) │ paquets WireGuard │(déchiffre)│
└──────────┘ └──────────┘
│
▼
┌────────────┐
│ Relais DERP │
│ (ne voit que│
│ du chiffré) │
└────────────┘
Primitives cryptographiques
| Fonction | Algorithme |
|---|---|
| Chiffrement | ChaCha20 |
| Authentification | Poly1305 |
| Échange de clés | Curve25519 |
| Handshake | Noise Protocol |
Vérification
# Voir les clés publiques échangées
tailscale status --json | jq '.Peer[].PublicKey'
Même Tailscale Inc. ne peut pas déchiffrer votre trafic.WireGuard = protocole, Tailscale = solution complète
WireGuard est le protocole VPN sous-jacent. Tailscale ajoute une couche de gestion et d'automatisation.Comparaison détaillée
| Aspect | WireGuard pur | Tailscale |
|---|---|---|
| Configuration | Manuelle (clés, IP, endpoints) | Automatique |
| Authentification | Clés publiques à distribuer | SSO (Google, Microsoft, GitHub...) |
| NAT traversal | À gérer soi-même | Intégré (STUN, DERP) |
| DNS | À configurer | MagicDNS automatique |
| ACL | Via firewall local | Centralisées dans la console |
| Gestion | Fichiers de config | Console web + API |
| Ajout d'appareil | Modifier tous les peers | Un clic |
Configuration WireGuard manuelle
# /etc/wireguard/wg0.conf (à créer sur CHAQUE machine)
[Interface]
PrivateKey = <clé_privée>
Address = 10.0.0.1/24
[Peer]
PublicKey = <clé_publique_autre_machine>
Endpoint = <ip_publique>:51820
AllowedIPs = 10.0.0.2/32
Avec Tailscale
# Installation + configuration complète
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
Quand choisir quoi ?
- WireGuard pur : contrôle total, pas de dépendance externe, peu de machines
- Tailscale : simplicité, nombreuses machines, NAT complexe, équipe non-technique
Modèle de sécurité Tailscale
Par défaut, tous les appareils d'un tailnet peuvent communiquer. Les ACL permettent un contrôle granulaire.Concepts clés
| Concept | Description | Exemple |
|---|---|---|
| Tag | Label sur une machine | tag:server, tag:db |
| Groupe | Ensemble d'utilisateurs | group:devs, group:admins |
| Autogroup | Groupe automatique | autogroup:member |
Structure d'une ACL
{
"groups": {
"group:admins": ["alice@example.com"],
"group:devs": ["bob@example.com", "carol@example.com"]
},
"tagOwners": {
"tag:server": ["group:admins"],
"tag:web": ["group:devs"]
},
"acls": [
{"action": "accept", "src": ["group:admins"], "dst": ["*:*"]},
{"action": "accept", "src": ["group:devs"], "dst": ["tag:web:80,443"]},
{"action": "accept", "src": ["tag:server"], "dst": ["tag:db:5432"]}
]
}
Exemples de règles
| Règle | Signification |
|---|---|
src: ["*"], dst: ["*:*"] |
Tout le monde accède à tout |
src: ["tag:admin"], dst: ["*:22"] |
Admins → SSH partout |
src: ["group:devs"], dst: ["tag:web:80,443"] |
Devs → serveurs web HTTP/S |
Appliquer un tag
# Via CLI
sudo tailscale up --advertise-tags=tag:server
# Ou via la console : Machines → Edit tags
Tester les ACL
Utilisez le bouton Preview dans la console avant de sauvegarder.Tailscale SSH vs OpenSSH classique
Tailscale SSH est une couche d'authentification qui utilise votre identité Tailscale au lieu de clés SSH traditionnelles.Comparaison
| Aspect | OpenSSH classique | Tailscale SSH |
|---|---|---|
| Authentification | Clés SSH (~/.ssh/authorized_keys) | Compte Tailscale (SSO) |
| Gestion des clés | Manuelle sur chaque machine | Centralisée (ACL) |
| Port exposé | 22 (ou autre) | Uniquement via Tailscale |
| Audit | Logs locaux | Console Tailscale |
| Session recording | Non natif | Oui (Enterprise) |
Comment ça fonctionne
┌────────────┐ Tailscale ┌────────────┐
│ Client │ ───────────────► │ Serveur │
│ ssh user@ │ (port 22 via │ Tailscale │
│ machine │ tailscaled) │ SSH │
└────────────┘ └────────────┘
Activation
# Sur le serveur
sudo tailscale up --ssh
# Configuration ACL (console)
{
"ssh": [
{"action": "accept", "src": ["group:admins"], "dst": ["tag:server"], "users": ["root", "autogroup:nonroot"]}
]
}
Quand l'utiliser ?
| Situation | Recommandation |
|---|---|
| Équipe avec turnover | Oui (gestion centralisée) |
| Audit/compliance requis | Oui (logs centralisés) |
| Homelab personnel | Optionnel (clés SSH suffisent) |
| Accès temporaire | Oui (révocation facile) |
Ce qui ne change pas
sshdtourne toujours (sauf si vous le désactivez)- Vos clés SSH existantes fonctionnent toujours
/etc/ssh/sshd_confign'est pas modifié
Qu'est-ce que MagicDNS ?
MagicDNS attribue automatiquement un nom DNS à chaque machine de votre tailnet.Sans vs Avec MagicDNS
| Sans MagicDNS | Avec MagicDNS |
|---|---|
ssh user@100.64.0.1 |
ssh user@serveur |
ping 100.64.0.2 |
ping laptop |
| Mémoriser les IP | Utiliser des noms |
Format des noms
<hostname>.<tailnet-name>.ts.net
Exemple : mon-serveur.tail1234.ts.netAvec MagicDNS, le suffixe est optionnel : mon-serveur suffit.Activation
- Connectez-vous à la console Tailscale
- Section DNS
- Cliquez Enable MagicDNS
Configuration avancée
| Option | Usage |
|---|---|
| Global nameservers | DNS pour les requêtes hors tailnet |
| Split DNS | Domaines spécifiques vers DNS internes |
| Override local DNS | Forcer MagicDNS même si DNS local existe |
Vérification
# Voir les noms des machines
tailscale status
# Tester la résolution
ping mon-serveur
# Voir la config DNS
tailscale dns status
Renommer une machine
- Console → Machines → cliquer sur la machine
- Edit machine name
- Le nouveau nom est propagé automatiquement
Problèmes courants et solutions
| Symptôme | Cause probable | Diagnostic | Solution |
|---|---|---|---|
| Subnet route ne marche pas | IP forwarding désactivé | sysctl net.ipv4.ip_forward |
Activer avec sysctl -w net.ipv4.ip_forward=1 |
| Route non visible | Non approuvée | Console → Machines | Approuver la route |
| MagicDNS ne résout pas | Désactivé | tailscale dns status |
Activer dans Console → DNS |
| Connexion via DERP | NAT restrictif | tailscale netcheck |
Normal, trafic reste chiffré |
| Machine invisible | Non autorisée | Console → Machines | Approuver l'appareil |
| Latence élevée | Relais distant | tailscale ping <machine> |
Vérifier géolocalisation DERP |
Commandes de diagnostic
# État général
tailscale status
# Diagnostic réseau complet
tailscale netcheck
# Ping avec détails (direct vs DERP)
tailscale ping <nom-machine>
# Voir les routes actives
tailscale status --json | jq '.Peer[].AllowedIPs'
# Logs détaillés
journalctl -u tailscaled -f
# Générer un rapport de bug
tailscale bugreport
Checklist de dépannage
- Machine visible ? →
tailscale status - Routes approuvées ? → Console admin
- IP forwarding ? →
sysctl net.ipv4.ip_forward - Firewall local ? →
iptables -Louufw status - DNS fonctionne ? →
tailscale dns status - Connexion directe ? →
tailscale ping <machine>
Réinitialisation si besoin
# Déconnecter et reconnecter
sudo tailscale down
sudo tailscale up
# Réinstallation complète (dernier recours)
sudo tailscale logout
sudo tailscale up