Instalar y configurar un servidor NFS en Centos 8 y RHEL 8

Lo más probable es que ya sepas que las siglas NFS, son un acrónimo en inglés de «Network File Share«, se trata de un procolo cliente y servidor multiplataforma, que permite que las máquinas de los clientes accedan a un recurso compartido por el servidor NFS a través de una red. Los sistemas cliente pueden montar localmente los sistemas de archivos desde el servidor NFS y acceder a los archivos y directorios, como si estuvieran montados localmente. En esta entrada vamos a ver su instalación y configuración de un servidor NFS, sobre sistemas Centos 8 y RHEL 8.

Hay que tener en cuenta que ambas distribuciones son compatibles con las versiones de NFS 3 y NFS 4. En su versión 3 permite una escritura asincrónica segura y admite tamaños y desplazamiento de archivos de 64 bits. En cambio en su versión 4 funciona a través de un cortafuegos (firewall en inglés) del sistema operativo y es compatible con ACL (Listas de control de acceso) y no quiere el servicio rpcbind.

Para esta entrada me voy a servir de una serie de Servidores Privados Virtuales (VPS) en la llamada nube, en mi proveedor de confianza Clouding.io. Dichos hosts me van a servir para una entrada que estoy preparando sobre microservicios o contenedores, pero de eso hablaremos otro día.

Cuando creamos un nuevo VPS se nos ofrece normalmente una IP pública para comunicarnos con ellos. En el caso de estos hosts también he pedido al crearlos una IP privada, que es la que voy a utilizar para este entrada:

  • IP 10.20.10.6 – Nombre: servnfs.bitsandlinux.com
  • IP 10.20.10.2 – Nombre: servmaster.bitsandlinux.com
  • IP 10.20.10.5 – Nombre: servworker.bitsandlinux.com

La idea es que desde el servidor NFS se comparta un recurso en red, para que lo puedan utilizar los otros dos hosts de la red privada.

Instalar y configurar un servidor NFS en Centos 8 y RHEL 8

Primero de todo nos conectamos al servidor NFS, que tiene como nombre «servnfs». Una vez conectados por SSH, lo ideal es siempre utilizar un usuario diferente de ‘root‘. En nuestro caso voy a crear un usuario llamado «operador«, al que añadiremos al grupo «wheel«, que es el grupo que tiene permisos para utilizar «sudo» en el host. Además desde una máquina «de salto» que tengo por casa con un sistemas Raspbian, he realizado intercambio de llaves con estos hosts. Y ya para finalizar he deshabilitado el acceso al usuario ‘root‘ a estos. Si no sabes muy bien de lo que te estoy hablando puedes consultar estas entradas:

Añadir nuevo usuario a Fedora 31

Usuario administrador con sudo en Linux

SSH sin contraseña en Linux

En cualquier caso, si en estos pasos estáis algo perdidos, me podéis dejar un comentario al final de la entrada y quizás realice un vídeo explicando el procedimiento.

Instalar servidor NFS

Una vez ya estamos dentro del host, instalamos el conjunto de paquetes «nfs-utils» que permitirá que tengamos instalado un daemon con NFS.

sudo dnf install nfs-utils -y

Sí amigos, recordar que en las últimas versiones de Centos, Fedora y RHEL se utiliza DNF en vez de YUM. De hecho en estas versiones YUM solo es un enlace simbólico:

[operador@servnfs ~]$ which yum
/usr/bin/yum
[operador@servnfs ~]$ ls -la /usr/bin/yum
lrwxrwxrwx 1 root root 5 jul 21 20:46 /usr/bin/yum > dnf-3

Vale, una vez instalado procedemos a encender el servicio «nfs-server» y lo añadimos al inicio:

sudo systemctl start nfs-server.service
sudo systemctl enable nfs-server.service

Podemos comnprobar su estado:

sudo systemctl status nfs-server.service

Con el resultado en mi caso:

Comprobamos estado del daemon del servidor NFS

Podemos verificar el protocolo que esta utilizando mediante la herramienta «rpcinfo», como sigue:

