Un NAS DIY en 2019

Publié le 04/03/2019

Bon. Jchuis reparti sur comment remplacer mon Synology par un NAS home-made-do-it-yourself-toussa. J'ai comparé deux trois pièces pour avoir un point de comparaison.

Le boitier

Finalement, je suis reparti sur mon Node 804. L'avantage est qu'il s'agit d'un boitier ¬ĶATX qui traine finalement dans ma cave (je n'ai pas eu la motivation de m'en s√©parer), qu'il fonctionne finalement bien pour ce que je veux en faire malgr√© ses d√©fauts.

A l'intérieur

Niveau carte m√®re, j'y ai install√© une carte Gygabyte B250-D3H, 8GB de RAM et un SSD M2 Corsair Green. Le SSD n'est pas le plus rapide du monde, MAIS √† 37‚ā¨ les 240GB, je pense que c'est imbattable :-) Il y a malgr√© tout un point √† prendre en consid√©ration: il n'a qu'un cache SLC de 8GB. Cela signifie que quand le cache est plein, les performances d√©croissent rapidement. Dans le but d'un NAS, il est peu probable que le cache arrive √† saturation (et m√™me, ce ne serait finalement pas monstrueux).

Au niveau des disques, j'ai installé :

  • 2 disques de 4TB WD Red en Raid 1 software. Le disque /dev/md/users est mont√© sous /mnt/users. Cela permet √† mes scripts pr√©c√©dents de continuer √† fonctionner.
  • 2 disques de 2TB (un Samsung, un Seagate) en Raid 1 software √©galement. /dev/md/media est mont√© sous /mnt/media. A priori, je devrais en faire un share NFS et/ou SMB.

Rien de bien folichon :-) L'objectif consiste principalement en du stockage de données et des sauvegardes. Les données placées uniquement sur le NAS seront dédoublées soit vers un cloud type Wasabi, soit vers du stockage chez un copain-avec-qui-on-peut-aller-boire-un-verre.

Matériel

Pour l'alimentation, le serveur tourne sur un APC Back-UPS 700VA. Un crontab arrête le serveur durant la nuit (à part des sauvegardes, je n'ai pas besoin d'une HA) - et j'utilise une des fonctions de la carte mère pour réveiller le serveur à une heure fixe. Une autre possibilité serait de passer par du WOL, mais je ne sais pas comment cela se comporterait au travers du routeur :)

Pour le réseau, j'ai simplement mis en place une redirection du port 22 externe vers le port 22 du serveur. Un script (relativement simple) tourne à intervalle régulière pour mettre à jour l'adresse IP externe. Dans le pire des cas, on aurait une indisponibilité de quelques minutes, pas plus.

Configuration

  • Ubuntu 18.04.2 LTS
  • S√©curit√©
    • Fail2ban
    • SSMTP pour les notifications
  • Supervision
    • mdadmd pour la surveillance du RAID
    • ?
  • Utilisateurs:
    • Pas de restrictions sur les home folders, ni sur les services pouvant √™tre utilis√©s.
    • Cr√©ation d'un nouvel utilisateur avec la commande sudo useradd -m -d <home_directory> <user> --shell /bin/bash. En gros, t'as pas de mot de passe, tu peux juste te connecter avec ta cl√© (et c'est moi qui l'ajoute :-D). Le param√®tre -d me permet de sp√©cifier le chemin vers la home directory (que je place sur /mnt/users, pour qu'elle se trouve par d√©faut en RAID1).
    • Apr√®s avoir copi√© la cl√© de l'utilisateur dans le r√©pertoire <home_directory>/.ssh/authorized_keys, il faut penser √† modifier les droits de la mani√®re suivante :
      • chown user:user <home_directory>/.ssh -R
      • chmod 600 <home_directory>/.ssh/authorized_keys
      • chmod 700 <home_directory>/.ssh

Sauvegardes

Avec borg (voir aussi ici).

borg (apt install borgbackup) doit être installé autant au niveau du serveur que du client. Le client peut éventuellement de borgmatic, histoire de simplifier un peu les sauvegardes.

Borgmatic

Si vous démarrez borgmatic, vous devriez avoir un fichier de configuration. Par défaut, ce fichier devrait se trouver à l'un des emplacements suivants:

  • /etc/borgmatic/config.yaml
  • /etc/borgmatic.d
  • /home//.config/borgmatic/config.yaml

Pour ma part, le script tourne en root (Bouuuh! La foule hue Fredou !), ne serait que pour avoir accès à l'ensemble des dossiers que je souhaite sauvegarder. Donc, dans /etc/borgmatic/config.yaml.

Pour l'essai, le plus simple consiste à :

  1. Se connecter sur le serveur pour effectuer la commande borg init -e none /path/to/repo
  2. Démarrer borgmatic --verbosity 1 sur le client, en ayant correctement configuré le fichier yaml.