martes, 21 de junio de 2016

Compartir ficheros en red con NFS



Hoy os quiero enseñar el método nativo de compartición de archivos de los sistemas Linux.

NFS siglas de "Network File System" (Sistema de ficheros en red) es un sistema  de compartición de archivos que podemos instalar y configurar en Linux de una forma muy sencilla.

En PC-Citos nos gusta hacer las cosas bien, así que voy a explicar lo que hay que hacer y el motivo.







  1. Estableceremos ip fija para cada aparato al que queramos acceder
  2. Instalaremos el servidor NFS en cada equipo que queramos que comparta archivos y tambien instalaremos el cliente NFS en cada equipo que queramos pueda acceder a los servidores NFS
  3. Configuraremos la compartición de una carpeta en el servidor.
  4. Añadiremos unas líneas al archivo hosts para que nos facilite la vida
  5. Añadiremos las reglas de montaje para los servicios NFS en /etc/fstab

Estableciendo IP fija:

Hay varios métodos para establecer ip fija a un pc o equipo, por regla general se puede hacer desde el mismo pc, o desde el router reservando una dirección específica para el equipo.

La manera mas correcta creo yo que es reservando direcciones dentro del router.

Como cada router es distinto os diré solo pasos generales.

Accedéis al router mediante la dirección de este, (normalmente 192.168.1.1 o 192.168.0.1) una vez allí os identificáis (si no sabes el nombre de usuario y contraseña normalmente viene detrás del router).

Buscáis el apartado DHCP y averiguáis que rango de ips se están entregando.

Dentro de ese rango tenéis que reservar las ips para los equipos que queráis.

En mi caso tengo 2 en el taller que tengo en casa.
Sus nombre de equipo son debian-taller y debian-taller2

Y para poder reservar las ips necesitáis adjudicarlas a una determinada MAC, que es un identificador único que llevan todos los módulos wifi, red y bluetooth, con lo que desde la máquina accedéis a la consola y escribid:

sudo ifconfig -a

Y os saldrá algo como esto:

