Servidor NFS exportando un sistema de archivos a varios clientes Linux
NFS permite que varios sistemas consuman un árbol de archivos remoto como parte de su jerarquía local.

Actualización editorial: artículo original de 2020, reescrito y ampliado el 31 de octubre de 2026.

Network File System (NFS) es un protocolo de archivos distribuido usado principalmente por sistemas Unix y GNU/Linux. Un servidor exporta directorios y los clientes los montan dentro de su propio árbol. Es común en directorios compartidos, repositorios de contenido, home directories, plataformas de virtualización y almacenamiento para aplicaciones que necesitan semántica de archivos POSIX.

1. NFSv3 frente a NFSv4

CaracterísticaNFSv3NFSv4.x
Puertos2049 y servicios RPC auxiliaresPrincipalmente TCP 2049
Estado y lockingServicios separadosIntegrado en el protocolo
SeguridadAUTH_SYS y RPCSEC_GSS según implementaciónMejor integración con RPCSEC_GSS/Kerberos
NamespaceExportaciones independientesPseudofilesystem unificado
Uso recomendadoCompatibilidad heredadaNuevas implementaciones

2. Preparar un servidor

# RHEL, Rocky, AlmaLinux o Fedora
sudo dnf install nfs-utils

# Debian o Ubuntu
sudo apt update
sudo apt install nfs-kernel-server

# Crear el directorio y una identidad de servicio
sudo mkdir -p /srv/nfs/proyectos
sudo groupadd -f proyectos
sudo chown root:proyectos /srv/nfs/proyectos
sudo chmod 2770 /srv/nfs/proyectos

3. Definir exportaciones

/etc/exports indica qué directorio se comparte, a cuáles clientes y con qué opciones. No uses comodines amplios si puedes declarar una red o hosts concretos.

# /etc/exports
/srv/nfs/proyectos 10.20.30.0/24(rw,sync,root_squash,no_subtree_check)
/srv/nfs/publico   10.20.30.0/24(ro,sync,root_squash,no_subtree_check)

# Cargar y revisar la configuración
sudo exportfs -rav
sudo exportfs -v
sudo systemctl enable --now nfs-server
  • rw/ro: escritura o solo lectura.
  • sync: confirma escrituras después de persistirlas; prioriza integridad.
  • root_squash: mapea al root remoto a una identidad sin privilegios en el servidor.
  • no_subtree_check: evita comprobaciones de subárbol que pueden causar problemas al renombrar.
Evita no_root_squash salvo un caso excepcional y aislado. Un root comprometido en el cliente podría escribir como root en el contenido exportado.

4. Firewall y SELinux

# Firewalld para NFSv4
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --reload

# Confirmar que escucha
sudo ss -lntp | grep ':2049'

# Cuando se exporta contenido con SELinux, revisar booleanos y etiquetas
getsebool -a | grep nfs
ls -Zd /srv/nfs/proyectos

NFSv3 puede requerir mountd y rpc-bind. Si no existe una dependencia heredada, limitar el servidor a NFSv4 simplifica el firewall. En RHEL, la guía de servicios de archivos de red documenta puertos y procedimientos.

5. Montar desde un cliente

# Instalar herramientas
sudo dnf install nfs-utils       # RHEL/Fedora
sudo apt install nfs-common      # Debian/Ubuntu

# Descubrir y montar
showmount -e nfs01.example.com
sudo mkdir -p /mnt/proyectos
sudo mount -t nfs4 nfs01.example.com:/srv/nfs/proyectos /mnt/proyectos

# Verificar versión y opciones negociadas
findmnt -t nfs,nfs4
nfsstat -m
mountstats /mnt/proyectos

Montaje persistente

# /etc/fstab
nfs01.example.com:/srv/nfs/proyectos /mnt/proyectos nfs4 _netdev,nofail,x-systemd.automount 0 0

# Validar la entrada sin reiniciar
sudo systemctl daemon-reload
sudo mount -a
findmnt /mnt/proyectos

