Network File System (NFS): ¿qué es y para qué se utiliza?
Si trabajas en entornos profesionales donde la colaboración entre equipos es vital, necesitas tener algún sistema para compartir archivos. Hoy queremos hablarte de un viejo conocido que sigue vigente: el Network File System (NFS). Es una de esas tecnologías veteranas, fiables y especialmente usadas en el mundo de los servidores y Linux.
- ¿Qué es Network File System (NFS)?
- ¿Para qué se utiliza NFS en entornos profesionales?
- ¿Cómo funciona el protocolo NFS?
- Diferencias principales entre las versiones NFSv3 y NFSv4
- Ventajas de implementar NFS
- Instalación y configuración básica de un servidor NFS
- Seguridad y control de acceso en entornos NFS
- Optimización del rendimiento y monitorización
- Alternativas modernas al protocolo NFS
¿Qué es Network File System (NFS)?
Network File System es un protocolo desarrollado originalmente por Sun Microsystems a mediados de los años 80, creado con el objetivo de permitir que diferentes equipos dentro de una red compartan directorios y archivos de forma transparente.
El patrón de uso que propone NFS es muy sencillo, ya que permite acceder a los recursos como si estuvieran en un disco local, igual que cualquier otro archivo de tu disco duro, aunque los datos puedan estar realmente alojados en servidores remotos, en redes muy distantes.
Esa transparencia de uso permite trabajar de forma remota pero manteniendo el acceso tan sencillo como si los datos estuvieran alojados en discos locales, lo que resulta especialmente útil para la operativa del día a día. Además, desde el punto de vista del administrador, le permite gestionar el almacenamiento de manera centralizada, lo que aporta muchas facilidades operativas.
¿Para qué se utiliza NFS en entornos profesionales?
Puedes usar NFS en muchos tipos de entornos, como por ejemplo en casa cuando montas un NAS. Sin embargo, donde se le saca más partido es el entornos profesionales. Vamos a ver algunos usos destacados.
Centralización del almacenamiento de archivos
En la operativa diaria es fundamental que los datos estén siempre a mano para el uso de distintos equipos. Con NFS, logramos que todos apunten a un único centro de almacenamiento, lo que facilita las operaciones, evitando tener que mantener distintos soportes de almacenamiento y pudiendo controlar en un único lugar las copias de seguridad y quién tiene permiso para ver cada cosa.
Compartición de recursos entre sistemas Linux y Unix
Al tratarse de un estándar ampliamente soportado, NFS facilita la interoperabilidad entre sistemas de Unix like, lo que incluye cualquier distro de Linux pero también equipos con macOS. Incluso existen servicios que emulan NFS en entornos Windows, por lo que puedes usarlo en la práctica bajo cualquier sistema operativo.
Uso de NFS en clústeres de servidores y virtualización
Cuando manejamos infraestructuras con varios nodos compartiendo aplicaciones o contenedores, NFS se convierte en un aliado esencial. Gracias a su amplio soporte, podemos usarlo para alojar imágenes de máquinas virtuales en soluciones como VMware, Proxmox o Xen. Además, en sistemas de alta disponibilidad, nos ayuda a que todos los nodos vean lo mismo y evitando que la gestión de los datos se complique.
Aplicación en entornos de desarrollo y staging
NFS también resulta ideal para entornos de desarrollo y staging, por ejemplo para compartir código fuente, assets o librerías comunes. Puedes sacarle partido incluso si fuera necesario en producción. De este modo evitamos tener archivos duplicados por todas partes y nos aseguramos de que todos los desarrolladores y los entornos de pruebas funcionen sobre la misma base.
Integración de NFS en arquitecturas de contenedores y Kubernetes
Finalmente queremos destacar el uso en el mundo de los contenedores. Por ejemplo, en Kubernetes, NFS es una de las opciones más sencillas para montar volúmenes persistentes (PV y PVC), que puedan ser leídos por varios pods a la vez. Es perfecto para que las réplicas de nuestra aplicación compartan imágenes o configuraciones en un solo punto, lo que facilita mucho también las operativas de gestión de despliegues.
¿Cómo funciona el protocolo NFS?
Ahora que ya hemos visto hasta qué punto NFS puede resultarnos útil, vamos a explicar en detalle cómo funciona, de modo que podamos entender mejor los flujos de trabajo y las implementaciones de este protocolo..
El papel de las llamadas a procedimientos remotos o RPC
NFS se apoya en un mecanismo llamado «Remote Procedure Call», muy conocido también por sus siglas «RPC». En términos generales, RPC permite que un proceso en nuestro equipo cliente le pida al servidor que ejecute funciones por él. Esto es lo que nos permite acceder a los archivos de forma remota, sin que nuestra aplicación tenga que preocuparse de dónde están físicamente los datos.
El proceso de montaje de directorios remotos
Para empezar a usar NFS realizamos lo que llamamos el montaje del directorio remoto. Esta operación es la que permite asociar el recurso de almacenamiento remoto a una ruta de nuestro sistema local.
Podemos hacer el montaje a mano con el comando mount o dejarlo configurado en el fichero /etc/fstab para que sea automático. Una vez hecha la operación de montaje, veremos ese contenido como si fuera una carpeta más de nuestro propio sistema, dentro del árbol de directorios del ordenador local..
Gestión de permisos y acceso a los datos
NFS utiliza los mismos identificadores de usuario (UID) y grupo (GID) que tenemos en el sistema Linux, que permite controlar el acceso y las distintas operaciones sobre los datos.
La seguridad puede reforzarse mediante opciones como root_squash, que evita que el usuario root del cliente tenga privilegios sobre el servidor, incluso mediante cifrado y autenticación Kerberos en versiones más recientes (NFSv4).
Diferencias principales entre las versiones NFSv3 y NFSv4
Es importante saber con qué versión trabajamos y las diferencias que tienen:
- NFSv3 se basa en llamadas UDP/TCP sin estado, lo que lo hace más rápido, pero menos seguro. Aunque ya hace tiempo que existe una versión más reciente, lo cierto es que NFS 3 se sigue usando bastante, ya sea por el mantenimiento de sistemas legacy o por mejorar la compatibilidad.
- NFSv4 por su parte introduce diversas mejoras. Lo más destacado son las comunicaciones con estado (stateful), cifrado opcional, soporte para firewall a través de un único puerto TCP y control de acceso mediante ACLs. Esta última versión también mejora la compatibilidad con entornos corporativos y reduce la latencia en redes complejas.
No obstante, como decíamos todavía no hay una adopción completa de la versión NFS 4. De hecho entre el 40 al 60% de montajes NFS en empresas usan v3 en la actualidad.
Ventajas de implementar NFS
Aparte de todo lo que hemos explicado hasta el momento, queremos destacar una serie de beneficios que nos parecen muy importantes para entender hasta qué punto NFS puede resultarnos útil en numerosas situaciones.
Permite el acceso compartido a archivos desde múltiples equipos
Esto ya lo hemos comentado: en entornos empresariales es muy habitual que los equipos deban compartir datos o archivos en múltiples sitios. Gracias a NFS, varios servidores podrían acceder simultáneamente a los mismos archivos sin necesidad de replicarlos, evitando que se descontrole nuestro esquema de almacenamiento o que surjan inconsistencias en el uso del día a día.
Centraliza la gestión de datos para facilitar las copias de seguridad
Una de las grandes ventajas de mantener los archivos en un único servidor es que las tareas de backup se hacen mucho más fáciles, ya que no tenemos que hacer copias de datos de múltiples localizaciones, o saber qué copias de esos datos son las más actuales.
También podrías realizar copias mediante snapshot, lo que simplifica enormemente la operativa. Además también se puede emplear almacenamiento redundante en el equipo que gestiona los datos, por ejemplo con RAID o ZFS, lo que hará que la disponibilidad sea mayor y la protección ante fallos.
Reduce el uso de disco local al almacenar datos en el servidor
Otra cosa interesante, especialmente útil cuando trabajamos con servidores y virtualización, es que los clientes NFS apenas necesitan espacio de disco para funcionar. Necesitarán espacio para el sistema operativo y las configuraciones locales pero no para los datos, ya que éstos residen en el servidor central.
Esta pequeña optimización resulta muy interesante porque reduce costos en infraestructura, no solo en el mantenimiento.
Ofrece una configuración sencilla en entornos basados en Linux
Levantar un servidor NFS es un proceso muy directo y transparente en Linux, lo que lo hace ideal tanto para un sistema casero como para una gran empresa. Enseguida veremos cómo lo tenemos que hacer.
Instalación y configuración básica de un servidor NFS
Vamos a meternos en un bloque más práctico, abordando la configuración básica de un servidor NFS. Esta es una guía sencilla y directa para implementar NFS en distribuciones como Ubuntu o Debian, aunque el proceso es muy similar en otras distros que puedas tener.
Requisitos previos del sistema y dependencias
No necesitas nada más que un sistema Linux para hacer de servidor de NFS. Cualquier ordenador podría valer, solo te recomendamos que esté debidamente actualizado.
Como sabes, puedes actualizar el sistema con:
sudo apt update
Luego lanza:
sudo apt upgrade
Luego tienes que Instalar el paquete del servidor NFS de Ubuntu / Debian con este comando:
sudo apt install nfs-kernel-server
Configuración del archivo exports en el servidor
El archivo /etc/exports contiene la configuración principal del servidor NFS en sistemas Linux / Unix. Define qué directorios compartir (exportar) y quién pueden acceder a ellos.
Es un archivo de texto plano, por lo que puedes editarlo con cualquier programa como Nano o Vim.
La estructura básica de este archivo es muy sencilla. Simplemente tienes que agregar líneas que tienen este formato:
RUTA_DIRECTORIO CLIENTES_DESTINO(opciones)
Veamos algunos ejemplos de referencia:
/srv/nfs/data 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
La configuración anterior permite lecturas y escrituras para subred local, root permitido.
/srv/nfs/shared 10.0.0.0/8(ro,sync,no_subtree_check)
En este caso solo se permite lectura para red de IPs que comienzan por 10 (debido a la máscara 10.0.0.0/8.
Realmente las opciones de configuración son muy amplias y merece la pena que estudies opciones mediante el comando:
man exports
Comandos esenciales para montar unidades en el cliente
Ya para los clientes necesitamos instalar otro paquete distinto, mediante el siguiente comando:
sudo apt install nfs-common
Luego necesitamos montar las carpetas de almacenamiento del servidor de NFS mediante el comando mount, lo que generalmente tiene estos pasos:
- Crear el punto de montaje: sudo mkdir /mnt/nfs
- Montar manualmente con sudo mount -t nfs IP_DEL_SERVIDOR:/data /mnt/nfs
Lo más normal es que quieras configurar un montaje automático en el arranque del sistema operativo. Para ello tienes que añadir a /etc/fstab la parte de la configuración de la carpeta a montar
IP_DEL_SERVIDOR:/data /mnt/nfs nfs defaults 0 0
Verificación de la conectividad y estados del servicio
Una vez que ya tienes montadas las carpetas compartidas necesitarás verificar la conectividad, y eventualmente los estados del servicio.
Si estás en el servidor que expone las rutas NFS puedes comprobar el estado del servicio con el comando:
sudo systemctl status nfs-kernel-server
La salida nos dirá el estado del servicio nfs-kernel-server.service, pudiendo ver si está cargado (LOADED) y activo (ACTIVE).
Si estás en el cliente entonces tienes que lanzar otro comando:
showmount -e IP_DEL_SERVIDOR
Eso te permitirá listar exports disponibles. Luego puedes usar el comando siguiente para encontrar más información sobre los discos:
df -h
Opciones de montaje para optimizar la estabilidad
Existen algunas opciones que podemos definir a la hora del montaje de las carpetas compartidas por el servidor NFS. Estas opciones se entregan en el comando de montaje y algunas pueden servir para optimizar estabilidad y rendimiento.
Por ejemplo, aquí tenemos un comando base optimizado:
sudo mount -t nfs -o vers=4,async,noatime,nodiratime,rsize=131072,wsize=131072 IP_DEL_SERVIDOR:/data /mnt/nfs
Algunas opciones para mejorar el rendimiento:
- async: Escritura no bloqueante, cachea escrituras para mejorar rendimiento.
- rsize=131072: Tamaño lectura 128KB, optimiza sobre todo en redes Gigabit.
- wsize=131072: Tamaño escritura 128KB, reduce latencia de operaciones entrada salida.
- vers=4: NFSv4: Mejor rendimiento por la versión reciente.
Algunas opciones para mejorar la estabilidad:
- proto=tcp: Usa TCP que es más estable.
- vers=4: NFSv4 (mejor rendimiento, puerto único 2049, locks stateful).
- noatime: No actualiza el último acceso en lecturas, reduce operaciones de entrada y salida.
- nodiratime: Igual que noatime pero para directorios.
- noac: Desactiva attribute caching, máxima consistencia
Seguridad y control de acceso en entornos NFS
Como has podido apreciar, configurar NFS es relativamente sencillo. Sin embargo, hacer una configuración minuciosa puede resultar complejo, ya que el número de opciones es bastante amplio y puede que las configuraciones cambien bastante dependiendo del objetivo que tengas, o el entorno al que diriges los datos, siendo además altamente variable por la cantidad de casos de uso que existen.
Es por ello que es importante documentarse y estudiar cada caso por separado, priorizando siempre la seguridad para evitar exposiciones en redes no confiables o usos más allá de los necesarios. La cantidad de opciones disponibles haría imposible detallarlas todas en este post pero no queremos dejar de indicar un resumen de los consejos para mejorar la seguridad.
Restricción de acceso mediante direcciones IP
En `/etc/exports` puedes realizar restricciones por direcciones IP. Con la configuración de máscaras puedes limitar las subredes y las operaciones que se permiten en ellas.
Implementación de Kerberos para una autenticación fuerte
Si tienes NFSv4 está disponible Kerberos para disponer de una autenticación más fuerte. La tienes que instalar por separado y configurar en su propio archivo .conf.
Gestión de permisos de usuario y grupos de red
Te recomendamos gestionar los permisos de usuarios y grupos de red tal como estás acostumbrado en Linux, alineando estos valores entre servidor y clientes.
Configuración de firewalls para permitir tráfico NFS
También tendrás que configurar los firewalls para permitir el tráfico NFS. En NFSv4 se usa el puerto TCP 2049. Para NFSv3, añade puertos dinámicos o fija el puerto de RPC en su configuración.
Riesgos de seguridad asociados a las versiones antiguas
Como todo lo que instalas en un servidor, debes mantener siempre paquetes actualizados para mejorar la seguridad. No obstante, debes saber que NFSv3 carece de cifrado nativo y usa UID expuestos, por lo tanto es vulnerable a spoofing. Si quieres mejorar la seguridad, es recomendable migrar a NFSv4 y utilizar Kerberos.
Optimización del rendimiento y monitorización
Así como la seguridad, es importante que realices una optimización del servidor para mejorar el rendimiento, estableciendo opciones como las que habíamos comentado antes. Además, para cargas altas piensa en la posibilidad de crear clústeres.
Ajuste de los parámetros de lectura y escritura
Ajusta los parámetros de opciones de las carpetas compartidas en el servidor y en montajes para bloques grandes, utiliza esta instrucción:
rsize=1048576,wsize=1048576
Uso de nfsstat para el diagnóstico de cuellos de botella
Si quieres saber hasta qué punto se encuentra engrasado tu sistema usa el comando siguiente en tu servidor:
nfsstat -s
Si estás en el cliente tienes que lanzar este comando:
nfsstat -c
Estos comandos te darán estadísticas de RPC, retrasos y errores.
Además puedes monitorear CPU/E/S con los comando vmstat e iostat.
Impacto del ancho de banda y la latencia de red
Ten en cuenta que NFS es especialmente sensible a la latencia. Usa TCP sobre UDP y redes rápidas para eliminarla. En WAN, considera configurar compresión o bien alternativas como Ceph.
Alternativas modernas al protocolo NFS
Aunque NFS sigue siendo confiable para redes locales, las demandas de escalabilidad y resistencia a fallos, así como usos modernos, existen en la actualidad algunas alternativas más poderosas que NFS, que podrías evaluar.
Uso de sistemas de archivos distribuidos como Ceph
Ceph es un almacenamiento distribuido open-source que ofrece bloques (RBD), objetos (RGW) y archivos (CephFS) en un clúster que funciona sin punto único de fallo.
A diferencia de NFS, escala horizontalmente agregando nodos y soporta auto-reparación y replicación automática.
Almacenamiento de objetos frente al acceso por archivos
En la actualidad existen sistemas de almacenamiento de objetos (S3-compatible) que te pueden dar muchas ventajas operativas e integración con numerosas herramientas. Estos sistemas priorizan durabilidad y escalabilidad masiva, sin que te tengas que preocupar por crear tus propios servidores de NFS.
Cuándo migrar de NFS a sistemas basados en S3
NFS está indicado cuando quieras gestionar tu propia infraestructura y cuando tus aplicaciones esperan un sistema de archivos POSIX. También es ideal si tienes pequeñas lecturas y muy frecuentes, porque tiene menos latencia que S3. También es más adecuado cuando necesitas un volumen compartido montado por varios servidores a la vez.
Sin embargo, S3 ofrece actualmente mejores prestaciones en numerosas parcelas, principalmente cuando necesitas escalabilidad ilimitada, resiliencia a fallos distribuidos o reducir el coste por los servicios.
Soluciones de almacenamiento híbrido en la nube
Al final, no descartes el uso de distintas soluciones para sacar el máximo rendimiento al explotar las mejores posibilidades de cada tipo de almacenamiento. Por ejemplo podrías usar NFS local para baja latencia y S3 para archivar las copias de seguridad.
Tienes más información sobre cómo utilizar el almacenamiento NFS en las soluciones para empresas de Arsys en nuestro Centro de Soporte.