miguel@debian-taller:~$ sudo ifconfig -a
[sudo] password for miguel:  enp12s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
       ether 40:3a:b5:70:72:ea  txqueuelen 1000  (Ethernet)
       RX packets 0  bytes 0 (0.0 B)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 0  bytes 0 (0.0 B)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
       inet 127.0.0.1  netmask 255.0.0.0
       inet6 ::1  prefixlen 128  scopeid 0x10<host>
       loop  txqueuelen 1  (Local Loopback)
       RX packets 44639  bytes 103170878 (98.3 MiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 44639  bytes 103170878 (98.3 MiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlp7s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.1.102  netmask 255.255.255.0  broadcast 192.168.1.255
       inet6 fe80::c646:19ff:fe33:73c3  prefixlen 64  scopeid 0x20<link>
       ether c4:46:a9:93:73:73  txqueuelen 1000  (Ethernet)
       RX packets 1357812  bytes 1526504372 (1.4 GiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 1037662  bytes 347094915 (331.0 MiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
Subrayado os pongo lo que nos interesa, la primera tarjeta que aparece es la de ethernet, que en mi caso se llama enp12s0.

Y la segunda (wlp7s0) es la de wifi (aunque también aparece como Ethernet).

Su mac es la que aparece después de "ether" con lo que nos queda claro de que su mac es la c4:46:a9:93:73:73

Ahora ya, conociendo la MAC podemos reservarla en el router y asignarle la IP que queramos. (el pc claro debe tener activado DHCP, es decir, esperará a que el router le asigne una ip)

Por ejemplo, mis reservas quedan así:
debian-taller tendrá asignada la dirección IP: 192.168.1.100
debian-taller2 tendrá asignada la dirección IP: 192.168.1.101



Instalando NFS (servidor y cliente) en Debian y derivados:


Para empezar, necesitamos instalar nfs-kernel-server en todos los equipos en los que queramos compartir ficheros.

Y también tendremos que instalar nfs-common en los que queramos que puedan acceder a dichos sistemas.


Así que lo lógico es instalar en todas las computadoras ambos paquetes por regla general, ya que lo que se suele buscar es que las máquinas accedan entre si.


sudo apt-get install nfs-common nfs-kernel-server

Configurando la compartición de archivos o carpetas:

Una vez instalado los paquetes NFS tenemos que especificar que queremos compartir, esto se hace en el fichero /etc/exports

Así que lo editamos, ya sea con "nano", "vi" o el programa que queráis.

Con nano sería así:
sudo nano /etc/exports


Y veréis algo como :


# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)

Pues para añadir un directorio para compartición tenemos que hacerlo de la siguiente forma.


  1. Ruta exacta en el arbol de directorios
  2. Dirección ip que tiene permiso para acceder al archivo o directorio
  3. Por último los permisos que posee el usuario que accede

Por ejemplo, yo voy a compartir mi carpeta personal completa. (/home/miguel/)

Lo quiero compartir con toda la red (192.168.1.0/24)

Y lo quiero compartir con acceso a lectura y escritura (rw)

Así que añado esto al fichero:


#
#Compartir la carpeta /home/miguel con toda la red
#en modo lectura y escritura y accesible desde la red 192.168.1.0/24
/home/miguel 192.168.1.1/24(rw)
Guardamos el fichero y lo cerramos.

Con eso ya estamos casi listos, solo hay que reiniciar el servidor NFS en el pc en el que estamos compartiendo para que reconozca los cambios.

sudo service nfs-kernel-server restart


Añadiremos unas líneas al archivo hosts para que nos facilite la vida:

Como somos muy comodones :D, vamos a facilitarnos la vida un poco y vamos a decirle al sistema que sustituya las direcciones IP de cada equipo por una nombre de equipo y así no tendremos que recordarlas nosotros.
Nota: En realidad tengo mas equipos en casa, contando con los móviles aún mas todavía, así que imaginad en una red de equipos de una oficina lo ventajoso que puede ser esto.

Por ejemplo, como dije antes, en el taller tengo 2 equipos uno se llama debian-taller y el otro se llama debian-taller2

Pues bien, queremos que que al hacer referencias a debian-taller desde debian-taller2 y viseversa se acceda a la ip correspondiente.

Para ello, editamos el fichero hosts que se encuentra en /etc/hosts

Dentro veremos esto (En este caso estamos en la máquina debian-taller):

127.0.0.1       localhost
127.0.1.1       debian-taller
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters


Como queremos que referencie la dirección de debian-taller2 ponemos lo siguiente:




127.0.0.1 localhost
127.0.1.1 debian-taller
192.168.1.101 debian-taller2
# The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters

Y el el archivo host de debian-taller2 tendremos que ponerlo así:



127.0.0.1 localhost
127.0.1.1 debian-taller2
192.168.1.100 debian-taller
# The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters

Añadiendo las reglas de montaje para los servicios NFS en /etc/fstab:
Aquí lo que pretendemos es facilitar el acceso con un simple click a los recursos compartidos de la red.

Primero tendremos que crear los archivos donde se montarán las unidades de red.

En mi caso he creado las siguientes careptas:


/media/miguel/debian-taller
y
/media/miguel/debian-talle2

Para crearlas tendrás que hacerlo como adminsitrador:
sudo mkdir /media/miguel/debian-taller

En vuestro caso sustituid el nombre de la carpeta y el usuario por los vuestros.

Una vez creadas las carpetas donde se montarán los sistemas de ficheros en red editaremos el archivo etc/fstab:


sudo nano /etc/fstab

Y veremos algo como:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=de132def-24ba-41d0-bd46-06993a28c7f7 / ext4 errors=remount-ro 0 1
# /home was on /dev/sda4 during installation
UUID=3832696f-2485-4ed4-921d-3a745fd39a79 /home ext4 defaults 0 2
# swap was on /dev/sda3 during installation
UUID=2fbbf53d-b4b4-4098-8d24-289d123db5dd none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0



Tan solo tendremos que añadir las siguientes líneas al final del archivo:

# Para montar las unidades compartidas por NFS
debian-taller:/ /media/miguel/debian-taller nfs user,noauto 0 0
debian-taller2:/ /media/miguel/debian-taller2 nfs user,noauto 0 0

Con eso le decimos que monte la dirección asociada a cada nombre de host en su correspondiente carpeta, que use el sistema NFS y que no lo haga de forma automática. (solo cuando pinchemos en la carpeta)

Ahora, si abrís el explorador de archivos veréis algo como esto:



Como veis, en la parte inferior izquierda aparecen los nombres de equipos y si pinchamos en ellos (y, obviamente dichos equipos están encendidos) podremos acceder al contenido compartido de estos.

Un saludo y cualquier problema no dudéis en comentar.