NFS Network File System


En este post aprenderemos a compartir archivos con un sistema de archivos de red NFS

oscar Escrito por oscar 18 October 2024 4 0

🔹 ¿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.

Servidores NFS
Servidores NFS

🔹 ¿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

  1. Abre Panel de ControlProgramasActivar o desactivar las características de Windows.
  2. Busca Cliente para NFS y actívalo.
    1. En Windows Server se llama Servicios para NFS.
  3. Reinicia si es necesario.
Servicio para NFS
Servicio para NFS

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
Imagen nfs montada
Imagen nfs montada

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 o anonuid/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.


Comentario

Debe aceptar antes de enviar