[operador@servnfs ~]$  rpcinfo -p | grep nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl

Si queremos añadir configuración adicional debemos tener en cuenta los ficheros «/etc/nfs.conf«,que es la configuración propia del servidor NFS y «/etc/nfsmount.conf«, donde se puede indicar la configuración de los ficheros que NFS debe montar.

Crear y exportar recurso NFS

Me interesa crear un recurso llamado «/mnt/docker«, donde tengo intención en próximas entradas de crear un clúster para microservicios o también conocidos. como contenedores 😉 Pero no adelantemos acontecimientos. Primero de todo creamos dicho recurso:

sudo mkdir -p /mnt/docker

Me interesa que lo utilice el mismo usuario en todos los hosts, este usuario es «operador» y tiene esta información:

uid=1001(operador) gid=1001(operador) grupos=1001(operador),10(wheel)

Por lo que le vamos a asignar ese grupo y usario:

sudo chown -R operador: /mnt/docker

Una vez hecho esto editamos el fichero «/etc/exports«, donde vamos declarar el recurso que vamos a exportar. Lo editamos y añadimos:

/mnt/docker 10.20.10.0/24(rw,sync,all_squash,anonuid=1001,anongid=1001)

De esta manera cualquier equipo de la red lo podrá utilizar. Además tenga el usuario y el grupo por defecto a mi me interesa, que como hemos vista antes es el usuario «operador»

Explico un poco más los parámetros que se utilizan:

  • rw, exporta el directorio en modo lectura y escritura al host cliente.
  • ro, exporta el directorio en sólo modo lectura al host cliente.
  • no_root_squash, no mapea root al usuario anónimo.
  • all_squash, mapea todos los usuarios al usuario anónimo.
  • anonuid=1001, utilizará el usuario con ID 1001
  • anongid=1001, utilizará el grupo con ID 1001

Podemos comprobar que efectivamente se están compartiendo los recursos:

[operador@servnfs ~]$ sudo  exportfs -arv
exporting 10.20.10.0/24:/mnt/docker

Configurar las políticas de cortafuegos para el servidor NFS

En mi caso tengo habilitado el servicio Firewalld, por lo que debo añadir las siguientes reglas, para habilitar los puertos correspondientes:

sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --permanent --add-service=mountd

Y recargamos la configuración:

sudo firewall-cmd --reload

Instalar y configurar el cliente NFS

Al igual que hemos hecho en el servidor NFS debemos hacer lo propìo en el cliente e instalar los paquetes necesarios:

sudo dnf install nfs-utils nfs4-acl-tools -y

Una vez instalados comprobamos que podemos ver información del recurso compartido:</p<

[operador@servmaster ~]$ showmount -e servnfs.bitsandlinux.com
Export list for servnfs.bitsandlinux.com:
/mnt/docker 10.20.10.0/24

A continuación creamos el directorio donde se montará el recurso:

sudo mkdir -p /mnt/docker

Y añadimos la siguiente línea al fichero «/etc/fstab«, que es donde se indican los puntos de montaje:

servnfs.bitsandlinux.com:/mnt/docker /mnt/docker        nfs defaults 0 0

Guardamos y salimos.

Ahora montamos el recurso:

mount -a

Si ha ido todo bien ya lo deberíamos ver al utilizar df -h /mnt/docker, de la siguiente manera:

[operador@servmaster ~]$ df -h /mnt/docker
S.ficheros                           Tamaño Usados  Disp Uso% Montado en
servnfs.bitsandlinux.com:/mnt/docker    40G   2,0G   36G   6% /mnt/docker

Podemos ampliar información del recurso recién montado:

sudo mount | grep -i nfs

Si todo ha ido bien, desde cualquier nodo ya tendríamos que poder acceder y escribir dentro del recurso.

No es la primera vez que hablamos de NFS, en su día vimos como realizar la instalación sobre un sistema Debian:

Compartiendo carpetas en NFS

Espero que esta entrada os haya parecido interesante.