{ "meta": { "title": "NFS serveur dans LXC | ProxMenux Documentation", "description": "Partagez des dossiers via NFS depuis un conteneur LXC Proxmox avec ProxMenux. Installation automatique de nfs-kernel-server, groupe commun sharedfiles, configuration de /etc/exports, ACL réseau et désinstallation complète. Nécessite un conteneur privilégié.", "ogTitle": "NFS serveur dans LXC | ProxMenux Documentation", "ogDescription": "Exécutez un serveur NFS dans un LXC privilégié avec le groupe commun sharedfiles, des ACL réseau et une désinstallation complète." }, "header": { "title": "Serveur NFS dans LXC", "description": "Exécutez un serveur NFS du noyau dans un conteneur LXC Proxmox et exposez des dossiers aux autres machines du réseau. ProxMenux installe nfs-kernel-server, configure le groupe commun sharedfiles pour faciliter le partage entre plusieurs CT privilégiés, gère /etc/exports et propose une désinstallation complète.", "section": "Stockage et partage · LXC" }, "privReq": { "title": "Conteneur privilégié requis", "body": "nfs-kernel-server doit monter le système de fichiers du noyau nfsd sur /proc/fs/nfsd. Cela exige CAP_SYS_ADMIN dans l’espace de noms du noyau hôte, pas seulement dans celui des utilisateurs du conteneur. Les LXC non privilégiés n’ont pas cette capacité : rpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory) ; systemd signale un échec de dépendance pour nfs-server.service. Le script exige donc un CT privilégié et s’arrête si le CT n’est pas privilégié. Une autre possibilité consiste à placer le serveur NFS dans une VM." }, "what": { "heading": "Ce que ça fait", "body": "C’est l’inverse de la page client NFS : le CT devient un serveur NFS et expose son propre dossier à d’autres CT, à l’hôte Proxmox, à des VM ou à des machines physiques.", "diagramServerLabel": "LXC (privilégié) — Serveur NFS", "diagramServerDetail": "/mnt/data\n(dossier exposé)\n\nchown root:sharedfiles\nchmod 2775 (SGID)\n\nnfs-kernel-server\n+ rpcbind en cours d’exécution", "diagramClientLabel": "Tout client sur le réseau", "diagramClientDetail": "un autre CT, l'hôte,\nun VM, une machine physique...", "diagramArrow": "Exportation NFS" }, "shared": { "heading": "Le groupe commun « sharedfiles »", "body": "Avant d'exporter le dossier, ProxMenux crée un groupe appelé sharedfiles avec GID 101000 à l'intérieur du conteneur, y ajoute chaque utilisateur régulier, puis définit le répertoire d'exportation à root:sharedfiles avec le mode 2775. Le 2 à l'avant est le bit SGID — chaque fichier ou dossier créé à l'intérieur hérite automatiquement du groupe sharedfiles.", "gidTitle": "Pourquoi GID 101000 spécifiquement", "gidBody": "Avec le mappage LXC par défaut (+100000), le GID 101000 de l’hôte apparaît comme GID 1000 dans un CT non privilégié. Ce serveur utilise un CT privilégié, sans décalage. Deux CT privilégiés utilisant sharedfiles avec le GID 101000 partagent donc le même identifiant numérique de groupe.", "remapTitle": "La création héritée des utilisateurs « remap_* » est ignorée pour les CT privilégiés", "remapBody": "L’ancienne branche pour les CT non privilégiés créerait des utilisateurs remap_<uid> avec l’UID <uid> + 100000, tous dans sharedfiles, pour les utilisateurs ordinaires et les UID courants (33, 1000, 1001, 1002). Ce décalage de +100000 ne s’applique pas aux CT privilégiés exigés ici ; le script ignore donc cette branche. L’absence de comptes remap_* dans getent passwd est normale et n’indique pas une erreur." }, "defaults": { "heading": "Options d'exportation par défaut — lire cette première", "warnTitle": "Les options par défaut incluent no_root_squash", "warnBody": "ProxMenux utilise par défaut rw,sync,no_subtree_check,'<'strong'>'no_root_squash'<'/strong'>'. Tout utilisateur root d’un client peut écrire comme root sur l’export. Réservez cette option à un réseau local de confiance. Si le CT est accessible depuis un réseau non fiable (VPS ou VLAN non fiable), remplacez l’option par root_squash dans le dialogue des options personnalisées." }, "opening": { "heading": "Ouverture de l'outil", "body": "Dans le menu principal, ouvrez Storage & Share Manager → Configure NFS Server in LXC. Seuls les CT privilégiés sont proposés. Choisissez le CT cible ; le script le démarre s’il est arrêté et refuse les CT non privilégiés. Le menu comporte cinq options.", "imageAlt": "Menu NFS Server Manager — Créer / Afficher / Supprimer / Statut / Désinstaller" }, "howRuns": { "heading": "Comment fonctionne le script (Créer le flux)" }, "network": { "heading": "Réseau ACL — qui peut monter le partage", "intro": "/etc/exports détermine quels clients peuvent monter l’export. Le dialogue propose trois modes :", "headerMode": "Mode", "headerValue": "Valeur écrite pour /etc/exports", "headerWhen": "Quand le choisir", "rows": [ { "mode": "Réseau local", "value": "192.168.0.0/16", "whenRich": "Pour les réseaux domestiques ou de petite entreprise habituels. Couvre toutes les adresses 192.168.*.*." }, { "mode": "Sous-réseau personnalisé", "value": "votre CIDR (par exemple 10.0.0.0/24)", "when": "Lorsque votre LAN n'est pas dans 192.168.x.x ou que vous voulez une portée plus étroite." }, { "mode": "Un seul hôte", "value": "votre IP (par exemple 10.0.0.42)", "when": "Seule une machine précise peut monter l’export. Option la plus restrictive." } ] }, "options": { "heading": "Options d'exportation expliquées", "headerOption": "Option", "headerEffect": "Ce qu'il fait", "rows": [ { "option": "rw / ro", "effect": "Autoriser les clients à lire et écrire, ou à lire uniquement." }, { "option": "sync", "effectRich": "Ne répond aux écritures qu’une fois les données sur disque. Plus sûr que async, au prix d’un débit réduit." }, { "option": "no_subtree_check", "effect": "Évite de vérifier à chaque requête que le fichier appartient encore au sous-arbre exporté. Plus rapide et évite les problèmes si des fichiers sont renommés pendant l’opération." }, { "option": "no_root_squash", "effectRich": "Faire confiance à root sur le client. Un client monté par root écrit comme root sur le serveur. Convient aux LAN de confiance, par exemple pour préserver les propriétaires lors des sauvegardes. Remplacez cette option par root_squash si vous ne faites pas entièrement confiance à chaque machine autorisée par l’ACL réseau." } ] }, "manual": { "heading": "Équivalent manuel", "body": "Reproduisez toute la procédure manuellement. Chaque commande s’exécute dans le CT via pct exec <ctid> -- ou pct enter <ctid> :" }, "view": { "heading": "Voir les exportations actuelles", "body": "Affiche /etc/exports depuis le CT en ignorant commentaires et lignes vides, puis présente chaque export avec son ACL réseau et ses options. Utile pour vérifier les dossiers exposés avant de communiquer l’IP du CT." }, "delete": { "heading": "Supprimer une exportation", "body": "Liste chaque ligne dans /etc/exports pour la sélection, supprime la ligne choisie (sed -i), exécute exportfs -ra et redémarre nfs-kernel-server. Le dossier lui-même et son contenu restent intacts." }, "status": { "heading": "Vérifier l'état NFS", "body": "Pass diagnostique : confirme que nfs-kernel-server et rpcbind sont installés et actifs, imprime la sortie exportfs -v, liste les sessions NFS actives (showmount -a) et les connexions client actuelles." }, "uninstall": { "heading": "Désinstaller le serveur NFS", "body": "Nettoyage complet après confirmation : arrête et désactive nfs-kernel-server et rpcbind, vide /etc/exports, supprime les paquets NFS avec apt-get purge, retire le groupe sharedfiles et les utilisateurs remap_*, puis termine les processus restants. Les dossiers exportés eux-mêmes ne sont pas supprimés ; seules la configuration NFS et les paquets le sont.", "warnTitle": "Le script s'arrête à la ligne d'exportation, pas aux données", "warnBody": "Supprimer un export et Désinstaller le serveur NFS retirent la configuration d’export. Les données du dossier sont conservées. Pour les supprimer aussi, utilisez explicitement rm -rf après la fin du script et sauvegardez-les d’abord si quelqu’un peut encore en avoir besoin." }, "troubleshoot": { "heading": "Dépannage", "privTitle": "Conteneur privilégié requis (le script s’arrête)", "privBody": "Le CT sélectionné n'est pas privilégié. nfs-kernel-server ne peut pas démarrer là parce que le montage /proc/fs/nfsd nécessite CAP_SYS_ADMIN dans l'espace nominatif du noyau hôte, et le module nfsd n'est pas non plus exposé à l'espace nominatif du conteneur (modprobe nfsd de l'intérieur renvoie FATAL: Module nfsd not found). Si vous contournez le contrôle, vous verrez rpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory) dans le journal et aucun port NFS n'ouvrira jamais. Les seules options utilisables sont : convertir le CT en privilégié, ou déplacer le serveur NFS vers une VM.", "aptTitle": "Échec de apt-get install", "aptIntro": "Le script suppose une famille Debian CT. Sur Alpine / Arch / Rocky / Alma, installez les paquets du serveur NFS à la main:", "aptItems": [ "Alpine: apk add nfs-utils", "Arch: pacman -S nfs-utils", "Rocky / Alma: dnf install nfs-utils" ], "aptOutro": "Relancez ensuite le script ProxMenux ; l’installation est ignorée si les outils sont déjà présents.", "aclTitle": "Le client ne peut pas monter : 'accès refusé par le serveur'", "aclBody": "L’IP du client n’est pas autorisée par l’ACL réseau. Recréez l’export avec un sous-réseau plus large ou ajoutez l’IP exacte du client. Attention : via un routeur NAT, le client peut apparaître avec l’IP WAN du routeur au lieu de son IP LAN. Vérifiez sur le serveur avec tcpdump -n port 2049.", "ownTitle": "Les fichiers écrits par le client apparaissent avec une propriété bizarre sur le serveur", "ownIntro": "Deux possibilités :", "ownItems": [ "Avec no_root_squash (par défaut), le client root écrit comme root sur le serveur. Les fichiers sont détenus par root:sharedfiles grâce au SGID du dossier.", "Les utilisateurs non-racines de clients écrivent comme leur propre UID/GID. Si leur UID n'existe pas sur le serveur, les fichiers apparaissent avec des nombres bruts (par exemple : 1234:1234). Utilisez également le groupe sharedfiles sur le client, ou alignez les UID sur les systèmes qui partagent des fichiers." ], "noShowTitle": "Serveur accessible mais showmount ne renvoie rien", "noShowBody": "Après avoir édité /etc/exports, vous devez recharger la table d'exportation avec exportfs -ra et redémarrer nfs-kernel-server — le script fait les deux, mais si vous avez édité le fichier à la main, faites-le vous-même. Confirmez également le pare-feu sur le CT (et sur l'hôte Proxmox) permet TCP/UDP 2049 et le port rpcbind (111)." }, "related": { "heading": "Autres", "items": [ { "href": "/docs/storage-share/lxc-nfs-client", "label": "Client NFS dans LXC", "tail": " — l’inverse : monter des partages NFS externes dans un CT." }, { "href": "/docs/storage-share/lxc-samba-server", "label": "Serveur Samba en LXC", "tail": "— page soeur, même motif avec SMB / CIFS au lieu de NFS." }, { "href": "/docs/storage-share/host-nfs", "label": "Partage NFS comme stockage Proxmox", "tailRich": " — une fois que le CT expose un export, enregistrez ce partage NFS dans Proxmox pour le voir sous Datacenter → Storage." } ] } }