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ística | NFSv3 | NFSv4.x |
|---|---|---|
| Puertos | 2049 y servicios RPC auxiliares | Principalmente TCP 2049 |
| Estado y locking | Servicios separados | Integrado en el protocolo |
| Seguridad | AUTH_SYS y RPCSEC_GSS según implementación | Mejor integración con RPCSEC_GSS/Kerberos |
| Namespace | Exportaciones independientes | Pseudofilesystem unificado |
| Uso recomendado | Compatibilidad heredada | Nuevas 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.
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
| Modo | Protección |
|---|---|
sec=krb5 | Autentica usuarios y servicios |
sec=krb5i | Autenticación e integridad de cada operación |
sec=krb5p | Autenticació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.
