Samba - Accès à mes disques durs externes en réseau (local + Tailscale)

#samba#nas#docker#tailscale#networking#self-hosting

🎯 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_EXTERNAL
  • HDD_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