Nfs

De Linux Server Wiki
Aller à la navigation Aller à la recherche

Installation classique

Sur le serveur

Installer le serveur nfs :

aptitude install nfs-kernel-server

Pour créer un partage, éditez le fichier /etc/exports :

/home/pfoo/data/ 192.168.10.0/255.255.255.0(ro,all_squash,anonuid=1000,anongid=1000,sync)

Pour permettre la lecture et l'écriture, remplacez ro par rw 192.168.10.0/255.255.255.0 signifie que le partage sera accessible pour les ips 192.168.10.X

Rechargez nfs :

/etc/init.d/nfs-kernel-server reload

Attention, si vous souhaitez partager un volume ntfs en nfs, utilisez de préférence ntfs-3g pour monter le volume ntfs sur le serveur.

Limiter l'accès

Ajoutez les lignes suivantes dans /etc/hosts.deny :

portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
statd: ALL

Ajoutez les lignes suivantes dans /etc/hosts.allow :

portmap: 192.168.10.
lockd: 192.168.10.
mountd: 192.168.10.
rquotad: 192.168.10.
statd: 192.168.10.

Sur le client

Installer le client nfs :

aptitude install nfs-common

Ajoutez la ligne suivante dans /etc/fstab :

192.168.10.13:/home/pfoo/data/ /home/pfoo/mnt/ nfs defaults,user,auto,noatime,intr 0 0

192.168.10.13 est l'ip de votre serveur nfs.

il ne reste plus qu'a monter :

mount /home/pfoo/mnt/

NFS et tunnel ssh

Sur le serveur

Pour simplifier les choses, il va falloir forcer NFS à n'utiliser que des ports précis.

Modifiez la ligne suivante dans /etc/default/nfs-common :

STATDOPTS="--port 2231"

Modifiez la ligne suivante dans <code</etc/default/nfs-kernel-server :

RPCMOUNTDOPTS="--port 2233"

Enfin, créez le fichier /etc/modprobe.d/local.conf contenant :

options lockd nlm_udpport=2232 nlm_tcpport=2232
options nfs callback_tcpport=2234

Créez un utilisateur "sleeper" qui servira a établir le tunnel ssh:

adduser --disabled-password sleeper

Et copiez la clé ssh publique de votre client dans /home/sleeper/.ssh/authorized_keys :

from="ip",command="/bin/sleep 600d" ssh-rsa .......

Créez enfin le partage nfs dans /etc/exports. En admettant que vous souhaitez partager le dossier /srv (remplacez IPNFS par l'ip de votre serveur) :

/srv IPNFS(rw,no_root_squash,sync,insecure)

Puis lancez l'export :

exportfs -a

Sur le client

Initialisez le tunnel ssh (remplacez IPNFS par l'ip de votre serveur nfs) :

ssh -f -i /root/.ssh/id_rsa -c blowfish -L 61001:IPNFS:2049 -l sleeper IPNFS sleep 600d
ssh -f -i /root/.ssh/id_rsa -c blowfish -L 62001:IPNFS:2233 -l sleeper IPNFS sleep 600d 

Ajoutez la ligne suivante dans /etc/fstab :

localhost:/srv /mnt nfs tcp,rsize=8192,wsize=8192,intr,rw,bg,nosuid,port=61001,mountport=62001,noauto

Et montez le partage :

mount /mnt

si vous souhaitez limiter la bande passante utilisable par le tunnel, utilisez trickle. Par exemple pour 5mbps :

trickle -s -u 5000 -d 5000 ssh -f -i /root/.ssh/id_rsa -c blowfish -L 61001:IPNFS:2049 -l sleeper IPNFS sleep 600d
trickle -s -u 5000 -d 5000 ssh -f -i /root/.ssh/id_rsa -c blowfish -L 62001:IPNFS:2233 -l sleeper IPNFS sleep 600d