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
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:
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:
Espero que esta entrada os haya parecido interesante.