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!.