Aller au contenu

Un NAS DIY en 2019

·678 mots·4 mins
Auteur
My name
A little bit about me

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.