Accès distant sécurisé à son NAS avec Tailscale
- Publié le
- ·6 min de lecture
Le problème : vouloir accéder à son NAS de loin
J'ai une vingtaine de services sur mon NAS - Jellyfin, Immich, Home Assistant, dashboards de monitoring. Tous accessible localement sans problème. Mais dès que je suis en déplacement chez un client, en vacances, ou au café, tout devient inaccessible.
La solution classique que je ne veux surtout pas : ouvrir des ports sur la box, configurer du port forwarding, mettre en place un DNS dynamique, et prier qu'aucun bot ne trouve tes services exposés. Bof, non merci.
VPN classique vs Tailscale
Un VPN auto-hébergé classique (OpenVPN, WireGuard natif), ça demande :
- Ouvrir au moins un port UDP sur le routeur
- Configurer du port forwarding vers le serveur VPN
- Gérer un DNS dynamique si l'IP change
- Maintenir le serveur VPN, ses certificats, ses clés
- Configurer manuellement chaque client
Tailscale prend une approche radicalement différente. C'est un VPN mesh basé sur WireGuard qui crée des tunnels point-à-point entre appareils. Zéro serveur central à maintenir et surtout zéro port ouvert sur le routeur.
Les connexions se font via NAT traversal (STUN/DERP) : Tailscale trouve le chemin le plus direct entre deux appareils, même derrière du double NAT. Quand c'est impossible, le trafic passe par des relais (DERP servers), mais reste chiffré de bout en bout.
Installation via Ansible
Comme tout sur le NAS, Tailscale passe par Ansible. Variables clés :
# group_vars/nas.yml (extrait Tailscale)
tailscale_auth_key: 'tskey-auth-xxxxx' # clé d'authentification (vault)
tailscale_subnet_router: true
tailscale_advertised_routes: '192.168.1.0/24'
tailscale_exit_node: true
tailscale_accept_dns: true
Le rôle Ansible installe, authentifie, configure. L'installation concrète :
# Ce que le rôle Ansible fait
curl -fsSL https://tailscale.com/install.sh | sh
# Activation avec les options
sudo tailscale up \
--authkey=tskey-auth-xxxxx \
--advertise-routes=192.168.1.0/24 \
--advertise-exit-node \
--accept-dns
Subnet router : exposer tout le LAN
C'est la feature la plus puissante. En activant le subnet routing, le NAS devient une passerelle qui expose tout le réseau local (192.168.1.0/24) aux appareils Tailscale.
Concrètement, depuis mon téléphone en 4G avec Tailscale actif, j'accède à :
- Tous les services du NAS par leur IP locale (192.168.1.50:8096 pour Jellyfin, etc.)
- Les autres appareils du LAN : imprimante réseau, caméras IP, hub domotique
- Les interfaces d'administration : la box internet, les switches managés
C'est transparent. Les apps se comportent exactement comme si j'étais sur le réseau local. Jellyfin sur mon téléphone se connecte à la même adresse qu'à la maison.
Pour que ça marche, faut activer l'IP forwarding sur le NAS :
# /etc/sysctl.d/99-tailscale.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
Et approuver les routes dans la console Tailscale (ou via tailscale set avec les ACLs).
Exit node : navigation sécurisée
L'exit node c'est une feature complémentaire : activée sur un client, tout le trafic internet de l'appareil passe via le NAS. Le NAS devient ton proxy de sortie.
Utile sur les réseaux WiFi publics miteux - hôtels, cafés, aéroports. Au lieu de faire confiance au réseau local, tout le trafic est chiffré dans le tunnel WireGuard jusqu'au NAS, puis sort par ta connexion maison.
Activation côté client? Toggle dans l'app Tailscale : tu choisis le NAS comme exit node, c'est fait. Tu peux activer/désactiver à la demande selon le réseau.
Cas d'usage réels
Depuis que Tailscale tourne :
- Jellyfin en déplacement : regarder mes films/séries de partout, sans exposer le port 8096 à internet
- Immich depuis le téléphone : backup auto des photos, consultation de la bibli hors de la maison
- SSH d'urgence : connexion au NAS depuis le PC portable chez un client pour dépanner rapidement
- Dashboards internes : consulter Homepage, Uptime Kuma, Scrutiny sans les rendre publics
- WiFi public sécurisé : activer l'exit node à l'hôtel pour naviguer via ma connexion maison
MagicDNS : des noms au lieu des IPs
Tailscale intègre un DNS interne appelé MagicDNS. Au lieu de retenir que le NAS est à 100.64.x.y sur Tailscale, tu accèdes par hostname :
ssh nasadmin@nas.tail1234.ts.net
MagicDNS résout automatiquement les noms des machines du tailnet. Couplé avec le subnet routing, tu gardes l'accès par IP locale pour les services Docker, et le hostname Tailscale pour SSH.
Vérifier l'état
La commande tailscale status donne une vue d'ensemble :
$ tailscale status
100.64.1.1 nas francois@ linux active; direct 192.168.1.50:41641
100.64.1.2 laptop francois@ linux active; direct 82.66.x.x:38412
100.64.1.3 pixel8 francois@ android active; relay "par"
100.64.1.4 macbook-pro francois@ macOS idle; offline
Tu vois immédiatement quels appareils sont connectés, si c'est en connexion directe ou relay, et leur état. Le téléphone ici via un relay DERP à Paris - pas de connexion directe possible, mais trafic chiffré de bout en bout.
Intégration avec le pare-feu
Point important : Tailscale utilise sa propre interface (tailscale0) et n'est pas affecté par les règles UFW. Le trafic Tailscale arrive déjà déchiffré sur tailscale0, puis accède aux services localement. C'est pour ça que les services restreints au LAN restent accessibles via Tailscale - le trafic arrive comme du trafic local.
Pas besoin de toucher aux règles de pare-feu existantes. Gros avantage sur un VPN classique où il faut souvent ajouter des règles pour le sous-réseau VPN.
Tailscale vs WireGuard auto-hébergé
Tailscale est basé sur WireGuard, mais la comparaison est instructive :
| WireGuard natif | Tailscale | |
|---|---|---|
| Port ouvert sur le routeur | Oui (UDP) | Non |
| DNS dynamique | Nécessaire | Intégré (MagicDNS) |
| Gestion des clés | Manuelle | Automatique |
| NAT traversal | Non | Oui |
| Subnet routing | Config manuelle | Toggle dans l'admin |
| Multi-utilisateurs + ACLs | Complexe | Intégré |
| Dépendance externe | Aucune | Tailscale (SaaS) |
Le tradeoff avec Tailscale c'est la dépendance au service Tailscale pour la coordination (pas pour le trafic, qui reste point-à-point). Compromis que j'accepte volontiers vu la simplification apportée.
Performances
WireGuard c'est connu pour les perfs exceptionnelles - bien mieux qu'OpenVPN ou IPSec. L'overhead est minimal : en pratique, tu atteins des débits proches du natif. Sur ma fibre, zéro différence perceptible entre un accès local et un accès Tailscale en connexion directe. Seul le passage par un relay DERP ajoute de la latence, mais c'est rare.
Résumé
Tailscale a fondamentalement changé comment j'accède à mon NAS. Plus de ports ouverts, plus de DNS dynamique, plus de VPN complexe à maintenir. J'installe l'app sur un appareil, je me connecte, et j'ai accès à tout mon réseau local comme si j'étais chez moi. C'est la solution que je recommande à quiconque auto-héberge et veut accéder de loin sans compromettre la sécurité.