User Tools

Site Tools


informatica:linux:nfs

NFS

NFSv3

Instalacion

En el servidor se instalan los paquetes:

sudo aptitude install nfs-common nfs-kernel-server

Configuracion servidor

1. Editar el fichero:

sudo vim /etc/exports

Se añade la linea con la carpeta a comartir, en este caso /home/datos:

#recurso       ips con acceso              permisos 
/home/datos 192.168.1.0/255.255.255.0(rw,async,subtree_check,no_root_squash)

2. Se reinicia el servicio:

sudo exportfs -rav

Configuracion cliente

1. Instalar estos paquetes:

sudo aptitude install nfs-common portmap

2. Y se monta el recurso donde 192.168.1.3 es la ip del servidor i /home/datos su recurso compartido y /mnt/raid donde lo queremos montar en el cliente:

sudo mount -t nfs 192.168.1.3:/home/datos /mnt/raid/

Para que lo pueda montar un usuario distinto a root añadir en /etc/fstab la siguiente linea:

192.168.1.3:/home/datos /mnt/raid nfs users 0 0

Y con cualquier usuario montamos la unidad:

mount /mnt/raid

Puertos

http://www.lowth.com/LinWiz/nfs_help.html

Problema: algunos de los puertos que usa NFS son aleatorios

  • Listar los puertos (algunos de ellos aleatorios) que esta usando el servidor NFS:
sudo rpcinfo -p
   programa vers proto   puerto
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  44903  status
    100024    1   tcp  33188  status
    100021    1   udp  60213  nlockmgr
    100021    3   udp  60213  nlockmgr
    100021    4   udp  60213  nlockmgr
    100021    1   tcp  54411  nlockmgr
    100021    3   tcp  54411  nlockmgr
    100021    4   tcp  54411  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100005    1   udp  37585  mountd
    100005    1   tcp  45231  mountd
    100005    2   udp  37585  mountd
    100005    2   tcp  45231  mountd
    100005    3   udp  37585  mountd
    100005    3   tcp  45231  mountd
Daemon Name RPM Standard Port Suggested Port What to Change
portmap portmap 111 111 Nothing
rpc.statd nfs-utils Random 4000 Edit /etc/init.d/nfslock
rpc.nfsd nfs-utils 2049 2049 Nothing
rpc.lockd nfs-utils & kernel Random 4001 Edit /etc/modules.conf
rpc.mountd nfs-utils Random 4002 Create or Edit /etc/sysconfig/nfs
rpc.rquotad quota Random 4003 Install “quota” package version 3.08 or later and edit /etc/rpc and /etc/services

Establecer puertos fijos

  • Fijar puerto de status:

1. Backup

sudo cp /etc/default/nfs-common /etc/default/nfs-common.old

2. Editar

sudo vim /etc/default/nfs-common

Y dejar la linea tal que asi:

STATDOPTS="--port 4000"

3. Reiniciar servicios:

sudo /etc/init.d/nfs-common restart
Stopping NFS common utilities: idmapd statd.
Starting NFS common utilities: statd idmapd.

4. Comprobar que ahora escucha en el puerto TCP 4000:

sudo rpcinfo -p | grep status
    100024    1   udp   4000  status
    100024    1   tcp   4000  status
  • Fijar puerto de nlockmgr:

1. Backup

sudo cp /etc/modules /etc/modules.old

2. Editar

sudo vim /etc/modules

Y anyadir la siguiente linea:

lockd nlm_udpport=4001 nlm_tcpport=4001

3. Reiniciar sistema para asegurarnos que funciona:

sudo shutdown -r now
  • Fijar puerto de mountd:

1. Backup

sudo cp /etc/default/nfs-kernel-server /etc/default/nfs-kernel-server.old

2. Editar

sudo vim /etc/default/nfs-kernel-server

Y dejar la siguiente linea tal que asi:

...
RPCMOUNTDOPTS="-p 4002 --manage-gids"
..

3. Reiniciar servicios:

sudo /etc/init.d/nfs-kernel-server restart

