Refonte complète de mon infrastructure réseau Homelab

Sécurité, Modernisation et Haute Disponibilité — Mars 2026


Introduction

Depuis plusieurs années, je gère à la maison une infrastructure de serveurs personnels qui s’est développée au fil du temps de manière un peu organique. Entre les NAS Synology, un mini PC sous Ubuntu, un Raspberry Pi 5, une VM dans ma box et même un serveur chez mon fils, tout fonctionnait… mais avec des rustines partout.

Des ports SSH ouverts sur Internet, des ports de services exposés directement, des sauvegardes qui partaient dans tous les sens, pas d’authentification centralisée, et une impossibilité d’accéder proprement à plusieurs serveurs depuis l’extérieur faute de ports disponibles.

J’ai donc décidé de tout reprendre proprement. Voici le récit de cette migration réalisée en deux jours.


Chapitre 1 — L’état des lieux avant la migration

Mon infrastructure se composait de :

  • Un NAS Synology DS715 — serveur principal (NAS maître, source de vérité)
  • Un NAS Synology DS224 — sauvegarde secondaire
  • Un Mini PC Ubuntu — serveur Docker principal
  • Un Raspberry Pi 5 sous Ubuntu — services légers et médias
  • Une VM Ubuntu dans ma Freebox Ultra — services internes
  • Un Synology chez mon fils — backup externe et son propre Plex

Côté services Docker, je faisais tourner notamment : Plex, Paperless, Homepage, Portainer, MeTube, PyLoad, HandBrake, ConvertX, Vaultwarden, Watchtower.

Les problèmes identifiés étaient nombreux :

  1. Pas de moyen d’accéder à plusieurs serveurs en SSH depuis l’extérieur (un seul port 22 disponible sur ma box)
  2. Des ports de services exposés directement sur Internet
  3. Le serveur de mon fils accessible via un port SSH non standard exposé sans restriction d’IP
  4. Paperless et Vaultwarden accessibles via synology.me (QuickConnect), ce qui fait transiter le trafic par les serveurs Synology
  5. Ma Homepage hébergée sur un VPS payant, alors qu’elle pourrait tourner localement
  6. Aucune authentification centralisée
  7. Script de sauvegarde avec des IPs en dur susceptibles de changer

Chapitre 2 — La stratégie choisie

Après réflexion, j’ai opté pour une architecture en trois couches :

Couche 1 — Réseau privé unifié avec Tailscale

Tailscale crée un réseau privé chiffré (basé sur WireGuard) entre toutes mes machines, y compris celles qui sont chez mon fils ou sur d’autres réseaux. Chaque machine reçoit une adresse IP stable dans la plage 100.x.x.x. Avantage majeur : zéro port à ouvrir sur les box.

Couche 2 — Exposition web sécurisée avec Cloudflare Tunnel

Au lieu d’ouvrir des ports sur ma Freebox, un agent cloudflared tourne sur mon Mini PC et maintient une connexion sortante vers Cloudflare. Tout le trafic entrant passe par ce tunnel chiffré. Résultat : zéro port ouvert, SSL automatique, protection DDoS incluse.

Couche 3 — Authentification avec Cloudflare Access

Pour les services sensibles accessibles depuis Internet, Cloudflare Access ajoute une couche d’authentification par email (code OTP) avant même d’atteindre le service.


Chapitre 3 — Phase 1 : Installation de Tailscale

L’installation de Tailscale s’est révélée remarquablement simple. Après création d’un compte sur tailscale.com, j’ai déployé le client sur chaque machine.

Sur les machines Ubuntu :

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --authkey=MON_TOKEN --hostname=nom-machine

Sur les Synology, j’ai utilisé l’installation native via le Centre de paquets DSM — Tailscale y est disponible directement et s’intègre au niveau du système d’exploitation.

Au final, 6 machines connectées à mon réseau Tailscale privé, accessibles depuis n’importe où dans le monde de manière sécurisée.

Note importante : les vieux Synology (kernel Linux 3.10) ne routent pas nativement via Tailscale pour les connexions SSH sortantes. Ce n’est pas bloquant car les machines Ubuntu modernes (kernel 6.x) n’ont pas ce problème.


Chapitre 4 — Phase 2 : Migration de Paperless

Paperless (mon gestionnaire de documents) tournait sur le DS715 avec des volumes bind-mount. La migration s’est faite en plusieurs étapes :

  1. Inventaire de la configuration existante sur le DS715
  2. Transfert des données vers le Mini PC via rsync (avec sudo pour les dossiers PostgreSQL protégés)
  3. Adaptation du docker-compose.yml pour le Mini PC
  4. Test en local
  5. Basculement du tunnel Cloudflare vers le Mini PC
  6. Arrêt de Paperless sur le DS715

Point délicat : l’image Tika de paperless-ngx n’était plus disponible sur ghcr.io. Remplacement par l’image officielle apache/tika:latest.

Résultat : Paperless accessible sur https://paperless.mondomaine.fr avec les données intactes et les performances améliorées.


