Créer un NAS maison avec un HP Data Vault

Publié le 25/12/2023 et écrit par Vincent Finance, dans la catégorie : #infra

Présentation du projet

Au sein de mon infrastructure maison, j'avais besoin d'avoir un système centralisé pour stocker mes sauvegardes et partager des fichiers. C'est pour cela que je cherchais à me construire un vrai NAS, afin de remplacer mon ancienne machine fourre-tout et d'avoir une vraie machine dédiée au stockage.
Pour autant, économies et écologie obligent, j'ai essayé de trouver du matériel d'occasion pour construire le NAS idéal. On tombe ainsi souvent sur des solutions toutes prêtes à base de Synology, de Netgear ou encore de QNAP. Or, même si ces solutions sont très pratiques et faciles à mettre en place, leur obsolescence est un problème sur le long-terme et ce type de NAS grand public peut être limité au niveau des fonctions et des programmes fournis.

Après quelques recherches, je suis finalement tombé sur quelque chose d'assez rare : un HP DataVault X510. Il s'agit d'un petit NAS conçu par HP, pouvant contenir 4 disques durs et équipé de base avec Windows Home Server. Ce système étant désuet, non maintenu et assez limité, on peut se dire que ce genre de matériel n'est pas intéressant.
Mais c'est justement tout l'inverse, car ces modèles fonctionnent un peu comme des PC classiques : le BIOS intégré peut démarrer automatiquement sur une clé USB si les disques durs sont absents, et il est possible d'augmenter la RAM installée, de changer le processeur, voire remplacer le système d'exploitation par quelque chose de plus récent. Cela permet ainsi de supprimer la limitation de 2 To par disque dur, imposée de manière logicielle par WHS, et d'avoir du matériel à jour et tout à fait capable de fonctionner. L'objectif de cet article est donc de vous montrer comment j'ai fait pour convertir ce matériel sous GNU/Linux.

Dans mon cas, le vendeur de cette machine avait déjà rajouté 2 Go de RAM sur les 2 Go existants et m'a offert un disque dur de 1 To pour le système, ce qui n'est pas négligeable.

Pour ce projet, je vais donc partir sur la chose suivante :

Installation du système d'exploitation de remplacement

Avant de commencer, il est important de comprendre que sur les 4 disques durs, la machine cherche automatiquement à démarrer sur le disque 4 (celui tout en bas) avant de basculer sur le port USB et cela n'est pas changeable par défaut, sauf si on cherche à utiliser le port VGA interne. Pour utiliser un écran, il est nécessaire de récupérer le signal via un port propriétaire (ce qui est faisable en achetant une carte d'extension particulière). Ce n'est pas ce que je vais présenter ici.

Comme la machine ne fournit pas de connectique pour un écran, il est donc nécessaire d'installer notre système de remplacement sur le disque dur avant de le mettre dans la machine. Nous avons donc besoin de trois éléments pour faire cela :

On commence par insérer le disque dur vierge dans le boîtier et on le connecte sur le PC hébergeant la machine virtuelle. On allume le boîtier et on l'ajoute en tant que périphérique USB dans la machine virtuelle via une allocation de ressources (QEMU/KVM via libvirt et VirtualBox sont capables de le faire en quelques clics). Ajouter ensuite le DVD de Debian GNU/Linux dans la machine virtuelle et la démarrer.

Au bout de quelques minutes, l'installateur s'affiche et on peut suivre les étapes comme on le ferait sur une installation classique de Debian. Dans la section Partitionnement, choisir alors le disque vierge dans le menu et créer un schéma d'installation selon le principe suivant :

Valider et lancer l'installation. Sur l'écran de sélection des logiciels à installer, ne choisir que Serveur SSH et Utilitaires système. Au bout de 10 minutes, l'installateur vous propose de redémarrer. Valider et sélectionner ensuite le disque dur externe dans le BIOS de votre hyperviseur virtuel pour démarrer dessus, afin de vérifier le fonctionnement. Une installation fraîche de Debian se lance et on peut maintenant passer à la suite.

Configuration préliminaire

Cockpit

Avant d'insérer le disque dur dans le NAS, nous allons installer quelques outils pour avoir une machine opérationnelle.

On met donc à jour notre système et on installe quelques utilitaires dont Cockpit :

$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y htop rsync cockpit cockpit-storaged nginx

