Samba - Accès à mes disques durs externes en réseau (local + Tailscale)
🎯 Objectif
Rendre deux disques durs externes branchés sur le homeserver accessibles comme un partage réseau classique (façon NAS), depuis le réseau local et depuis n’importe où via Tailscale.
🐳 Le service Samba
Le partage tourne dans un conteneur Docker basé sur l’image dperson/samba.
docker-compose.yml
services:
samba:
image: dperson/samba
container_name: samba
restart: unless-stopped
ports:
- "139:139"
- "445:445"
volumes:
- /mnt/external_hdd_3:/mnt/external_hdd_3
- /mnt/external_hdd_4:/mnt/external_hdd_4
command: >
-u "teo;<mot-de-passe>"
-s "HDD_3_EXTERNAL;/mnt/external_hdd_3;yes;no;no;teo"
-s "HDD_4_EXTERNAL;/mnt/external_hdd_4;yes;no;no;teo"
Deux partages sont exposés :
HDD_3_EXTERNALHDD_4_EXTERNAL
Pré-requis côté hôte
Les disques (exfat dans mon cas) doivent être montés sur l’hôte avant de démarrer le conteneur, aux chemins déclarés dans les volumes :
sudo mount -t exfat /dev/sdc1 /mnt/external_hdd_3
sudo mount -t exfat /dev/sdd2 /mnt/external_hdd_4
Pour que ça survive à un reboot, ajout dans /etc/fstab (avec nofail pour ne pas bloquer le boot si le disque est débranché) :
UUID=<uuid_disque_3> /mnt/external_hdd_3 exfat defaults,noatime,nofail,x-systemd.device-timeout=10s 0 2
UUID=<uuid_disque_4> /mnt/external_hdd_4 exfat defaults,noatime,nofail,x-systemd.device-timeout=10s 0 2
Puis démarrage du service :
docker compose up -d
🌐 Accès en réseau local
Depuis un appareil sur le même Wi-Fi/LAN que le serveur :
Windows : Explorateur de fichiers → barre d’adresse → \\<SERVER_IP>\HDD_3_EXTERNAL
macOS : Finder → Cmd+K → smb://<SERVER_IP>/HDD_3_EXTERNAL
Linux : Gestionnaire de fichiers → “Se connecter à un serveur” → smb://<SERVER_IP>/HDD_3_EXTERNAL
# ou en ligne de commande
sudo mount -t cifs //<SERVER_IP>/HDD_3_EXTERNAL /mnt/point_de_montage \
-o username=teo,password=<mot-de-passe>
Android/iOS : app type CX File Explorer (Android) ou Files (iOS), ajouter un serveur SMB avec l’IP du serveur.
Identifiants : utilisateur teo, mot de passe celui défini dans le docker-compose.yml.
🔒 Accès à distance via Tailscale
Le vrai intérêt : accéder aux mêmes partages depuis n’importe où, sans être sur le réseau local, grâce à Tailscale qui tourne déjà en conteneur (network_mode: host) sur le serveur.
Comme Tailscale partage le réseau de l’hôte, les ports SMB (139/445) exposés par le conteneur Samba sont automatiquement joignables via l’IP Tailscale du serveur — aucune config supplémentaire n’est nécessaire côté Samba.
Il suffit de remplacer l’IP locale par l’IP ou le nom MagicDNS Tailscale du serveur :
- Windows :
\\<tailscale-hostname>\HDD_3_EXTERNAL - macOS :
smb://<tailscale-hostname>.ts.net/HDD_3_EXTERNAL - Linux :
smb://<tailscale-hostname>.ts.net/HDD_3_EXTERNAL - Android : IP Tailscale du serveur dans l’app SMB
Mêmes identifiants qu’en local.
⚠️ Prérequis
- L’appareil client doit être connecté au même tailnet (
tailscale up) - Les ACL Tailscale (admin console) ne doivent pas bloquer les ports 139/445 entre les appareils concernés — par défaut tout le trafic intra-tailnet est autorisé
🐛 Troubleshooting
Le partage n’apparaît pas → vérifier que les disques sont bien montés sur l’hôte (mount | grep external_hdd) et que le conteneur tourne (docker compose ps).
Connexion refusée en Tailscale mais OK en local → vérifier les ACL sur admin.tailscale.com.
Mot de passe refusé → le mot de passe est défini en clair dans docker-compose.yml (option -u) : penser à en choisir un fort avant tout partage à d’autres personnes, et à ne jamais le publier tel quel.
Status: 🟢 Running Partages: 2 disques durs externes (HDD_3_EXTERNAL, HDD_4_EXTERNAL) Accès: réseau local + Tailscale