Aller au contenu

Configuration d'un serveur NFS externe

Transformer un conteneur de stockage partagé en serveur NFS joignable de l'extérieur, avec exports, règles de pare-feu et correspondance d'ownership pour les clients hors compte.

Partager des données dans un même compte est automatique — la plateforme gère les deux côtés. Partager des données entre comptes, ou avec un client hors PaaS, demande de configurer les deux côtés explicitement. Cette page couvre le côté serveur : transformer un conteneur de stockage partagé en serveur NFS joignable depuis des clients externes.

La même procédure s’applique à tout serveur de stockage NFS que vous exploitez ; nous la décrivons en termes du conteneur de stockage partagé de la plateforme.

1. Attacher une IP publique

Les clients externes ont besoin d’une route vers le serveur. Attachez une IP publique au conteneur de stockage partagé pour qu’il ait une adresse externe stable. Sans ça, le conteneur n’est joignable que depuis l’intérieur du compte.

2. Déclarer les exports

Éditez /etc/exports sur le conteneur de stockage. Le gestionnaire de configuration expose ce fichier dans Exports → Configuration. Le format est un partage par ligne :

{repertoire} {client}([option],[option],...)
  • {repertoire} — chemin absolu du dossier à exporter, relatif à la racine du système de fichiers du conteneur.
  • {client} — IP ou nom d’hôte du client autorisé à monter. Vous pouvez utiliser un joker ou un sous-réseau pour plusieurs clients.
  • [option] — drapeaux d’accès. Les plus courants :
    • async — laisse le serveur répondre aux écritures avant que les données soient flushées. Plus rapide, avec un petit risque de perte en cas de crash.
    • ro / rw — lecture seule / lecture/écriture.
    • no_root_squash — garde root sur le client comme root sur le serveur. À n’utiliser qu’avec une confiance totale.
    • no_subtree_check — saute la vérification d’intégrité du sous-arbre. Plus rapide mais plus grossier.

Si vous ne pouvez pas donner d’IP publique au client — par exemple en test — vous pouvez utiliser l’IP hôte du conteneur client à la place. C’est non sécurisé parce que ça expose le partage à tous les conteneurs sur cet hôte. À ne pas utiliser en production.

3. Grappes de stockage GlusterFS

Si le conteneur de stockage est un auto-cluster de stockage partagé sur GlusterFS, seul le dossier /data est répliqué entre les membres. Les répertoires exportés doivent vivre sous /data.

Vous devez aussi ajouter une option fsid à chaque export pour que NFS donne au partage un identifiant de système de fichiers stable entre les répliques. Générez-en un avec :

cat /proc/sys/kernel/random/uuid

et ajoutez ,fsid={uuid} à la ligne d’export.

4. Appliquer les nouveaux exports

Rechargez la table d’exports :

exportfs -ra

Tant que vous ne lancez pas cette commande, les changements dans /etc/exports ne sont pas actifs.

5. Ouvrir le pare-feu

NFS a besoin de trois ports ouverts vers l’IP cliente :

  • 111 (portmapper)
  • 2049 (NFS proprement dit)
  • 20048 (mountd)

Vous pouvez les ouvrir depuis le tableau de bord dans Settings → Firewall, ou avec iptables via SSH :

iptables -I INPUT -p tcp -m multiport --dports 111,2049,20048 -s {ip_client} -j ACCEPT
iptables -I INPUT -p udp -m multiport --dports 111,2049,20048 -s {ip_client} -j ACCEPT

Restreignez la source à l’IP cliente réelle. Une règle générale 0.0.0.0/0 sur ces ports est un mauvais défaut — NFS n’est pas conçu pour l’internet ouvert.

6. Faire correspondre les UID

Quand le client monte en lecture/écriture, l’UID/GID du processus qui écrit côté client doit correspondre aux permissions côté serveur. Les conteneurs livrent des utilisateurs par défaut différents — root sur certaines piles, jelastic sur d’autres.

Si l’utilisateur côté client ne correspond pas, les écritures échouent avec des erreurs de permissions. Ajustez l’ownership du dossier d’export côté serveur :

chown {uid}:{gid} {path}

où :

  • {uid} est le nom ou l’ID utilisateur — voir /etc/passwd sur le conteneur client.
  • {gid} est le nom ou l’ID de groupe — voir /etc/group sur le conteneur client.
  • {path} est le répertoire exporté.

7. Optionnel : hosts.allow / hosts.deny

Pour un contrôle supplémentaire sur les hôtes auxquels le serveur NFS répond, vous pouvez configurer /etc/hosts.allow et /etc/hosts.deny. C’est indépendant des règles iptables et donne une seconde couche de filtrage au niveau protocole NFS.

La suite

  • Points de montage — configurer le côté client pour monter cet export.
  • Stockage NFS externe — quand les données vivent sur un serveur NFS tiers et que vous n’avez qu’à les monter.
  • NFS — notes protocolaires et limitations qui s’appliquent au client comme au serveur.