L'intérêt de Cockpit est de fournir une interface Web très pratique pour gérer son NAS et tous ses éléments, notamment pour la gestion des disques et les mises à jour. On va donc le configurer pour le rendre accessible depuis notre réseau local, comme sur un NAS du commerce. Ici, nous allons utiliser nginx comme proxy inverse (reverse proxy en anglais) pour utiliser Cockpit dans de bonnes conditions.

On crée donc un fichier de configuration dédié à Cockpit pour autoriser Nginx à faire les redirections nécessaires :

$ sudo nano /etc/cockpit/cockpit.conf

## Configuration for Cockpit
[WebService]
Origins = https://nas.home.arpa wss://nas.home.arpa ## Vous pouvez changer nas.home.arpa par ce qui vous plaît ou bien par l'adresse IP de la machine
ProtocolHeader = X-Forwarded-Proto

$ sudo systemctl enable cockpit.socket
$ sudo systemctl restart cockpit

On installe ensuite la configuration suivante dans le dossier /etc/nginx/sites-available/ de la machine :

$ sudo vim /etc/nginx/sites-available/cockpit.conf

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # Nom de domaine
    server_name nas.home.arpa; ## Vous pouvez changer cette partie par ce qui vous plaît ou bien par l'adresse IP de la machine

    # Options pour le certificat SSL
    ssl_certificate /etc/ssl/cockpit.crt;
    ssl_certificate_key /etc/ssl/private/cockpit.key;

    # Logs
    access_log /var/log/nginx/cockpit-access.log;
    error_log /var/log/nginx/cockpit-error.log;

    # Redirection for Cockpit
    location / {
        proxy_pass https://127.0.0.1:9090;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Required for web sockets to function
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Pass ETag header from Cockpit to clients.
        # See: https://github.com/cockpit-project/cockpit/issues/5239
        gzip off;
    }
}

Générer un certificat auto-signé dans le dossier /etc/ssl et activer la configuration du nouveau site :

$ sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/ssl/private/cockpit.key -out /etc/ssl/cockpit.crt -sha256 -days 3650 -nodes -subj "/C=FR/ST=Auvergne Rhone Alpes/L=Lyon/O=Automario/CN=nas.home.arpa"
$ sudo ln -s /etc/nginx/sites-available/cockpit.conf /etc/nginx/sites-enabled/cockpit.conf

Ici, le CN= correspond au nom de domaine présent dans la partie server_name, mais vous pouvez mettre une adresse IP à la place.

Vérifier la configuration de Nginx avant de le lancer :

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Relancer Nginx pour charger la nouvelle configuration :

sudo systemctl restart nginx

Ouvrir les ports 80 et 443 de votre pare-feu (via firewalld, iptables ou nftables) et tester l'URL définie dans Nginx. La page de connexion de Cockpit s'affiche alors et on peut tester le bon affichage de l'interface de Cockpit.

Interface réseau ?

Vu qu'on n'a pas d'interface graphique, il n'est pas facile de connaître le nom de l'interface réseau du NAS du premier coup. Pour pallier ce souci, j'édite le fichier /etc/network/interfaces pour ajouter plusieurs interfaces réseau comme ceci :

$ sudo nano /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp1s0
iface enp1s0 inet dhcp

allow-hotplug enp2s0
iface enp2s0 inet dhcp

allow-hotplug enp3s0
iface enp3s0 inet dhcp

allow-hotplug enp4s0
iface enp4s0 inet dhcp

allow-hotplug enp5s0
iface enp5s0 inet dhcp

S'il est vrai que c'est un peu artisanal, cette technique permet à Debian de lancer plusieurs tentatives de connexion en essayant de deviner le nom de l'interface réseau. La ligne allow-hotplug permet d'activer l'interface uniquement si elle est branchée, ce qui évite de la pollution inutile si on lance une commande de type ip a show après démarrage.

Insertion du disque dans le NAS

Une fois que tout est bon, éteindre la machine virtuelle, retirer le disque dur du boîtier et l'insérer dans le quatrième tiroir de la baie du NAS. Après insertion, on peut démarrer la machine pour vérifier que le disque est bien reconnu et que notre système se lance bien. Au bout de quelques minutes, la machine se connecte toute seule au réseau, mais on doit la retrouver manuellement.
Deux solutions sont possibles : soit on se connecte sur l'interface de son routeur ou de sa box pour regarder quelles sont les IP attribuées récemment, soit on utilise le logiciel nmap pour faire un scan complet du réseau local et trouver une machine avec plusieurs ports ouverts : le port TCP/22, le port TCP/80 et le port TCP/443.

