Páginas

jueves, 26 de octubre de 2023

NFSv4 FreeBSD 13.2

NFSv4 - NFS Version 4 Protocol FreeBSD 13.2

Como administrador de un servidor NFS, puede configurarlo para que sólo admita NFSv4, lo que minimiza el número de puertos abiertos y servicios en ejecución en el sistema.

Opcionalmente, también puede deshabilitar la escucha de las llamadas de protocolo RPCBIND, MOUNT, y NSM, que no son necesarias en el caso de sólo NFSv4.

En este momento, es posible habilitar NFSv3 y/o NFSv4 sobre TCP, pero no NFSv3 sobre UDP, de todas maneras, NFSv3 sobre UDP está en desuso. Esto significa que la opción "-u" No se puede especificar para nfs_server_flags en el archivo /etc/rc.conf.


sharenfs=off|on
Controla si el sistema de archivos se comparte a través de NFS y que acciones van a ser utilziadas. Un sistema de archivos con una sharenfs=off es administrado con el comando exportfs y entradas en el archivo /etc/exports. Por ejemplo
zfs get sharenfs zroot/usr/backup/dellhome
NAME                       PROPERTY  VALUE     SOURCE
zroot/usr/backup/dellhome  sharenfs  off       local

El archivo exports especifica puntos de montaje remotos para el protocolo NFS. Cada linea especifica el punto de montaje e indicadores de exportacion dentro de un sistema de archivos del servidor local o la raiz del arbol NFSv4 para uno o mas hosts.

En el servidor NFSv4 agregamos a /etc/rc.conf a través de sysrc (editar de forma segura los archivos rc del sistema)


sysrc nfs_server_enable=YES
sysrc nfs_server_only=YES
sysrc nfsv4_server_only=YES

Utilizamos el archivo /etc/hosts como DNS


...
192.168.88.160		tormenta
192.168.88.51		solaris
...

Interfaces y rutas de red - servidor NFSv4


tormenta: # route get 0
   route to: default
destination: default
       mask: default
    gateway: 192.168.88.1
        fib: 0
  interface: re0
      flags: <UP,GATEWAY,DONE,STATIC>
 recvpipe  sendpipe  ssthresh  rtt,msec    mtu        weight    expire
       0         0         0         0      1500         1         0 
         
# netstat -Winf inet
Name    Mtu Network            Address          Ipkts Ierrs Idrop    Opkts Oerrs  Coll
re0       - 192.168.88.0/24    192.168.88.160   14571     -     -    15956     -     -
lo0       - 127.0.0.0/8        127.0.0.1            0     -     -        0     -     -

Archivo de ejemplo /etc/exports


tormenta: # cat /etc/exports
V4: /usr/backup 
/usr/backup/dellhome -alldirs,quiet -maproot=root -network=192.168.88.0/24
/usr/backup/poolrecovery -alldirs,quiet -maproot=root -network=192.168.88.0/24
/usr/backup/docs -alldirs,quiet -maproot=root -network=192.168.88.0/24
/usr/backup/development -alldirs,quiet -maproot=root -network=192.168.88.0/24

Configurar clientes FreeBSD


Colocaremos el mismo contenido en el archivo /etc/hosts que en el servidor.


...
192.168.88.160		tormenta
192.168.88.51		solaris
...

Para que el servicion nfs client se inicie con el sistema


solaris:~ # sysrc nfs_client_enable=YES

Iniciar el servicio


solaris:~ # service nfsclient start
NFS access cache time=60

# nc -v tormenta 2049
  Connection to tormenta 2049 port [tcp/nfsd] succeeded!

Montar un directorio compartido en el cliente


solaris:~ # mkdir /mids4
# mount -o nfsv4 tormenta:/docs /mihs4

Archivo /etc/fstab para un montaje permanente y automático


# Device	Mountpoint	FStype	Options		Dump	Pass#
/dev/nvd0p1	/boot/efi	msdosfs	rw		2	2
/dev/nvd0p3	 none	  	swap	sw		0	0
# Added by auto-admin from /usr/local/sbin/auto-add-fdesc-mount
fdesc		/dev/fd			fdescfs	rw		0	0
# End auto-admin addition
# Added by auto-admin from desktop-installer
proc			/proc		procfs	rw		0	0
# End auto-admin addition
# nfsv4 shared
tormenta:/poolrecovery     /misc4    nfs     rw,nfsv4,late    0  0
tormenta:/development      /mixs4    nfs     ro,nfsv4,late    0  0
tormenta:/docs             /mids4    nfs     rw,nfsv4,late    0  0
tormenta:/dellhome 	   /mihs4    nfs     rw,nfsv4,late    0  0

Vamos a comprobar que podemos escribir en el directorio


 cd /misc4
 vim script-while-files.sh 
#!/bin/sh
i=0
while [ $i -le 10 ]
do
	 echo 'creando archivos con contenido'
	i=$(($i+1))
	echo Hola > "file$i.txt"
done
:wq

 chmod +x script-while-files.sh
 ./script-while-files.sh
 ls
 file3.txt             file8.txt
file1.txt             file4.txt             file9.txt
file10.txt            file5.txt             script-while-files.sh
file11.txt            file6.txt
file2.txt             file7.txt

Puertos a la escucha (en el servidor)


tormenta:~ # sockstat -l4
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS      
root     sshd       1248  5  tcp4   *:22                  *:*
root     nfsd       1218  5  tcp4   *:2049                *:*

solaris:~ % mount


...
map -hosts on /net (autofs)
tormenta:/poolrecovery on /misc4 (nfs, nfsv4acls)
tormenta:/dellhome on /mixs4 (nfs, read-only, nfsv4acls)
tormenta:/docs on /mids4 (nfs, nfsv4acls)
tormenta:/dellhome on /mihs4 (nfs, nfsv4acls)
...

Firewall PF

# pfctl -f /etc/pf.conf


scrub in all no-df max-mss 1440 fragment reassemble
block drop in on ! re0 inet from 192.168.88.0/24 to any
block drop in inet from 192.168.88.160 to any
block drop in on re0 from  to any
pass in on re0 from  to any flags S/SA keep state
pass out on egress proto tcp all flags S/SA modulate state
pass in on re0 proto tcp from  to any port = nfsd flags S/SA keep state
pass out on egress proto udp all keep state
pass out on egress proto icmp all keep state
pass in log on re0 inet proto tcp from 192.168.88.0/24 to any port = ssh flags S/SA keep state
FreeBSD es genial!.