Tailscale sur VPS OVH avec exit node : le tuto complet de A à Z

Mesh VPN basé sur WireGuard, sans port forwarding et zéro config manuelle : install Tailscale sur un VPS, transformation en exit node, ACLs, Tailscale SSH et optimisations UDP GRO — un tuto complet pour remplacer ton WireGuard manuel.

Tailscale sur VPS OVH avec exit node : le tuto complet de A à Z

Si tu galères encore avec une config WireGuard manuelle pour relier ton VPS à ton laptop, ton mobile et ta box, c'est qu'il est temps d'essayer Tailscale. Pas de génération de clés à la main, pas de fichier wg0.conf à pousser sur chaque machine, pas d'ouverture de port public — juste un binaire à installer et un compte. Sous le capot, c'est WireGuard. Au-dessus, une couche de coordination qui rend tout simple.

Dans ce tuto, je t'emmène de A à Z : compte Tailscale, install sur un VPS OVH (Rocky Linux 9 / Ubuntu 24), passage en exit node pour faire transiter tout ton trafic Internet par le VPS, optimisations performance, et bonus Tailscale SSH pour virer tes clés OpenSSH.

Pourquoi Tailscale plutôt qu'un WireGuard manuel

WireGuard pur, c'est rapide et solide, mais la gestion de clés, des peers et des routes scale très mal quand tu dépasses 3 machines. Tailscale apporte trois choses qui changent la donne :

  • Mesh dynamique — chaque appareil parle directement aux autres en peer-to-peer (NAT traversal automatique via DERP relays Tailscale en fallback). Pas de hub central qui devient le goulot d'étranglement.
  • Identité plutôt qu'IP — les ACLs s'écrivent en JSON sur des utilisateurs, des groupes et des tags, pas sur des plages d'IP qui bougent.
  • Zero port forwarding — tes machines sortent en UDP, jamais besoin d'ouvrir un port entrant sur ton firewall ou ta box.

Le plan gratuit autorise jusqu'à 100 appareils et 3 utilisateurs, largement de quoi couvrir un usage perso ou un homelab sérieux.

Création du compte Tailscale

Direction tailscale.com et clique sur Get started — it's free! en haut à droite.

Page d'accueil tailscale.com avec le bouton Get started

Tu arrives sur l'écran de connexion. Tailscale n'a pas de système de mot de passe maison — tu te logges via un fournisseur d'identité existant (Google, Microsoft, GitHub, Apple, ou passkey). Choisis celui que tu utilises déjà, ça créera ton tailnet automatiquement.

Page de connexion Tailscale avec les options Google, Microsoft, GitHub, Apple et passkey

Une fois loggé, tu atterris sur l'admin console à login.tailscale.com/admin/machines. Pour l'instant la liste est vide — on va y remédier.

Installation de Tailscale sur le VPS

Connecte-toi en SSH à ton VPS OVH. La méthode universelle qui marche sur Debian, Ubuntu, Rocky, AlmaLinux et Fedora :

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

Le script détecte ta distrib, ajoute le repo officiel et installe le paquet tailscale. Si tu préfères ne pas exécuter un script distant, tu peux le faire à la main. Sur Rocky / Alma 9 :

sudo dnf config-manager --add-repo https://pkgs.tailscale.com/stable/rhel/9/tailscale.repo
sudo dnf install -y tailscale
sudo systemctl enable --now tailscaled

Sur Ubuntu 24.04 :

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
sudo apt update && sudo apt install -y tailscale

Vérifie que le démon tourne :

systemctl status tailscaled --no-pager

Première connexion et authentification

Lance la connexion à ton tailnet :

sudo tailscale up

Le binaire affiche une URL du type https://login.tailscale.com/a/xxxxxxxxxxxx. Copie-la et ouvre-la dans le navigateur de ta machine perso (déjà loggée à Tailscale). Tu valides l'ajout du VPS au tailnet en un clic. Retour à la console admin : ton VPS apparaît avec une IP 100.x.y.z dans la plage CGNAT réservée Tailscale.

Récupère ton IP Tailscale et le statut :

tailscale ip -4
tailscale status

Côté firewall OVH : tu n'as rien à ouvrir en entrant. Tailscale sort en UDP/41641 (ou utilise un relay DERP en HTTPS si la sortie UDP est bloquée). Si tu utilises firewalld :

sudo firewall-cmd --permanent --add-port=41641/udp
sudo firewall-cmd --reload

Ce n'est pas obligatoire mais ça améliore les chances d'établir un lien P2P direct au lieu de passer par un DERP.

Configurer le VPS en exit node

Un exit node, c'est une machine de ton tailnet qui accepte de relayer tout le trafic Internet d'autres machines. Concrètement : ton laptop en café public route 100% de son trafic via le tunnel chiffré Tailscale → VPS OVH → Internet. Ton IP publique apparente devient celle du VPS, et le wifi du café ne voit qu'un flux WireGuard chiffré.

