J'ai monté un exit node Tailscale sur un Hetzner CX11 à Frankfurt en mars 2026. Budget : 3,79 €/mois. Résultat : 18 ms de latence depuis Paris, 680 Mbps de débit mesuré, et un tunnel WireGuard chiffré dont je contrôle chaque paramètre. Ce guide donne les commandes exactes qu'on utilise en production — pas de résumé de documentation, pas de screenshot flou.
Qu'est-ce qu'un exit node Tailscale et pourquoi c'est différent d'un VPN classique
Un exit node Tailscale est un nœud de ton mesh Tailscale configuré pour router tout le trafic Internet des autres nœuds vers sa propre connexion. En pratique : tu actives cette option sur ton VPS Frankfurt, et tous tes appareils (laptop Paris, iPhone, iPad) sortent sur Internet avec l'IP de ce VPS.
La différence avec un VPN commercial comme NordVPN est architecturale :
- VPN commercial : infrastructure partagée entre des milliers d'utilisateurs. Tu ne contrôles ni le serveur, ni la politique de logs, ni la configuration.
- WireGuard nu self-host : tunnel point-à-point entre chaque client et le serveur. Excellent pour un seul tunnel, mais dès que tu as 4 appareils, tu configures 4 paires de clés manuellement.
- Tailscale exit node : mesh WireGuard géré automatiquement. Le control plane Tailscale orchestre les clés, le NAT traversal et les ACLs. Tu désignes un nœud comme exit node en une commande, tous les autres l'utilisent sans reconfiguration.
Le data plane reste WireGuard pur — aucune entreprise ne voit ton trafic payload. Seul Tailscale Inc. voit les métadonnées de ton mesh (qui parle à qui, quand), ce qui est documenté dans leur politique de confidentialité.
Pour un comparatif exhaustif des approches, voir notre article meilleur VPN auto-hébergement 2026 et pour le détail Tailscale vs WireGuard nu, Tailscale vs WireGuard self-host.
Prérequis
Avant de démarrer, tu as besoin de :
- Un compte Tailscale — plan Free suffisant pour 1 exit node. Créer sur tailscale.com.
- Un serveur Linux — Ubuntu 24.04 LTS recommandé (support 5 ans). Peut aussi être un Mac ou Raspberry Pi.
- Connexion stable >= 100 Mbps — pour un usage solo ou famille. Pour du multi-utilisateurs simultanés, viser >= 500 Mbps.
- IP publique dédiée — incluse par défaut chez Hetzner, Contabo, OVH.
- Accès root ou sudo sur le serveur.
Ce guide suppose Ubuntu 24.04 LTS. Les commandes sont identiques sur Debian 12, légèrement différentes sur CentOS/RHEL (dnf au lieu d'apt).
Choisir la plateforme exit node
| Fournisseur | Prix | Réseau | Localisation | Verdict |
|---|---|---|---|---|
| Hetzner CX11 | 3,79 €/mois | 20 TB inclus, 1 Gbps | Frankfurt / Helsinki / Ashburn | Meilleur rapport qualité-prix EU |
| Contabo VPS S | 4,99 €/mois | 32 TB inclus, 200 Mbps | Nuremberg / NYC / Singapore | Bon si déjà client Contabo |
| OVH VPS Starter | 3,59 €/mois | trafic illimité, 100 Mbps | Gravelines / Strasbourg | Bon pour latence France, réseau limité |
| AWS EC2 t2.micro | 0 € (12 mois) | 15 GB/mois inclus | Région au choix | Free tier, mais 15 GB suffit à peine pour usage continu |
| Raspberry Pi 5 (home) | ~0 € (matériel seul) | Dépend box FAI | Ton réseau personnel | Idéal pour LAN access — IP FAI souvent dynamique |
Notre choix en production : Hetzner CX11 Frankfurt pour le bench latence Paris. Le réseau Hetzner est parmi les meilleurs d'Europe pour les RTT. Raspberry Pi 5 en secondaire pour accès LAN domicile.
Point attention Contabo : leur réseau est annoncé à 200 Mbps mais en pratique throttlé à 100 Mbps en pic d'utilisation sur l'entrée de gamme. Pour un exit node famille, prendre VPS M Cloud à 200 Mbps garanti.
Installation pas à pas sur Ubuntu 24.04 LTS
1. Installer Tailscale
Tailscale publie un script officiel d'installation via leur dépôt APT :
# Ajouter la clé GPG et le dépôt
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg \
| sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.tailscale-keyring.list \
| sudo tee /etc/apt/sources.list.d/tailscale.list
# Installer
sudo apt-get update
sudo apt-get install -y tailscale
# Vérifier la version (juin 2026 : v1.68+)
tailscale version
2. Activer l'IP forwarding
Sans cette étape, le nœud ne peut pas router le trafic des clients vers Internet. C'est l'équivalent du masquerade WireGuard :
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
Vérification :
sysctl net.ipv4.ip_forward
# Doit retourner : net.ipv4.ip_forward = 1
3. Authentifier et advertiser l'exit node
sudo tailscale up --advertise-exit-node
Tailscale affiche une URL dans le terminal :
To authenticate, visit:
https://login.tailscale.com/a/xxxxxxxxxxxxxxxx
Ouvre cette URL dans ton navigateur, connecte-toi avec ton compte Tailscale. Le nœud apparaît dans ta liste de machines.
Note : si tu veux pré-authentifier sans interaction (script CI/CD), utilise une auth key : sudo tailscale up --advertise-exit-node --authkey=tskey-auth-xxxxx.
4. Approuver dans la console admin
Par défaut, Tailscale requiert une approbation manuelle des exit nodes (sécurité). Sur login.tailscale.com/admin/machines :
- Trouve ton nœud (ex :
hetzner-cx11-fra) - Clique sur
(...)→ Edit route settings - Coche Use as exit node
- Clique Save
Le nœud est maintenant disponible comme exit node pour tous les membres de ton tailnet.
Alternative : désactiver l'approbation manuelle globalement dans Admin → Settings → Disable exit node approval requirement. Pratique pour un tailnet perso solo.
5. Vérifier l'état
tailscale status
# Le nœud doit apparaître comme "offers exit node"
sudo tailscale ping nom-du-noeud
# Doit retourner un RTT
Configuration client
macOS
- Installer Tailscale depuis le Mac App Store ou
brew install tailscale - Lancer Tailscale depuis la barre de menus
- Se connecter avec le même compte
- Clic sur l'icône Tailscale → Exit node → sélectionner ton nœud
- Vérifier :
curl ifconfig.me— l'IP affichée doit être celle du VPS
LAN access : par défaut quand un exit node est actif, le trafic local (192.168.x.x) passe aussi par le tunnel. Pour garder l'accès LAN direct : clic Tailscale → Allow LAN access.
Windows
- Télécharger depuis tailscale.com/download/windows
- Clic droit icône systray → Exit node → sélectionner le nœud
- Confirmer la demande d'élévation UAC
iOS et Android
- Installer l'app Tailscale depuis App Store / Play Store
- Se connecter au tailnet
- Aller dans Settings (iOS) ou icône roue dentée (Android) → Use exit node → sélectionner
Sur iOS, Tailscale s'intègre via Network Extension — pas besoin de jailbreak. La connexion survit aux transitions WiFi/4G.
Linux CLI
# Sélectionner l'exit node (par nom ou IP Tailscale)
sudo tailscale set --exit-node=hetzner-cx11-fra
# Ou par IP Tailscale (100.x.y.z)
sudo tailscale set --exit-node=100.64.0.1
# Désactiver
sudo tailscale set --exit-node=
# Vérifier
tailscale status | grep "exit node"
Optimisations et troubleshooting
Performance : vérifier le type de connexion
Tailscale privilégie le tunnel WireGuard direct (NAT traversal). Si les deux nœuds ne peuvent pas se voir directement (NAT strict, CGNAT), le trafic passe par un DERP relay — plus lent d'environ 30-40 % :
tailscale netcheck
# Affiche quel relay est utilisé et si le direct est possible
tailscale ping nom-du-noeud
# "pong from ... via DERP(fra)" = relay
# "pong from ... via 1.2.3.4:41641" = direct (préférable)
Si tu es en relay alors que les deux machines ont des IPs publiques, vérifier l'UFW :
sudo ufw allow 41641/udp comment "Tailscale WireGuard"
sudo ufw allow 3478/udp comment "Tailscale STUN"
DNS : fuites après activation exit node
Tailscale pousse ses propres DNS (MagicDNS) mais laisse parfois filtrer les DNS du système. Test :
# Depuis le client avec exit node actif
dig +short whoami.cloudflare.com TXT @1.1.1.1
# L'IP retournée doit être celle du VPS, pas ta vraie IP
Si ta vraie IP fuit : sur macOS, désactiver et réactiver l'exit node. Sur Linux :
sudo tailscale set --exit-node=hetzner-cx11-fra
sudo resolvectl flush-caches
MTU et fragmentation
WireGuard réduit le MTU effectif de ~60 bytes (overhead tunnel). Sur certains liens, ça provoque des coupures avec les gros paquets (vidéo, SSH sessions longues). Fix :
# Sur le serveur exit node
sudo ip link set tailscale0 mtu 1280
# Rendre permanent dans /etc/systemd/network/ ou via script rc.local
Kernel routing : performances avancées
Sur le serveur, activer le BBR congestion control pour un meilleur débit :
echo 'net.core.default_qdisc = fq' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv4.tcp_congestion_control = bbr' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
Gain mesuré sur notre bench Hetzner : +12 % de débit moyen sur une connexion saturée.
Sécurité et considérations privacy
Ce que Tailscale Inc. voit
Tailscale voit les métadonnées du control plane uniquement :
- Adresses IP Tailscale (100.x.y.z) de tes nœuds
- Timestamps des handshakes WireGuard
- Noms des machines enregistrées dans ton tailnet
Tailscale ne voit jamais :
- Le contenu de ton trafic (chiffré WireGuard de bout en bout)
- Tes requêtes DNS (si MagicDNS désactivé et DNS resolver externe)
- Les sites que tu visites
Le data plane est WireGuard pur. Le code client est open source.
ACLs sur le plan Free
Le plan Free propose des ACLs JSON basiques pour contrôler quels nœuds peuvent parler à quels autres. Exemple minimal pour restreindre l'exit node à ton propre device :
{
"acls": [
{
"action": "accept",
"src": ["tag:personal"],
"dst": ["tag:exit-node:*"]
}
],
"tagOwners": {
"tag:exit-node": ["autogroup:admin"],
"tag:personal": ["autogroup:admin"]
}
}
DERP relays : juridiction
Quand le trafic passe par un DERP relay (cas NAT strict), il transite par l'infrastructure Tailscale. Les relays EU sont en Allemagne et aux Pays-Bas. Si la juridiction compte, tu peux déployer ton propre DERP relay — guide dans la doc officielle Tailscale.
Logs côté serveur
Par défaut Ubuntu génère des logs kernel via journald pour les connexions WireGuard. Si tu veux zéro logs :
sudo journalctl --vacuum-time=1s
# Puis désactiver le logging kernel WireGuard
echo 'module wireguard +p' | sudo tee /sys/kernel/debug/dynamic_debug/control
Pour approfondir l'architecture Tailscale vs control plane self-host, voir notre comparatif Tailscale vs Headscale. Et pour les templates WireGuard nu sans overhead Tailscale : WireGuard config templates 2026.
En résumé : un exit node Tailscale sur Hetzner CX11 (3,79 €/mois) donne un tunnel VPN mesh entièrement sous ton contrôle, 18 ms Paris-Frankfurt, 680 Mbps de débit et zéro frais de bande passante jusqu'à 20 TB/mois. Le plan Free suffit pour un usage perso ou familial (jusqu'à 3 users). La configuration prend 20 minutes, commandes incluses dans ce guide.
★ Datacenter Nuremberg GDPR · ✓ IPv4 dédiée incluse · 200+ Mbps garantis
Voir l'offre Contabo30 jours satisfait ou remboursé→