Compartir archivos en Linux: NFS

NFS (Network File System) es un protocolo de red que permite montar un directorio de una máquina remota en nuestra máquina y trabajar en él como si fuera un directorio local. De esta manera podemos compartir un directorio (y todo lo que cuelga de él) con las demás máquinas Linux de nuestra red local.

El protocolo NFS se implementa con arquitectura cliente-servidor, por lo que necesita:

  • un servidor NFS en la máquina remota, la que exporta el directorio.
  • un cliente NFS en la máquina local, la que monta el directorio.

Recursos

NFS trabaja sobre RPC

El servidor NFS trabaja sobre RPC (Remote Procedure Call), protocolo que utiliza como capa de transporte UDP.

  • Los servidores que trabajan sobre RPC (como NFS), no tienen puertos asignados oficialmente, por lo que cuando arrancan, contactan con el daemon portmap y le informan de qué puerto usan.
  • Cuando un cliente quiere contactar con un servidor RPC, contacta primero con portmap (que escucha en el puerto 111 TCP) y le pregunta cuál es el puerto correspondiente al servidor en cuestión. Una vez que conoce ese dato, el cliente ya puede contactar directamente con el servidor.

Para ver los servicios RPC que tenemos activos y el puerto utilizado por cada uno, haremos:

$ rpcinfo -p

obteniendo (antes de instalar NFS) algo similar a:

programa vers proto puerto
 100000    2   tcp    111  portmapper
 100000    2   udp    111  portmapper
 100024    1   udp  32768  status
 100024    1   tcp  32899  status

Servidor NFS

  • Una vez instalado el servidor NFS (nfs.sourceforge.net, paquete nfs-kernel-server), editaremos el archivo de configuración /etc/exports para definir qué directorios exportamos y quién puede acceder. La sintaxis de /etc/exports es la siguiente:
    <directorio_exportado> <host_que_puede_acceder>(opciones)

    Por ejemplo:

    /home/francis 192.168.0.0/255.255.255.0(rw,sync)
    /home/sergio 192.168.0.2(ro,sync) 192.168.0.4(rw,sync)

    La opción ro es para sólo lectura y rw para lectura y escritura.

  • Guardamos los cambios y reiniciamos el servidor:
    # /etc/init.d/nfs-kernel-server restart
  • El servidor NFS tiene varios demonios, siendo los principales nfsd, rpc.mountd, rpc.statd y lockd.
  • Veamos los servicios RPC que tenemos activos una vez instalado el servidor NFS:
    $ rpcinfo -p
    programa vers proto puerto
     100000    2   tcp    111  portmapper
     100000    2   udp    111  portmapper
     100024    1   udp  32768  status
     100024    1   tcp  32899  status
     100003    2   udp   2049  nfs
     100003    3   udp   2049  nfs
     100003    4   udp   2049  nfs
     100003    2   tcp   2049  nfs
     100003    3   tcp   2049  nfs
     100003    4   tcp   2049  nfs
     100021    1   udp  32786  nlockmgr
     100021    3   udp  32786  nlockmgr
     100021    4   udp  32786  nlockmgr
     100021    1   tcp  59688  nlockmgr
     100021    3   tcp  59688  nlockmgr
     100021    4   tcp  59688  nlockmgr
     100005    1   udp    903  mountd
     100005    1   tcp    906  mountd
     100005    2   udp    903  mountd
     100005    2   tcp    906  mountd
     100005    3   udp    903  mountd
     100005    3   tcp    906  mountd
  • Para ver los directorios que están siendo compartidos haremos:
    # exportfs
  • Podemos saber los clientes NFS conectados mirando /var/lib/nfs/rmtab:
    $ cat /var/lib/nfs/rmtab

Cliente NFS

  • Para montar un directorio exportado usaremos mount, que es el cliente para NFS:
    # mount -t nfs 192.168.0.4:/home/francis /mnt
  • Lo desmontaremos con umount:
    # umount /mnt
  • Para montarlo durante el arranque añadiremos una línea a /etc/fstab:
    # File_system             Mount_point Type Options       Dump Pass
    192.168.0.4:/home/francis /mnt        nfs  rw,hard,intr  0    0

Artículos en la categoría "Servidores (software)"

  1. Monitorizar servidores con Nagios
  2. Monitorizar routers SNMP con MRTG
  3. Administración de máquinas Linux con Webmin
  4. Shell remoto con Telnet
  5. Servidor DNS Bind
  6. Servidor de IPs dinámicas DHCP
  7. Servidor de hora NTP
  8. Servidor proxy Squid
  9. Servidor de correo electrónico
  10. Servidor de terminales LTSP
  11. Servidor web Apache
  12. Soporte para PHP en Apache
  13. Soporte para CGI en Apache
  14. Analizador de logs de Apache
  15. Servidor de base de datos MySQL
  16. Servidor web Lighttpd
  17. Whois: Quién es el propietario de un dominio
  18. Servidor de archivos FTP
  19. Compartir archivos en Linux: NFS
  20. Compartir archivos en Windows: Samba
  21. Control de versiones: CVS y Subversion
  22. Servidor de streaming por Internet
  23. Servidor de streaming en red local

3 Comments:

  1. si tengo todo exelente mente montado paso a paso el fstab,exports,hosts.deny(allow),portmap pero al momento de reiniciar el demonio medice que el directorio no existe que sera ese error si ya verifique todo paso por paso alguien alguna ayuda ?

  2. gracias maestro me sirvio de mucho

  3. Tengo un servidor y dos placas de red una wifi y otra lan, configuradas en nfs, funcionan muy bien, también comparten recursos como impresoras, dvd con el servidor, anda muy bien, pero…cuando entra el segundo cliente sea en el orden que sea, el primero que estaba andando bien, deja de conectarse y el último en conectarse anda. Es decir los clientes andan individualmente, cuando están los dos encendidos, anda uno solo, el último en conectarse. Algo me está faltando, me vengo rompiendo la cabeza y no le encuentro la vuelta, tampoco está en la red, si no no hacía la consulta. Alguna idea la agradecería enormemente. Gracias