Une fois l'IP récupérée, on peut utiliser l'adresse https://adresseipdelamachine/ pour se connecter sur Cockpit avec son compte utilisateur et apprécier le bon fonctionnement de notre NAS.

Capture d'écran de l'interface de Cockpit

Créer un périphérique RAID

Après avoir vérifié l'accès au NAS, on peut l'éteindre pour installer les trois disques durs dans les baies restantes et relancer la machine. Une fois le serveur démarré, on utilise l'interface de Cockpit pour formater chaque disque ajouté et l'initialiser selon ces étapes :

Si besoin, la documentation de référence se trouve dans les notes de bas de page.

Une fois que l'initialisation est terminée, on peut créer un périphérique RAID et le monter automatiquement :

Si besoin, vous pouvez utiliser le bouton Mount pour monter la partition. Cela activera alors son montage automatique lors du démarrage du NAS.

La documentation de référence pour cette partie est également présente dans les notes de bas de page.

Faire des partages de fichiers avec NFS

NFS est un protocole de partage de fichiers pour les systèmes de type Unix et dérivés, bien qu'il soit compatible avec MacOS et Windows. Il est souvent utilisé pour monter des chemins réseau ou encore des dossiers de sauvegarde. Chez moi, je m'en sers principalement pour partager mes fichiers entre mes machines Linux et pour stocker les sauvegardes quotidiennes de mes machines virtuelles sous Proxmox.

Pour installer NFS, il suffit d'installer le module du noyau Linux via APT :

$ sudo apt -y install nfs-kernel-server

On configure ensuite deux fichiers : /etc/idmapd.conf et /etc/exports.
Le premier sert notamment à définir quelques options pour les versions 3 et 4 du protocole. Nous allons juste modifier la ligne Domain pour utiliser le domaine local (chez moi, j'utilise home.arpa) :

$ sudo vim /etc/idmapd.conf

Domain = "home.arpa"

Le deuxième fichier est la partie centrale du serveur NFS : c'est lui qui gère les partages réseaux et les autorisations. Sous NFS, il n'y a pas d'identification par mot de passe, mais on peut restreindre les accès en autorisant des plages réseau. Dans mon cas, je vais mettre en place deux partages sur mon NAS : un pour les sauvegardes de machines et un pour partager mes films entre nos PC portables. Cela donne donc quelque chose comme l'exemple suivant :

$ sudo vim /etc/exports

## NFS exports configuration

/share/nfs/vms 10.10.10.3/32(rw,sync,no_root_squash) 10.10.10.5/32(rw,sync,no_root_squash,no_subtree_check)
/share/movies 10.10.20.0/24(rw,sync,no_root_squash,no_subtree_check

On crée également les deux dossiers pour s'assurer qu'il existe bien et une fois que tout est bon, on peut activer les services liés à NFS :

$ sudo mkdir -p /share/nfs/vms && sudo mkdir -p /share/movies
$ sudo systemctl enable nfs-server nfs-idmapd
$ sudo systemctl restart nfs-server nfs-idmapd

On peut vérifier que tout est correct en utilisant la commande showmount --exports x.x.x.x pour afficher les montages disponibles :

$ showmount --exports nas.home.arpa
Export list for nas.home.arpa:
/share/movies             10.10.20.0/24
/share/nfs/vms            10.10.10.5/32,10.10.10.6/32,10.10.10.3/32

Si vous rééditez le fichier des exports NFS, il est nécessaire de recharger son contenu pour prise en compte. Cela peut se faire directement via la commande exportfs :

$ sudo exportfs -ra

Conclusion

Avec cet article, vous pouvez désormais, vous aussi, convertir ce genre de vieux NAS HP sous quelque chose d'utilisable au quotidien et de tout aussi moderne qu'un NAS grand public. Cela demande un peu plus de maintenance, mais le fonctionnement est tout aussi pratique à l'aide de Cockpit. Je n'ai pas abordé la partie Samba pour gérer des partages sous Windows, mais il existe de nombreux tutoriels pour mettre en place ce type de partages.


Sources utilisées :


Un commentaire à ajouter ?

Pour ajouter votre commentaire, envoyez directement un mail ici