NFS (Network File System) permite que varios servidores Linux monten un mismo directorio remoto por la red como si fuera un disco local. Es la forma más sencilla de compartir datos de aplicaciones, subidas de usuarios o copias de seguridad entre máquinas de la misma red. En este tutorial configurarás un servidor NFS en Ubuntu 24.04, exportarás un directorio a una red privada, lo montarás desde un cliente y harás que el montaje sobreviva a los reinicios.

Requisitos previos

Para seguir esta guía necesitas:

  • Dos servidores con Ubuntu 24.04 LTS, por ejemplo dos VPS de CubePath: uno hará de servidor NFS y otro de cliente.
  • Un usuario no root con privilegios sudo en ambos.
  • Conectividad entre los dos servidores, idealmente por una red privada. En los ejemplos el servidor tiene la IP 10.0.0.10, el cliente 10.0.0.20 y la red es 10.0.0.0/24. Sustitúyelas por las tuyas.
  • UFW activo en el servidor (si no lo tienes, revisa antes que el acceso SSH esté permitido).

Paso 1: Instalar el servidor NFS

En el servidor, instala el paquete nfs-kernel-server, que incluye el servidor NFS del kernel y las utilidades de exportación:

sudo apt update
sudo apt install nfs-kernel-server

El servicio arranca y queda habilitado automáticamente. Compruébalo:

sudo systemctl status nfs-server
● nfs-server.service - NFS server and services
     Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; preset: enabled)
     Active: active (exited) since ...

El estado active (exited) es normal: el servicio solo configura los hilos del kernel nfsd, que son los que atienden las peticiones.

Paso 2: Crear el directorio compartido

Crea el directorio que vas a exportar. /srv es la ubicación estándar para datos servidos por la máquina:

sudo mkdir -p /srv/nfs/compartido

Por defecto NFS aplica root_squash: las operaciones que hace root en el cliente se ejecutan en el servidor como el usuario nobody. Para que el directorio sea escribible en ese caso, asígnalo a nobody:nogroup:

sudo chown nobody:nogroup /srv/nfs/compartido
sudo chmod 0775 /srv/nfs/compartido

Si el directorio lo van a usar usuarios normales, los permisos se comprueban por UID y GID numéricos, no por nombre. El usuario deploy con UID 1001 en el cliente solo podrá escribir si en el servidor el directorio pertenece al UID 1001 (o a un grupo con ese GID). Comprueba el UID con id nombre_usuario en ambas máquinas y mantenlos iguales.

Paso 3: Configurar las exportaciones

Las exportaciones se definen en /etc/exports, una línea por directorio con el formato directorio cliente(opciones). Abre el archivo:

sudo nano /etc/exports

Añade al final esta línea para compartir el directorio con toda la red privada:

/srv/nfs/compartido 10.0.0.0/24(rw,sync,no_subtree_check)

Las opciones significan:

OpciónEfecto
rwPermite lectura y escritura. Usa ro para solo lectura.
syncEl servidor confirma la escritura solo cuando está en disco. Es más lento que async, pero no pierde datos si el servidor se cae.
no_subtree_checkDesactiva la comprobación de subárbol, que da problemas cuando se renombran archivos abiertos. Es el valor recomendado.

root_squash está activo por defecto y no hace falta escribirlo. No uses no_root_squash salvo que un cliente concreto lo necesite, porque da a su root control total sobre los archivos exportados.

Para limitar el acceso a un solo cliente, pon su IP en lugar de la red. Varios clientes con opciones distintas van en la misma línea separados por espacios:

/srv/nfs/compartido 10.0.0.20(rw,sync,no_subtree_check) 10.0.0.21(ro,sync,no_subtree_check)

Guarda el archivo y aplica la configuración sin reiniciar el servicio:

sudo exportfs -ra

Comprueba las exportaciones activas y sus opciones efectivas:

sudo exportfs -v
/srv/nfs/compartido
		10.0.0.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

Si hay un error de sintaxis en /etc/exports, exportfs -ra lo muestra con el número de línea.

Paso 4: Abrir el cortafuegos

Los clientes NFSv4 solo necesitan el puerto TCP 2049. Permítelo únicamente desde la red privada:

sudo ufw allow from 10.0.0.0/24 to any port 2049 proto tcp

Verifica la regla:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
2049/tcp                   ALLOW       10.0.0.0/24

Paso 5: Instalar el cliente y montar el recurso

En el cliente, instala nfs-common, que aporta el programa mount.nfs:

