Network filesystems & file services. Proveer / configurar discos compartidos de red mediante NFS.

Introducción.

Centos 7 / RHEL 7 usa una combinación de procesos y soporte a nivel de kernel para proporcionar ficheros compartidos mediante NFS. Todas las versiones NFS dependen de RPC (Remote Procedure Calls) entre cliente y servidor. En Centos7 esta comunicación la gestiona el servicio rpcbind. Los servicios usados por NFS son:

  • nfs-server - Servidor de NFS.
  • nfs-lock - Inicia los procesos RPC apropiados para permitir a los clientes NFS bloquear ficheros en el servidor.
  • rpcbind - Gestiona reserva de puertos para servicios RPC. No se usa con NFSv4.

Instalación

En este capítulo veremos como instalar y configurar un servidor NFS. Entiendo que la configuración cliente forma parte más de otros temas de esta sección.

yum install nfs-utils

Echamos un ojo siempre primero al estado inicial de los servicios, si están activados para su inicio automático y si están o no iniciados.

[]# systemctl is-enabled rpcbind nfs-server nfs-lock 
disabled
static
static

[]# systemctl is-active rpcbind nfs-server nfs-lock
inactive
inactive
unknown

Activamos e iniciamos rpcbind y el servidor pincipal nfs-server

systemctl enable nfs-server
systemctl start nfs-server

OJO: No activamos ni iniciamos rpcbind ni nfs-lock porque no es necesario ya que lo debe iniciar nfs-server (-> 'indirect')


ATENCIÓN.

Si no vamos a usar nfs v3 no necesitariamos el demonio rpcbind pero en la configuración por defecto, si está deshabilitado el servicio rpcbind, obtendremos un error en el inicio del servicio nfs-server. Ello es debido a que por defecto está habilitado en la configuración del servidor NFS la versión nfs 3. Podemos ver las versiones habilitadas.

[]# cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 -4.2

Para deshabilitar nfs v3 lo hacemos en el fichero de configuración /run/sysconfig/nfs-utils cambiando los parametros que se le pasan al demonio (le añadimos a la línea RPCNFSDARGS que no inicie NFS versión 3 con "-N 3". Respetamos las opciones que ya tenga). Quedaría en nuestro caso:

RPCNFSDARGS=" 8 -N 3"

Ahora si podriamos iniciar el servicio nfs-server sin tener iniciado rpcbind y verificar

[]# systemctl start nfs-server
[]# cat /proc/fs/nfsd/versions
-2 -3 +4 +4.1 -4.2

Lo normal sería pensar que el fichero de configuración es el ubicado en "/etc/sysconfig/nfs". Despues de darle muchas vueltas al tema de desactivar nfs v3 en ese fichero sin éxito examiné la configuración del fichero que ejecuta el servicio (lo mejor es hacer un systemctl disable nfs-server ya que nos dice a que fichero enlaza). En este se ve que el fichero de configuración que lee es /run/sysconfig/nfs-utils.


Verificamos el estado de nuestros servicios

[]# systemctl is-enabled rpcbind nfs-server nfs-lock
indirect
enabled
static
[]# systemctl is-active rpcbind nfs-server nfs-lock
active
active
active

Firewall ????

Debemos habilitar (y verificar) los servicios NFS en el firewall

[]# firewall-cmd --list-services
dhcpv6-client ssh

[]# firewall-cmd --permanent --zone=public --add-service nfs
[]# firewall-cmd --permanent --zone public --add-service mountd
[]# firewall-cmd --permanent --zone public --add-service rpc-bind
success
[]# firewall-cmd --reload
success

[]# firewall-cmd --list-services
dhcpv6-client mountd nfs rpc-bind ssh

Creamos un directorio para compartir p.e.

mkdir /var/mi_share 
chmod 777 /var/mi_share/

Configuramos en /etc/exports el servidor NFS para que "exporte" dicho directorio a mi red 192.168.122.162/24:

/var/mi_share     192.168.122.0/24(rw,sync,no_root_squash,no_all_squash)

Donde:

  • /var/mi_share – Dirrectorio a compartir
  • 192.168.122.0/24 – Red, ip, nombre de equipo,... a la que compartir.
  • rw – Lectura y escritura (read/write)
  • sync – Syncronizar el directorio compartido.
  • no_root_squash – Activar el privilegio de root
  • no_all_squash - Activar la autoridad de usuario.

Reiniciamos el servidor (un reload sería suficiente en la mayoría de cambios de configuración). Tambien podemos exportar un nuevo directorio con exporfs -r

systemctl restart nfs-server

Verificamos primero en el propio servidor que estamos exportando correctamente el/los recursos con showmount o exportfs

[]# showmount -e localhost
Export list for localhost:
/var/mi_share 192.168.122.0/24

[]# exportfs -v
/var/mi_share     192.168.122.0/24(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

De igual forma debemos ver desde el cliente los shares.

NOTAS

  • Ver más opciones de montaje.
  • selinux ???? Funciona si monto en otra ruta ???

Referencias

https://www.howtoforge.com/nfs-server-and-client-on-centos-7
http://www.unixmen.com/setting-nfs-server-client-centos-7/

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Storage_Administration_Guide/ch-nfs.html#s2-nfs-how-daemons http://www.certdepot.net/rhel7-provide-nfs-network-shares-specific-clients/