NFS Network File System
En este post aprenderemos a compartir archivos con un sistema de archivos de red NFS
🔹 ¿Qué es NFS?
NFS (Network File System - Sistema de archivos de red) es un protocolo que permite que varios equipos (clientes) accedan a archivos a través de una red como si fueran locales.
👉 Fue desarrollado por Sun Microsystems en los años 80, y aún hoy es muy usado en entornos Linux y Unix.
Con NFS puedes tener un servidor central que comparte carpetas o directorios, y otros equipos (clientes) montan esas carpetas en su sistema, accediendo a ellas como si fueran parte de su propio disco duro.

🔹 ¿Cómo funciona?
Servidor NFS
- Tiene carpetas o directorios que decide compartir.
- Usa un archivo de configuración (ejemplo en Linux: /etc/exports) para definir qué carpetas se comparten y con qué permisos.
- Permite controlar quién accede (por IP, por hostname, permisos de lectura/escritura).
Cliente NFS
- Se conecta al servidor a través de la red.
- Monta el recurso compartido (ejemplo: mount -t nfs servidor:/carpeta /mnt/nfs).
- Desde ese momento, puede leer, escribir o ejecutar archivos como si fueran locales.
Instalación Linux
Primero, abre una terminal y asegúrate de que tu sistema esté actualizado. Luego, instala el paquete del servidor NFS.
sudo apt update
sudo apt install nfs-kernel-server
En Linux, el servidor NFS (Network File System) utiliza varios archivos de configuración clave. A continuación te doy una lista de los archivos más importantes que se usan para configurar, controlar y monitorear un servidor NFS, así como su función principal:
📁 Archivos principales de configuración de NFS
Archivo | Propósito |
---|---|
/etc/exports |
Principal archivo de configuración de NFS. Define qué directorios se comparten, con qué permisos y a qué clientes. |
/etc/exports.d/*.exports |
Archivos alternativos que permiten dividir la configuración en varios archivos. Útiles para organización modular. |
/etc/fstab |
Usado principalmente en el cliente, para montar recursos NFS automáticamente al inicio. |
/etc/idmapd.conf |
Configura el servicio idmapd , que traduce los UIDs/GIDs entre el cliente y el servidor. Usado con NFSv4. |
/etc/hosts.allow y /etc/hosts.deny |
Controlan el acceso a servicios como NFS mediante TCP Wrappers (aunque en desuso en sistemas modernos). |
/etc/nfs.conf |
Archivo de configuración general del demonio NFS (nfsd ). Controla ajustes de rendimiento, puertos, etc. (desde Ubuntu 20.04 en adelante). |
🧩 Archivos y rutas relacionados (avanzados o internos)
Archivo o ruta | Descripción |
---|---|
/var/lib/nfs/ |
Directorio que contiene archivos internos de control de NFS. |
/var/lib/nfs/etab |
Registro de los sistemas de archivos exportados actualmente (caché de exportfs ). |
/var/lib/nfs/rmtab |
Registro de clientes que han montado sistemas de archivos exportados. |
/var/lib/nfs/xtab |
Información sobre exportaciones activas (antiguamente usado por mountd ). |
/run/sysconfig/nfs-utils |
Variables de entorno para personalizar el comportamiento de los servicios NFS. |
🛠️ Servicios relacionados con NFS
Para completar el panorama, NFS funciona en conjunto con varios servicios que se controlan mediante systemd
. Por ejemplo:
🔹 systemctl status nfs-server
- Es el servicio principal de NFS.
- Se encarga de exportar los directorios definidos en /etc/exports.
- Escucha en el puerto 2049 (TCP/UDP).
- Coordina con rpcbind y mountd para que los clientes puedan descubrir y montar los directorios.
👉 Sin este servicio activo, no hay servidor NFS.
systemctl status nfs-server
Respuesta:
● nfs-server.service - NFS server and services
Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2025-09-08 15:38:20 UTC; 50s ago
Main PID: 3379 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 1151)
CGroup: /system.slice/nfs-server.service
🔹 systemctl status rpcbind
- Antes se llamaba portmap.
- Su función es mapear servicios RPC a puertos dinámicos.
- Cuando un cliente NFS se conecta, primero consulta al rpcbind en el puerto 111 para preguntar:
- “¿En qué puerto está el servicio mountd? ¿y lockd? ¿y statd?”
- Es necesario en NFSv3 y anteriores.
- En NFSv4 casi no se usa, porque todo funciona directo sobre 2049.
systemctl status rpcbind
Respuesta:
● rpcbind.service - RPC bind portmap service
Loaded: loaded (/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2025-09-08 15:38:18 UTC; 1min 52s ago
Docs: man:rpcbind(8)
Main PID: 2623 (rpcbind)
Tasks: 1 (limit: 1151)
CGroup: /system.slice/rpcbind.service
└─2623 /sbin/rpcbind -f -w
🔹 systemctl status nfs-mountd
- Es el demonio mountd.
- Atiende las solicitudes de montaje de los clientes NFS.
- Verifica los permisos definidos en /etc/exports y decide si el cliente puede montar un directorio.
- Normalmente usa puertos dinámicos, pero se puede fijar uno en /etc/nfs.conf.
- Necesario en NFSv3, no tanto en NFSv4.
systemctl status nfs-mountd
Respuesta:
● nfs-mountd.service - NFS Mount Daemon
Loaded: loaded (/lib/systemd/system/nfs-mountd.service; static; vendor preset: enabled)
Active: active (running) since Mon 2025-09-08 15:38:20 UTC; 2min 0s ago
Main PID: 3377 (rpc.mountd)
Tasks: 1 (limit: 1151)
CGroup: /system.slice/nfs-mountd.service
└─3377 /usr/sbin/rpc.mountd --manage-gids
🔹 systemctl status nfs-idmapd
- Es el servicio de mapeo de identidades (idmapd).
- Traduce los UID/GID de Linux a nombres de usuario/grupos entre diferentes máquinas.
- Es importante en NFSv4, porque este usa nombres (ej: usuario@dominio) en lugar de solo números UID/GID.
- Si no está funcionando, puedes tener problemas de permisos: en el cliente ves archivos como nobody:nogroup.
systemctl status nfs-idmapd
Respuesta:
● nfs-idmapd.service - NFSv4 ID-name mapping service
Loaded: loaded (/lib/systemd/system/nfs-idmapd.service; static; vendor preset: enabled)
Active: active (running) since Mon 2025-09-08 15:38:20 UTC; 2min 6s ago
Main PID: 3375 (rpc.idmapd)
Tasks: 1 (limit: 1151)
CGroup: /system.slice/nfs-idmapd.service
└─3375 /usr/sbin/rpc.idmapd
📌 Notas importantes
- Si usas NFSv4, se recomienda no exportar múltiples subdirectorios directamente, sino definir un root export, como
/export
, y montar todo debajo de él. - Las versiones modernas de NFS en Ubuntu utilizan
nfs-utils
, que centraliza parte de la configuración en/etc/nfs.conf
.
📄 Ejemplo de cada archivo de configuración
📄 Ejemplo de /etc/exports
Este archivo define qué directorios se comparten, con qué permisos y a qué clientes.
# Compartir el directorio /mnt/nfs_share a cualquier cliente con permisos de lectura/escritura
/mnt/nfs_share *(rw,sync,no_subtree_check)
# Compartir a una red específica (por ejemplo, red local 192.168.1.0/24)
/mnt/public 192.168.1.0/24(rw,sync,no_root_squash)
# Compartir solo a un cliente específico con solo lectura
/var/backups 192.168.1.50(ro,sync)
Explicación de algunas opciones:
- rw -> Lectura y escritura
- ro -> Solo lectura
- sync -> Escribir los cambios al disco inmediatamente
- no_subtree_check -> Desactiva verificación de subdirectorios (mejora rendimiento)
- no_root_squash -> El root del cliente sigue siendo root en el servidor (¡peligroso!)
- root_squash -> Convierte al root del cliente en 'nobody' (más seguro)
Después de editar este archivo, recuerda aplicar los cambios con:
sudo exportfs -ra
📄 Ejemplo de /etc/idmapd.conf
(solo para NFSv4)
Este archivo se usa para mapear usuarios y grupos entre cliente y servidor NFS cuando se usa NFSv4.
[General]
Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
Domain = ejemplo.local
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
- El campo
Domain
debe coincidir en el cliente y el servidor para que el mapeo UID/GID funcione correctamente. - Puedes comprobar el dominio con
nfsidmap -c
.
📄 Ejemplo de /etc/nfs.conf
(configuración global, desde Ubuntu 20.04)
Este archivo define parámetros generales del demonio NFS.
[nfsd]
threads=8
[mountd]
port=32767
[statd]
port=32765
outgoing-port=32766
[lockd]
port=32768
udp-port=32768
tcp-port=32768
Esto es útil cuando deseas definir puertos fijos para facilitar la configuración de firewalls.
📄 Ejemplo de /etc/fstab
(en el cliente, para montaje automático)
# Montar automáticamente un recurso NFS al iniciar el sistema
192.168.1.100:/mnt/nfs_share /mnt/nfs_client nfs defaults 0 0
Perfecto. Vamos a armar una configuración completa y segura de un servidor NFS para una red local (por ejemplo, 192.168.1.0/24
) en Ubuntu Desktop. Vamos paso a paso, suponiendo que quieres compartir un directorio llamado /mnt/nfs_share
con otros equipos de tu red.
✅ Resumen de la configuración
- Servidor NFS: Ubuntu Desktop
- Red local:
192.168.1.0/24
- Directorio compartido:
/mnt/nfs_share
- Permisos: Lectura y escritura
- Seguridad: Permitir acceso solo desde la red local
- Cliente NFS: Otro equipo Ubuntu en la misma red
🧰 Iniciar servidor NFS en el servidor en Linux
📁 Paso 1: Crear el directorio a compartir
sudo mkdir -p /mnt/nfs_share
sudo chown nobody:nogroup /mnt/nfs_share
sudo chmod 777 /mnt/nfs_share
Respuesta al revisar con ls -al
drwxr-xr-x 3 root root 4096 Sep 8 16:00 mnt
Puedes personalizar los permisos si deseas más control (por ejemplo, usar usuarios/grupos específicos).
📝 Paso 2: Configurar /etc/exports
Edita el archivo:
sudo nano /etc/exports
Agrega esta línea:
/mnt/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check)
Explicación:
192.168.1.0/24
: solo los dispositivos de tu red local podrán acceder.rw
: lectura y escritura.sync
: garantiza que los datos se escriban en disco antes de responder.no_subtree_check
: mejora el rendimiento y evita errores si se reorganiza el directorio.
Guarda y cierra el archivo (Ctrl+O
, Enter, luego Ctrl+X
).
🔄 Paso 3: Exportar el recurso y reiniciar el servicio
sudo exportfs -ra
sudo systemctl restart nfs-kernel-server
🔥 Paso 4: Configurar el firewall (si lo tienes activo)
sudo ufw allow from 192.168.1.0/24 to any port nfs
Opcionalmente:
sudo ufw enable
🔎 Paso 5: Verificar que el recurso esté compartido
showmount -e
Deberías ver algo como:
Export list for tu-hostname:
/mnt/nfs_share 192.168.1.0/24
💻 Configurar el cliente NFS Ubuntu
En la máquina cliente (otro Ubuntu):
Instala NFS client:
sudo apt install nfs-common
Crea el punto de montaje:
sudo mkdir -p /mnt/nfs_client
Monta el recurso manualmente para probar:
sudo mount 192.168.1.100:/mnt/nfs_share /mnt/nfs_client
(Reemplaza 192.168.1.100
con la IP de tu servidor NFS)
Si funciona, puedes hacer el montaje permanente editando /etc/fstab
:
sudo nano /etc/fstab
Y agrega esta línea:
192.168.1.100:/mnt/nfs_share /mnt/nfs_client nfs defaults 0 0
💻 Configurar el cliente NFS Windows
🔹 Habilitar el cliente NFS en Windows
- Abre Panel de Control → Programas → Activar o desactivar las características de Windows.
- Busca Cliente para NFS y actívalo.
- En Windows Server se llama Servicios para NFS.
- Reinicia si es necesario.

También lo puedes habilitar por PowerShell:
Enable-WindowsOptionalFeature -Online -FeatureName ServicesForNFS-ClientOnly -NoRestart
🔹 Montar el recurso NFS
Abre CMD o PowerShell como administrador y usa el comando mount
.
Ejemplo:
mount \\192.168.33.10\mnt\nfs_share T:
📌 Donde:
<IP-o-hostname>
= dirección de tu servidor NFS./nfs_share
= carpeta exportada en el servidor.Z:
= letra de unidad en Windows.
🔹 Verificar montajes activos
mount
Respuesta
-------------------------------------------------------------------------------
T: \\192.168.33.10\mnt\nfs_share UID=-2, GID=-2
rsize=131072, wsize=131072
mount=soft, timeout=1.6
retry=1, locking=yes
fileaccess=755, lang=ANSI
casesensitive=no
seg.=sys

Para desmontar:
umount Z:
🔹 Notas importantes
- Windows solo soporta NFSv2 y NFSv3, no NFSv4 (al menos en versiones estándar de Windows 10/11).
- Si tu servidor solo exporta en NFSv4, Windows no lo podrá montar.
- Requiere permisos correctos en el servidor (puede ser necesario exportar con
no_root_squash
oanonuid/anongid
).
🧪 Probar la conexión
En el servidor
showmount -a
En el cliente:
nano /mnt/nfs_share/saludo.txt
Hola desde el cliente
Guardamos, luego verifica en el servidor:
ls /mnt/nfs_share
Deberías ver el archivo saludo.txt
.