Étape 1 — Activer l'IP forwarding sur le VPS :

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /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

Étape 2 — Annoncer le VPS comme exit node :

sudo tailscale set --advertise-exit-node

Étape 3 — Approuver la route dans la console admin. Va sur login.tailscale.com/admin/machines, repère ton VPS dans la liste (badge Exit Node jaune à côté du nom). Clique sur le menu trois points à droite de la ligne → Edit route settings → coche Use as exit nodeSave. Le badge passe du jaune (en attente) au vert.

Activer l'exit node depuis tes clients

Sur n'importe quel client Tailscale (Linux, Windows, macOS, iOS, Android), tu choisis quel exit node utiliser, ou pas du tout. Sur le client Linux :

tailscale exit-node list
sudo tailscale set --exit-node=<nom-du-vps> --exit-node-allow-lan-access=true

Le flag --exit-node-allow-lan-access évite de couper l'accès aux ressources de ton LAN local (imprimante, NAS) pendant que ton trafic Internet sort par le VPS.

Sur Windows et macOS, l'app Tailscale dans la barre des tâches affiche Exit node → ton-vps dans le menu déroulant. Sur mobile, idem dans l'app : un toggle dédié.

Vérifie que ça marche :

curl -s https://api.ipify.org
# doit afficher l'IP publique de ton VPS, pas celle de ton FAI

Désactiver l'expiration de la clé pour un serveur

Par défaut, Tailscale expire les clés des appareils tous les 180 jours pour des raisons de sécurité. Sur un serveur que tu ne vas pas reconnecter manuellement, c'est un piège — un beau matin ton exit node devient injoignable parce que la clé a expiré. Désactive l'expiration sur ce nœud :

Console admin → Machines → ligne du VPS → menu trois points → Disable key expiry. Le badge "expires in X days" disparaît. À ne faire que sur des serveurs de confiance, jamais sur un laptop perso.

Optimisation performance : UDP GRO offload

Sur un kernel Linux 6.2+ et Tailscale 1.54+, tu peux gagner significativement en throughput en activant le UDP GRO (Generic Receive Offload) sur ton interface réseau. Sur un VPS OVH avec un kernel récent, c'est applicable :

NETDEV=$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")
sudo ethtool -K $NETDEV rx-udp-gro-forwarding on rx-gro-list off

Pour rendre ça persistant après reboot via networkd-dispatcher (Ubuntu/Debian) :

printf '#!/bin/sh\n\nethtool -K %s rx-udp-gro-forwarding on rx-gro-list off\n' "$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")" | sudo tee /etc/networkd-dispatcher/routable.d/50-tailscale
sudo chmod 755 /etc/networkd-dispatcher/routable.d/50-tailscale

Sur Rocky/Alma sans networkd-dispatcher, place les commandes dans /etc/rc.local ou un service systemd custom déclenché à network-online.target.

Bonus : Tailscale SSH (zéro clé OpenSSH à gérer)

Tailscale embarque son propre serveur SSH qui s'appuie sur les clés WireGuard et les ACLs du tailnet. Plus de ~/.ssh/authorized_keys à synchroniser, plus de rotation de clés, et l'auth est gérée par ton IdP. Active-le sur le VPS :

sudo tailscale set --ssh

Côté ACLs (Console admin → Access Controls), une règle minimale qui autorise tous les membres du tailnet à se SSH chez eux :

{
  "ssh": [
    {
      "action": "accept",
      "src": ["autogroup:member"],
      "dst": ["autogroup:self"],
      "users": ["autogroup:nonroot", "root"]
    }
  ]
}

Tu peux maintenant te connecter sans clé SSH classique :

ssh root@<nom-du-vps>
# auth gérée par Tailscale, pas par OpenSSH

Tu peux laisser ton OpenSSH tourner en parallèle (sur le port 22 standard, accessible depuis Internet) — ou mieux, le binder uniquement sur l'IP Tailscale du VPS pour le rendre invisible depuis Internet.

Vérifications et troubleshooting

Quelques commandes à connaître quand ça part en vrille :

  • tailscale status — état des peers, type de connexion (direct/relay) et latence
  • tailscale netcheck — diagnostic réseau, NAT type, DERP le plus proche
  • tailscale ping <peer> — vérifie que le P2P passe (sinon ça relay via DERP)
  • journalctl -u tailscaled -f — logs du démon en temps réel
  • sudo tailscale down && sudo tailscale up — reset propre de la session sans purger l'auth

Si tailscale ping indique via DERP au lieu de direct, c'est probablement que ton port UDP/41641 sortant est filtré ou que tu es derrière un CGNAT symétrique. Le DERP marche, c'est juste un peu plus lent (les paquets transitent par les serveurs Tailscale au lieu d'aller direct).

Liens utiles