lunes, 11 de febrero de 2008

Montar disco de Red NFS

aptitude install portmap nfs-user-server


/etc/exports
Contiene una linea por directorio a compartir. La estructura de dicha linea es:

directorio equipo1(opcion11,opcion12) equipo2(opcion21,opcion22)

donde:

directorio: Es el directorio a compartir.
equipox: Clientes que tendrán acceso al directorio compartido. Estos equipos se podrán indicar por su IP o dirección DNS(por ejemplo: mi_equipo.ral.com o 192.168.0.69). Recomiendo usar la IP.
optionxx: Son las opciones que nos permitirán tener acceso a esos directorios con determinados privilegios.

* ro | rw : Con la opción ro el directorio será compartido de solo lectura. Esta opción está por defecto.y con la opción rw se permitirá tanto acceso de lectura como de escritura.
* sync | async : sync es la opción recomendada, ya que se ha de respetar el protocolo NFS, es decir, no se responden a las peticiones antes de que los cambios realizados sean escritos al disco. Con la opción async se permite mejorar el rendimiento y agilizar el funcionamiento global, pero supone un riesgo de corrupción de archivos o del sistemas de ficheros en casos de caidas del servidor y/o errores de éste.
* root_squash | no_root_squash | all_squash : root_squash indica que un cliente identificado como root tendrá acceso al directorio con privilegios de un usuario anónimo. Si seleccionamos la opción no_root_squash evitaremos esto, y si indicamos all_squash, entonces aplicaremos esto último a todos los usuarios, no sólo root.

Un ejempo de fichero /etc/exports es el siguiente:
/home/usuario/datos 192.168.0.0(ro,sync,root_squash)
/tmp 192.168.0.0(rw,sync,no_root_squash)

Los ficheros /etc/hosts.allow y /etc/hosts.deny tienen la siguiente estructura:
servicio: host [o red/mascara_subred], host [o red/mascara_subred]

servicio : Es el servicio que estará permitido o denegado para algunas IP’s, en nuestro caso serán portmap y rpc.nfsd.
host [o red/mascara_subred] : Indicará la IP del host de un posible cliente. También pueden indicarse redes con sus correspondientes mascaras de subred.

/etc/hosts.deny
En este fichero pondremos todas las restricciones posibles para hacer mas seguro el sistema. Para ello denegaremos el acceso a portmap, ya que si se deniega portmap, aunque permitas nfs, no se podrá compartir porque éste depende de portmap. Por lo que solo se tendrá acceso a portmap por aquellos equipos que estén definidos en el fichero /etc/hosts.allow. El fichero /etc/hosts.deny quedará:
portmap:ALL

/etc/hosts.allow
En este fichero debe indicar a quienes permitimos el acceso al servicio de nfs y portmap. Se pueden indicar hosts individuales o una red.
portmap:192.168.0.0/255.255.255.0
nfs:192.168.0.0/255.255.255.0


Después de configurarlo:
/etc/init.d/nfs-user-server restart
/etc/init.d/portmap restart

Para ver si está corriendo el server escribimos desde uno de los clientes:

rpcinfo -p < dirección IP >
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100003 2 udp 2049 nfs
100003 2 tcp 2049 nfs
100005 1 udp 745 mountd
100005 2 udp 745 mountd
100005 1 tcp 748 mountd
100005 2 tcp 748 mountd


Aquí podemos ver que postmapper está escuchando en el puerto 111, que el servidor nfs escucha en el 2049 y que muntd escucha en el 745 y 748. Este último cambiará de puerto de escucha cada vez que reiniciemos el servicio, así que si queremos conectar el disco a una máquina de internet, tendremos que abrir en el firewall un rango de puerto.

Yo no he visto en ningún sitio documentación donde explique que puertos son los que usa, pero en mi firewall he definido una regla que permita la conexión a la IP de mi servidor de NFS entre para los puertos 111, 2049 y desde el 700 hasta el 900. He visto que entre esos puerto siempre se levante mountd.

Para montar el disco desde el cliente simplemente hacemos:

mount -t nfs < dirección ip >:/directorio/definido/en/el/server/nfs /directorio/destino