sudo apt update
sudo apt install nfs-common

Crea el punto de montaje:

sudo mkdir -p /mnt/compartido

Monta el directorio remoto. Ubuntu 24.04 negocia automáticamente la versión más alta que soporten ambos extremos (NFS 4.2):

sudo mount -t nfs 10.0.0.10:/srv/nfs/compartido /mnt/compartido

Comprueba que está montado y con qué versión:

df -h /mnt/compartido
nfsstat -m
Filesystem                      Size  Used Avail Use% Mounted on
10.0.0.10:/srv/nfs/compartido    78G  4.1G   74G   6% /mnt/compartido

/mnt/compartido from 10.0.0.10:/srv/nfs/compartido
 Flags:	rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.0.20,local_lock=none,addr=10.0.0.10

El tamaño que ves es el del disco del servidor, no el del cliente.

Paso 6: Probar lectura y escritura

Crea un archivo desde el cliente como root:

sudo touch /mnt/compartido/prueba-cliente.txt
ls -l /mnt/compartido
-rw-r--r-- 1 nobody nogroup 0 sep 25 10:12 prueba-cliente.txt

El propietario es nobody:nogroup, lo que confirma que root_squash funciona. Si ahora listas /srv/nfs/compartido en el servidor, verás el mismo archivo.

Paso 7: Montar el recurso automáticamente al arrancar

Para que el montaje persista tras un reinicio, añádelo a /etc/fstab en el cliente. Primero haz una copia de seguridad del archivo:

sudo cp /etc/fstab /etc/fstab.bak
sudo nano /etc/fstab

Añade esta línea al final:

10.0.0.10:/srv/nfs/compartido  /mnt/compartido  nfs  defaults,_netdev,nofail  0  0
  • _netdev indica a systemd que es un sistema de archivos de red y que debe esperar a que la red esté disponible antes de montarlo.
  • nofail evita que el arranque se detenga en modo de emergencia si el servidor NFS no responde.

Desmonta el recurso, recarga systemd para que lea el nuevo fstab y monta todo lo que contiene:

sudo umount /mnt/compartido
sudo systemctl daemon-reload
sudo mount -a

Si mount -a no muestra nada, la entrada es correcta. Confírmalo:

findmnt /mnt/compartido
TARGET          SOURCE                         FSTYPE OPTIONS
/mnt/compartido 10.0.0.10:/srv/nfs/compartido nfs4   rw,relatime,vers=4.2,...

Reinicia el cliente con sudo reboot y vuelve a ejecutar findmnt /mnt/compartido para comprobar que el montaje se recupera solo.

Paso 8 (opcional): Ajustar el número de hilos del servidor

Con muchos clientes o mucha concurrencia, los hilos nfsd por defecto pueden quedarse cortos. En Ubuntu 24.04 se configuran en /etc/nfs.conf:

sudo nano /etc/nfs.conf

Busca la sección [nfsd], descomenta la línea threads y ajusta el valor:

[nfsd]
threads=16

Reinicia el servicio y comprueba el valor activo:

sudo systemctl restart nfs-server
cat /proc/fs/nfsd/threads
16

Solución de problemas

mount.nfs: access denied by server while mounting: la IP del cliente no está incluida en /etc/exports, o no ejecutaste sudo exportfs -ra tras editarlo. Revisa con sudo exportfs -v en el servidor que la red o IP del cliente aparece.

mount.nfs: Connection timed out: el puerto 2049 está bloqueado. Comprueba sudo ufw status en el servidor y prueba la conectividad desde el cliente con nc -zv 10.0.0.10 2049.

Permission denied al escribir: el directorio del servidor no permite escribir al UID con el que llega la petición. Recuerda que root del cliente llega como nobody, y que los usuarios normales deben tener el mismo UID en cliente y servidor.

Stale file handle: el directorio exportado se borró o se recreó en el servidor mientras estaba montado. Desmonta con sudo umount -l /mnt/compartido y vuelve a montar.

El arranque tarda o se queda esperando: la entrada de fstab no tiene _netdev,nofail. Añádelas para que un servidor NFS caído no bloquee el cliente.

Conclusión

Ya tienes un servidor NFS en Ubuntu 24.04 exportando un directorio solo a tu red privada, y un cliente que lo monta automáticamente al arrancar. A partir de aquí puedes añadir más clientes repitiendo los pasos 5 a 7, exportar directorios de solo lectura con ro para contenido estático, o programar copias de seguridad del directorio exportado directamente en el servidor, donde los datos viven realmente.