Stopping NFS kernel daemon: mountd nfsd.
Unexporting directories for NFS kernel daemon....
Exporting directories for NFS kernel daemon....
Starting NFS kernel daemon: nfsd mountd.

4. Comprobar que ahora escucha en el puerto TCP 4000:

sudo rpcinfo -p | grep mountd
    100005    1   udp   4002  mountd
    100005    1   tcp   4002  mountd
    100005    2   udp   4002  mountd
    100005    2   tcp   4002  mountd
    100005    3   udp   4002  mountd
    100005    3   tcp   4002  mountd

Ejemplo reglas iptables

#!/bin/bash

IPTABLES=/sbin/iptables
VIRT_IF="virbr1"
VM="10.0.0.0/24"
KVM_VM_IP="10.0.0.1"
KVM_LAN_IP="192.168.1.2"

NFS_PORTS="
111
4001
2049
4002
"

for port in $NFS_PORTS
do
    if [[ "$port" != "#"* ]]
    then
        $IPTABLES -A INPUT -i $VIRT_IF -s $VM -d $KVM_VM_IP -p tcp --dport $port -j ACCEPT
        $IPTABLES -A INPUT -i $VIRT_IF -s $VM -d $KVM_VM_IP -p udp --dport $port -j ACCEPT
    fi
done
# NFSD
$IPTABLES -A INPUT -i $VIRT_IF -s $VM -d $KVM_LAN_IP -p tcp --dport 2049 -j ACCEPT

NFSv4

Instalacion

IMPORTANTE NFSv4 exporta de forma distinta que NFSv3. En este ejemplo vamos a exportar:

Directorio donde se alojan los archivos Punto de montaje en el servidor
/srv/www /srv/nfs/cliente1.example.com/www
/srv/svn /srv/nfs/cliente1.example.com/svn

1. Servidor:

sudo aptitude install nfs-common nfs-kernel-server

2. Cliente:

sudo aptitude install nfs-common

NOTA: en principio rpcbind NO hace falta

Configuracion comun (misma en servidor y cliente)

1. Configurar los siguientes archivos:

/etc/default/nfs-common

# If you do not set values for the NEED_ options, they will be attempted
# autodetected; this should be sufficient for most people. Valid alternatives
# for the NEED_ options are "yes" and "no".

# Do you want to start the statd daemon? It is not needed for NFSv4.
NEED_STATD=

# Options for rpc.statd.
#   Should rpc.statd listen on a specific port? This is especially useful
#   when you have a port-based firewall. To use a fixed port, set this
#   this variable to a statd argument like: "--port 4000 --outgoing-port 4001".
#   For more information, see rpc.statd(8) or http://wiki.debian.org/SecuringNFS
STATDOPTS=

# Do you want to start the idmapd daemon? It is only needed for NFSv4.
NEED_IDMAPD=yes

# Do you want to start the gssd daemon? It is required for Kerberos mounts.
NEED_GSSD=

/etc/idmapd.conf

[General]

Verbosity = 1
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
domain = dev.local.legido.com

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

IMPORTANTE: es clave la entrada “domain”, que en mi caso es la misma en el servidor que en el cliente (quiza no sea necesario)

Configuracion servidor

0. Realizar los pasos anteriores

1. Configurar los siguientes archivos:

/etc/exports

/srv    cliente1.example.com/255.255.255.0(rw,no_root_squash,no_subtree_check,crossmnt,fsid=0)

2. Se reinicia el servicio:

sudo exportfs -rav

Configuracion cliente

1. Ver los recursos que ofrece el servidor:

sudo showmount -e nfs_server.example.com

2. Montar el recurso:

sudo mount -v -t nfs4 nfs_server.example.com:/ /mnt/nfs

3. Comprobar permisos:

ls -la /mnt/nfs

NO deberia pertenecer a nobody:nogroup

4. Para montar definitivamente editar:

sudo vim /etc/fstab

Y anyadir la siguiente entrada:

 nfs_server.example.com:/ /mnt/nfs 	nfs users 0 0

5. Ahora lo puede montar cualquier usuario:

mount /mnt/nfs
informatica/linux/nfs.txt · Last modified: 2015/04/13 20:19 by 127.0.0.1