_netdev indica dependencia de red. x-systemd.automount crea un automount y puede evitar que el arranque espere por un servidor remoto. nofail es adecuado solo si el montaje no es requisito crítico del sistema.

6. Identidad: UID y GID importan

Con AUTH_SYS, el cliente envía números UID y GID y el servidor confía en esa representación. Si ana es UID 1001 en un equipo y otra persona es UID 1001 en otro, ambas pueden aparecer como el mismo propietario. Directorio corporativo, LDAP o IdM ayudan a mantener identidades coherentes.

# Comparar identidad numérica en servidor y cliente
id ana
getent passwd ana
stat -c '%u %g %A %n' /mnt/proyectos/archivo

7. Kerberos: krb5, krb5i y krb5p

ModoProtección
sec=krb5Autentica usuarios y servicios
sec=krb5iAutenticación e integridad de cada operación
sec=krb5pAutenticación, integridad y privacidad mediante cifrado
# Exportación que exige privacidad Kerberos
/srv/nfs/finanzas 10.20.30.0/24(rw,sec=krb5p,sync,root_squash)

# Cliente
sudo mount -t nfs4 -o sec=krb5p nfs01.example.com:/srv/nfs/finanzas /mnt/finanzas

Servidor y cliente necesitan DNS directo e inverso correctos, relojes sincronizados, principals y keytabs. La guía de RHEL explica cómo integrar NFS con IdM y montajes Kerberos.

8. Rendimiento

No empieces cambiando diez opciones de montaje. Primero mide latencia, pérdida, throughput, CPU, IOPS, tamaño de archivo y concurrencia. rsize y wsize suelen negociarse con valores apropiados; fijarlos sin evidencia puede empeorar el resultado.

nfsstat -c
nfsstat -s
nfsiostat 5
iostat -xz 5
ss -ti dst nfs01.example.com

hard mantiene reintentos ante una interrupción y protege mejor la semántica de escritura; soft puede devolver errores y causar corrupción en aplicaciones que no los gestionan correctamente. Para almacenamiento de datos, hard suele ser la opción segura.

9. Disponibilidad y recuperación

Un servidor con RAID no es alta disponibilidad, y un clúster no es respaldo. Define el RTO y el RPO, luego diseña almacenamiento, dirección flotante o balanceo compatible, fencing, recuperación de estado y comportamiento de los clientes.

  • Respaldar datos, ACL, atributos extendidos y configuración de exportaciones.
  • Probar restauración en una ruta o servidor aislado.
  • Monitorear capacidad, inodos, latencia, errores RPC y disponibilidad de TCP 2049.
  • Probar qué ocurre con aplicaciones durante una pausa del servidor.
  • Documentar dependencias de DNS, Kerberos e identidad.

10. Diagnóstico ordenado

# Servidor
sudo exportfs -v
sudo systemctl status nfs-server
sudo journalctl -u nfs-server --since today
sudo ss -lntp | grep ':2049'

# Cliente
getent hosts nfs01.example.com
rpcinfo -p nfs01.example.com
nfsstat -m
dmesg --level=err,warn | tail -50
sudo journalctl -k --since '-15 min' | grep -i nfs

Valida en orden: DNS, ruta y firewall; versión del protocolo; exportación y red autorizada; identidad; permisos; SELinux; estado del almacenamiento. Mensajes como “access denied” pueden venir de varias de esas capas.

11. NFS administrado en la nube

Servicios como Amazon EFS entregan NFS administrado y elástico. Eliminan la operación de servidores, pero no las decisiones de red, identidad, cifrado, rendimiento, lifecycle y costo. Un servicio administrado reduce componentes propios; no elimina el diseño.

Conclusión

NFS sigue siendo una herramienta esencial porque ofrece una interfaz de archivos conocida y eficiente. Una implementación confiable usa NFSv4, limita clientes, mantiene identidades coherentes, aplica Kerberos cuando el riesgo lo exige y prueba recuperación. Los comandos son la parte fácil; la semántica, la seguridad y el comportamiento ante fallas determinan si el servicio sirve en producción.

Fuentes para ampliar