Chapitre 5 — Phase 3 : Cloudflare Tunnel

Installation de cloudflared sur le Mini PC via Docker :

services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    restart: unless-stopped
    network_mode: host
    command: tunnel --no-autoupdate run
    environment:
      - TUNNEL_TOKEN=MON_TOKEN

Point crucial découvert : cloudflared doit être en network_mode: host pour pouvoir atteindre les services sur l’hôte. En mode bridge Docker, il ne peut pas joindre les autres containers.

Services migrés vers Cloudflare Tunnel :

  • Paperless → https://paperless.mondomaine.fr
  • Homepage → https://homepage.mondomaine.fr
  • Vaultwarden → https://vaultwarden.mondomaine.fr

Vaultwarden était auparavant accessible via synology.me — inacceptable pour un gestionnaire de mots de passe. Migration réalisée avec export/import JSON depuis l’interface Vaultwarden.

La Homepage tournait sur un VPS payant. Le container était déjà présent sur le Mini PC — il suffisait de le pointer dans Cloudflare. VPS résilié = économie mensuelle.


Chapitre 6 — Phase 4 : Cloudflare Access

Cloudflare Access permet d’ajouter une authentification devant n’importe quel service exposé via Cloudflare Tunnel, sans modifier le service lui-même.

Configuration dans Cloudflare Zero Trust :

  • Application : Homepage / Paperless
  • Stratégie : Allow — Email = mon adresse
  • Durée de session : 24 heures

Fonctionnement : Cloudflare intercepte la requête, demande l’adresse email, envoie un code OTP, et n’autorise l’accès qu’après validation. Simple et très efficace.

Note : l’application Android Paperless ne supporte pas Cloudflare Access. Solution : utiliser Tailscale sur le téléphone et accéder via l’IP Tailscale directement.


Chapitre 7 — Phase 5 : Fermeture des ports Freebox

Avant la migration, ma Freebox avait plusieurs ports ouverts dont un port SSH sans restriction d’IP — particulièrement dangereux.

Après migration, il ne reste plus que le port 9 UDP pour le Wake-on-LAN. Tout le reste passe soit par Cloudflare Tunnel, soit par Tailscale.

Concernant le serveur de mon fils : son port SSH était ouvert sans restriction. J’ai configuré sa box pour n’autoriser ce port que depuis mon IP fixe.


Chapitre 8 — Monitoring avec Netdata

J’ai déployé Netdata pour avoir une vision centralisée de toute l’infrastructure. Toutes les instances reportent vers le Mini PC qui sert de tableau de bord central.

Ce que Netdata surveille :

  • CPU, RAM, disques de chaque machine
  • État de chaque container Docker
  • Trafic réseau et températures
  • Métriques PostgreSQL et Redis

Chapitre 9 — Script de sauvegarde

Mon script de sauvegarde rsync tourne sur le DS715 via le planificateur de tâches DSM et gère les flux suivants :

  • DS715 → Mini PC Ubuntu (sauvegarde complète)
  • DS715 → RPi5 (Plex sync + sauvegarde + photos)
  • DS715 → VM Freebox (photos)
  • DS715 → Synology fils (photos — backup externe)

Le script gère les tests de connectivité SSH, un filet de sécurité sur le --delete Plex, la rotation des logs, et la liste détaillée des fichiers transférés.


Chapitre 10 — Synchronisation des Homepages

J’utilise Homepage sur plusieurs serveurs comme tableau de bord. Un script de sync s’exécute à midi chaque jour et copie bookmarks.yaml et services.yaml depuis le Mini PC vers 6 serveurs via SSH.

# Cron sur le Mini PC
0 12 * * * /home/user/scripts/sync_homepage.sh

Bilan et leçons apprises

Ce qui fonctionne parfaitement maintenant :

  • ✅ Accès sécurisé à tous les services depuis n’importe où
  • ✅ Zéro port sensible ouvert sur Internet
  • ✅ SSL automatique sur tous les services web
  • ✅ Authentification unifiée via Cloudflare Access
  • ✅ Réseau privé entre toutes les machines via Tailscale
  • ✅ Monitoring centralisé avec Netdata
  • ✅ Sauvegardes automatisées et fiables

Leçons apprises :

  1. Cloudflare Tunnel + Tailscale couvrent 100% des besoins d’accès à distance. IPv6 n’apporte rien de plus dans ce contexte.
  2. Les vieux kernels Linux (3.10 sur les anciens Synology) ont des limitations avec les solutions modernes.
  3. network_mode: host est souvent nécessaire pour les containers qui doivent accéder aux services de l’hôte.
  4. Éviter d’éditer des scripts bash avec l’éditeur DSM — il corrompt les caractères spéciaux. Préférer nano via SSH.
  5. Séparer les rôles : le NAS reste dédié au stockage, le Mini PC gère les services Docker critiques.

Article rédigé en mars 2026 — Infrastructure personnelle Homelab