NFS es una de las formas más fáciles y transparentes de manejar el almacenamiento compartido dentro de una organización o en una red local casera. El Sistema de archivos de red (NFS) es un protocolo que permite configurar ubicaciones de almacenamiento en tu red. Cuando tienes NFS configurado, los usuarios pueden tratar un disco duro remoto como si estuviera conectado a su computador, tal como lo harían con una memoria USB. Originalmente fue desarrollado en 1984 por Sun Microsystems, con el objetivo de que sea independiente de la máquina, el sistema operativo y el protocolo de transporte (modelo OSI), esto fue posible gracias a que está implementado sobre los protocolos XDR (presentación) y ONC RPC (sesión). El protocolo, está incluido por defecto en los Sistemas Operativos UNIX y la mayoría de distribuciones Linux.
Instalación y Configuración Server
Para esto, me enfocare en 2 distros, Debian y Rocky Linux, pero podría ser en cualquiera, estas harán de servidor, y necesitaremos un cliente. No olviden tener actualizados los sistemas, antes de comenzar.
Debian | Rocky Linux | |
Instalacion | sudo apt install nfs-kernel-server rpcbind | sudo dnf install nfs-utils |
Habilita e inicia el servicio NFS | sudo systemctl enable –now nfs-server | sudo systemctl enable –now nfs-server |
Habilita e inicia el servicio rpcbind | sudo systemctl enable –now rpcbind |
A continuación, nos tocara crear una carpeta que compartir. En el host NFS, cree una ubicación en el sistema de archivos para compartir con los guest. Esto podría ser una unidad separada, una partición separada o simplemente un lugar. Para asegurarse de que el almacenamiento pueda escalar según sea necesario, se recomiendo usar LVM (infórmate sobre volúmenes lógicos, visita LVM y particionamiento estándar), pero ya queda a criterio y consideración de cada quien, con su disponibilidad de hardware.
Suponiendo que su red es 192.168.122.0/24 (siendo la primera dirección posible 192.168.122.1 y la final 192.168.122.254), podría hacer esto:
Debian | Rocky Linux | |
Crea una ubicacion | sudo mkdir –p /mnt/carpeta_compartida | sudo mkdir -p /nfs/exports/carpeta_compartida |
Exportar la ubicación compartida | echo «/mnt/carpeta_compartida 192.168.122.0/24(rw)» > /etc/exports | echo «/nfs/exports/carpeta_compartida 192.168.122.0/24(rw)» > /etc/exports |
Para que el servicio NFS sepa transmitir la existencia de su ubicación compartida (carpeta_compartida), debe agregar la ubicación al archivo /etc/exports, así como la subred a la que desea tener acceso y los permisos de acceso global.
- Establecer propiedad
Dependiendo de dónde hayas creado esta ubicación compartida, es posible que sus permisos no sean adecuados para todos los usuarios de su red. Por ejemplo, /nfs/exports/carpeta_compartida en la partición raíz del disco duro de mi servidor, por lo que todos los directorios son propiedad del usuario raíz, y el grupo raíz tiene permisos de lectura y ejecución. A menos que sus usuarios sean miembros del grupo raíz, esta exportación es de poca utilidad para ellos.
La forma en que establezca los permisos de directorio depende de usted y depende de cómo defina los usuarios y grupos en sus sistemas. Es común administrar directorios por permisos de grupo, agregando usuarios que requieren acceso a directorios específicos al grupo correspondiente. Por ejemplo, si un usuario es miembro del grupo de personal, puede configurar su exportación al personal con permisos 775:
$ sudo chown root:personal /nfs/exports/carpeta_compartida
$ sudo chmod 775 /nfs/exports/carpeta_compartida
Esto otorga a carpeta_compartida, permisos de lectura, escritura y ejecución para todos los miembros del grupo personal. Mientras que para el otro caso (Debian) como cualquier usuario desde los clientes utilizarán el recurso compartido de NFS, el permiso se establece en el usuario nobody y el grupo nogroup.
$ sudo chown nobody:nogroup /mnt/carpeta_compartida
Haga que la carpeta compartida, tenga permisos suficientes para leer y escribir los archivos que contiene. Sin embargo, puede configurar según tus requisitos, por ejemplo: sudo chmod 755 /mnt/carpeta_compartida.
Te recomiendo agregar al final del archivo /etc/exports, la siguiente linea, según sea tu caso de distribucion:
/mnt/carpeta_compartida 192.168.122.173(rw,sync,no_subtree_check) #debian /nfs/exports/carpeta_compartida IP-designada(rw,sync,no_subtree_check) #rockylinux
Donde:
- rw: operaciones de lectura y escritura
- sync: escriba cualquier cambio en el disco antes de aplicarlo
- no_subtree_check: deshabilita la verificación de subárboles
El servidor NFS mantiene una tabla de sistemas de archivos disponibles para los clientes. Para actualizar la tabla, ejecute el comando exportfs junto con el comando -r para exportar todos los directorios de forma recursiva:
$ sudo exportfs -r
- Configura el Firewall
Para que los clientes lleguen al servidor NFS, agrega el servicio NFS al firewall (se supone que lo tienes activo en tu distro). Para el caso de Rocky Linux, con el comando firewall-cmd:
$ sudo firewall-cmd --add-service nfs --permanent
Mientras que si estas en Debian:
$ sudo ufw allow from IP_asignada to any port nfs
Con estos pocos ya tenemos el servidor NFS activo y configurado para el tráfico.
Configuración del lado Cliente
Ahora que haz establecido una ubicación de almacenamiento compartido en tu red, debes configurar sus máquinas cliente para usarla. Dependiendo de la distro, que sea tu maquina clientes, necesitaras el paquete nfs-common Comienza, por crear un punto de montaje para el recurso compartido NFS:
$ sudo mkdir /nfs/imports/compartiendo $ sudo mkdir -p /mnt/compartiendo
Y luego monta el volumen NFS:
$ sudo mount -v -t nfs IP:/nfs/exports/carpeta_compartida /nfs/imports/compartiendo/ $ sudo mount -a nfs IP:/mnt/carpeta_compartida /mnt/compartiendo/
Puede hacer que este sea un proceso permanente y automático agregando el volumen NFS al archivo /etc/fstab del cliente:
IP:/nfs/exports/carpeta-compartida /nfs/imports/compartiendo/ nfs rw 0 0 IP:/mnt/carpeta_compartida /mnt/compartiendo nfs4 defaults,user,exec 0 0
Donde:
- IP:carpeta_compartida = carpeta compartida proveniente del servidor nfs
- /mnt/compartiendo = directorio de montaje en la máquina cliente
- nfs4 = significa nfs versión 4
- defaults,user,exec,rw = Permitir que cualquier usuario monte el sistema de archivos y también permitirles ejecutar archivos binarios, Ademas de operaciones de lectura y escritura.
Puedes verificar que un volumen NFS está montado con el comando de montaje:
$ sudo mount | grep-i nfs
Oh un df -h. Si tienes una red local mayor, en cuanto a numero de equipos, no es eficiente configurar sus máquinas cliente para que reconozcan los volúmenes NFS a mano. En su lugar, use Ansible, Terraform, Chef, entre otras opciones del mercado (aunque depende del caso especifico, elegir una u otra), para automatizar la configuración de sus máquinas cliente, tanto para configurar recursos compartidos de NFS como para actualizar configuraciones cuando sea necesario.
Conclusión
Pues listo lector, ya con esto, podrás desplegar de forma idónea NFS con herramientas propias del sistema, <sarcasmo> ya si quieres después te haces/compras un NAS y te libras de ver tanto comando </sarcasmo>.
Hasta otro post, buenas vibras,
Happy Hacking!