miércoles, 24 de abril de 2013

NFS v4 - Network File System

Me decidí a escribir este post debido a que he usado nfs en Ubuntu y Debian y recuerdo lo fácil que configurar el servidor; pero en Fedora tuve que renegar un poco y buscar bastante información. Tuvo que ver con usar la última versión de NFS (v4) y no encontrar el nombre del servicio que debía habilitar en firewall para que funcione (en las versiones antiguas tenían otro nombre u otra manera de habilitarlos, cargarlos, activarlos). Y como no soy un genio, me dio trabajo.
Ok, pero... ¿para qué me sirve NFS? (no confundirse con NTFS, perdón por la mala palabra;-)
Bueno, básicamente sirve para compartir archivos en red, pero a lo Gnu/Linux style. Nada de redes uindous ni samba. Si están bien las configuraciones basta con montar el directorio remoto compartido para usarlo.
Lo primero que se nota es la velocidad de transferencia. Si, se nota.
Se puede observar una muy buena comparativa entre NFS, FTP, SSH y SMB que se resume en las siguientes tasas de transferencia:

NFS 73Mb/seg
FTP 26Mb/seg
SSH 16Mb/seg
SMB 20Mb/seg

Sin más chachara, manos a la obra...

Para el servidor

Primero lo primero; instalar los paquetes necesarios. Estoy usando Fedora 18 así que:
01 sudo yum -y install nfs-utils system-config-firewall
Cuando termine, hay que activar los nfs necesarios con
01 sudo firewall-config
Después editar el archivo /etc/idmapd.conf (como root por supuesto).
Hay que configurar (si es que no se hizo durante la instalación del sistema) el dominio y desmarcar las líneas [Mapping] para los usuarios nfsnobody.
Ahora se deberían iniciar los servicios rpcbind, nfs-lock, nfs-idmap y nfs-mountd.

01 sudo systemctl start rpcbind.service
02 sudo systemctl start nfs-lock.service
03 sudo systemctl start nfs-idmap.service
04 sudo systemctl start nfs-mountd.service

Además, sería conveniente que se inicien durante el arranque:
01 sudo systemctl enable rpcbind.service
02 sudo systemctl enable nfs-lock.service
03 sudo systemctl enable nfs-idmap.service
04 sudo systemctl enable nfs-mountd.service  
También editar el /etc/exports para agregar la siguiente línea:
/home/usuario/Público 10.0.0.1/24(rw,no_root_squash,no_all_squash,nohide,
                                  no_subtree_check,insecure,sync)
Se debe colocar el rango de ips que tendrán acceso al recurso y el directorio a compartir.

/home/usuario/Público Directorio compartido
rw Lectura/Escritura
sync Síncrono (Tarda un poquito más que con async pero brinda un grado más de seguridad contra errores)
no_root_squash Activa los privilegios de root
no_all_squash Idem anterior pero para el usuario
nohide Que no esté oculto
insecure Hace que NFS use puertos sin privilegios (arriba de 1024)
Guardar y recargar con:
01 sudo /usr/sbin/exportfs -rv
Queda editar el archivo /etc/hosts.allow para permitir a los clientes acceder al servicio; indicando el servicio y el rango de ips.
rpcbind: 10.0.0.1/24
Reiniciar o recargar el firewall.

Cliente

Montar y listo
sudo mount -t nfs -o nfsvers=4 10.0.0.4:/home/usuario/Público ~/Público
Especificar la ip del servidor o dominio, el recurso compartido y el directorio de montaje. En mi caso, como la red usa DHCP debo colocar la ip (por no ser estática).

Fuentes: