diff --git a/HowtoNFS.md b/HowtoNFS.md index ee7515e6..19719022 100644 --- a/HowtoNFS.md +++ b/HowtoNFS.md @@ -15,6 +15,13 @@ NFS (Network File System) est un protocole réseau permettant le partage de fich ## Configuration +On peut configurer certaines options via le fichier `/etc/default/nfs-kernel-server` : + +~~~ +RPCNFSDCOUNT=8 +RPCMOUNTDOPTS="--no-nfs-version 4 --debug all" +~~~ + Les partages se configurent dans le fichier `/etc/exports` : ~~~ @@ -36,6 +43,7 @@ Par défaut, les requêtes faites depuis un client avec UID/GID à 0 sont mappé On peut aussi mapper toutes les requêtes vers un _anonymous_ avec l'option `all_squash`, et l'on peut préciser UID/GID avec les options `anonuid` et `anongid`. +Sans l'option `all_squash` les UID/GID sont conservés entre le serveur et tous les clients NFS, il faut donc s'assurer d'avoir une cohérence des UID/GID sur l'ensemble des serveurs concernés. ## Clients NFS @@ -45,6 +53,8 @@ On peut vérifier la connexion vers un serveur NFS ainsi : # rpcinfo -p 192.0.2.1 ~~~ +Pour activer un partage NFS : + ~~~ # apt install nfs-common # mount -t nfs -o nfsvers=3 192.0.2.1:/srv/nfs /mnt @@ -57,18 +67,40 @@ On peut vérifier la connexion vers un serveur NFS ainsi : 192.0.2.1:/srv/nfs /mnt nfs auto,rw,_netdev,mountproto=tcp,comment=systemd.automount 0 0 ~~~ +Voici un exemple de montage NFS : + ~~~ # mount | grep nfs -192.0.2.1:/srv/nfs on /srv/nfs type nfs4 (rw,relatime,vers=4,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.0.2.4,minorversion=0,local_lock=none,addr=192.0.2.1) +192.0.2.1:/srv/nfs on /mnt type nfs4 (rw,relatime,vers=4,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.0.2.4,minorversion=0,local_lock=none,addr=192.0.2.1) ~~~ -To disable NFSv4 on the server, specify '--no-nfs-version 4' in /etc/default/nfs-kernel-server +Quelques options possibles : + +* `vers=3` : force le protocole NFSv3 à la place de NFSv4 +* `soft` : si le serveur NFS ne répond, stoppe les requêtes au bout d'un certain temps (par défaut c'est infini) +* `timeo=n` : temps d'attente (en dixièmes de seconde) avant d'effectuer une nouvelle tentative vers le serveur NFS +* `retry=n` : temps d'attente (en minutes) lors de la commande mount… par défaut c'est environ une semaine ! +* `noac` : empêche tout mise en cache des attributs des fichiers +* `rsize=n,wsize=n` : forcer le nombre maximal d'octets pour une requête NFS (en général, cela s'adapte entre le client et le serveur) + + +## Réseau + +NFS est un protocole complexe qui utilise de nombreux ports TCP et UDP. +En général, on autorise tous les accès réseau entre un client et un serveur. + + +## NFSv3 ou NFSv4 ? + +NFSv4 est un protocole très différent de NFSv3. On peut avoir une certaine compatibilité en utilisant l'option `sec=sys` mais pour des cas simples il est souvent plus simple d'utiliser NFSv3. NFSv4 a un grand intérêt d'un point de vue sécurité en l'utilisant avec Kerberos (`sec=krb5`) : la sécurité ne repose plus sur les UID/GID pour identifier les utilisateurs à l'origine des requêtes mais sur des tickets d'authentification Kerberos. ## Plomberie -cat /proc/fs/nfs/exports -cat /var/lib/nfs/etab +* NFSv3 : +* NFSv4 : + +Sous Linux, le répertoire `/var/lib/nfs/` contient pas mal d'informations, notamment `/var/lib/nfs/etab` contient la liste des partages et `/var/lib/nfs/rmtab` la liste des clients NFS. Pour de la haute-disponibilité, on pourra partager ce répertoire entre plusieurs serveurs afin d'assurer une tolérance de panne entre les clients NFS sans nécessité de remonter les volumes. ## FAQ