NFSv4 - NFS Version 4 Protocol FreeBSD 14.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 utilzadas. 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 archivo /etc/rc.conf
sysrc nfs_server_enable="YES" sysrc nfsv4_server_enable="YES" sysrc nfs_server_flags="-u -t -n 24" sysrc hostid_enable="YES" sysrc hostid_file="/etc/hostid" sysrc rpcbind_enable="YES" sysrc rpcbind_flags="-h 192.168.88.160" sysrc mountd_enable="YES" sysrc mountd_flags="-r -p 892" sysrc statd_flags="-p 32766" sysrc lockd_flags="-p 32767"
Iniciar servicio hostid
service hostid start
Parametros des sysctl (/etc/sysctl.conf)
sysctl vfs.nfs.enable_uidtostring="1" # Hacer que NFS siempre envíe nombres de propietario numéricos sysctl vfs.nfsd.enable_stringtouid="1" # Habilitar nfsd para aceptar nombres de propietario numéricos sysctl vfs.nfsd.server_max_nfsvers="4" # Fuerza NFSv4 max sysctl vfs.nfsd.server_min_nfsvers="4" # Fuerza NFSv4 min sysctl vfs.nfsd.issue_delegations="1" # Habilita delegaciones (mejora rendimiento) sysctl vfs.nfsd.enable_locallocks="1" # Bloqueos locales (compatible con ZFS) sysctl kern.ipc.somaxconn="1024" # Max conexciones pendientes (por defecto 128) sysctl net.inet.tcp.delayed_ack="0" # Mejora rendimiento TCP
Hacer que los cambios sean permanentes
echo vfs.nfs.enable_uidtostring="1" >> /etc/sysctl.conf echo vfs.nfsd.enable_stringtouid="1" >> /etc/sysctl.conf echo vfs.nfsd.server_max_nfsvers="4" >> /etc/sysctl.conf echo vfs.nfsd.server_min_nfsvers="4" >> /etc/sysctl.conf echo vfs.nfsd.issue_delegations="1" >> /etc/sysctl.conf echo vfs.nfsd.enable_locallocks="1" >> /etc/sysctl.conf echo kern.ipc.somaxconn="1024" >> /etc/sysctl.conf echo net.inet.tcp.delayed_ack="0" >> /etc/sysctl.conf
Usamos el archivo /etc/hosts como resolución de nombres en la red local
... 192.168.88.160 tormenta 192.168.88.51 solaris ...
Configurar PF para permitir el tráfico NFS
... lan_net ="{ 192.168.88.0/24 10.10.10.0/24 }" nfs_puertos="{ 111, 892, 2049 }" statd_lockd_puertos="{ 32766, 32767 }" pass in proto { tcp } from $lan_net to any port ssh pass in proto { tcp udp } from $lan_net to any port $statd_lockd_puertos pass in proto { tcp udp } from $lan_net to any port $samba_puertos pass in quick proto { tcp udp } from $lan_net to any port $nfs_puertos ...
Reiniciar servicios
tormenta: # service nfsd restart Stopping nfsd. Waiting for PIDS: 1391 1394. Starting nfsd. tormenta: # service rpcbind restart Stopping rpcbind. Waiting for PIDS: 1285. Starting rpcbind. tormenta: # service mountd restart Stopping mountd. Waiting for PIDS: 1382. Starting mountd.
Crear los conjunto de datos en el servidor
zfs create -o mountpoint=/nfsv4/dellhome -p zroot/nfsv4/dellhome zfs create -o mountpoint=/nfsv4/poolrecovery -p zroot/nfsv4/poolrecovery zfs create -o mountpoint=/nfsv4/docs -p zroot/nfsv4/docs zfs create -o mountpoint=/nfsv4/desarrollo -p zroot/nfsv4/desarrollo zfs create -o mountpoint=/nfsv4/confsolaris -p zroot/nfsv4/confsolaris zfs create -o mountpoint=/nfsv4/conftormenta -p zroot/nfsv4/conftormenta
Archivo de ejemplo /etc/exports, directorios compartidos en redes LAN
tormenta: # cat /etc/exports V4: /nfsv4 # Define /nfsv4 como raiz global /nfsv4/dellhome -alldirs -network 192.168.88.0/24,10.10.10.0/24 /nfsv4/poolrecovery -alldirs -maproot=root -network 192.168.88.0/24 /nfsv4/docs -alldirs -maproot=root -network 192.168.88.0/24,10.10.10.0/24 /nfsv4/desarrollo -alldirs -maproot=root -network 192.168.88.0/24 /nfsv4/confsolaris -alldirs -maproot=root -network 192.168.88.0/24 /nfsv4/conftormenta -alldirs -maproot=root -network 192.168.88.0/24
Puertos a la escucha (en el servidor)
root@tormenta:~ # netstat -an | grep -i listen tcp6 0 0 *.2049 *.* LISTEN tcp4 0 0 *.2049 *.* LISTEN tcp4 0 0 *.892 *.* LISTEN tcp6 0 0 *.892 *.* LISTEN tcp4 0 0 *.111 *.* LISTEN tcp6 0 0 *.111 *.* LISTEN
carlos@tormenta:~ % sockstat -l4 | grep -E 'nfsd|rpcbind|mountd' root nfsd 1391 5 tcp4 *:2049 *:* root mountd 1382 8 udp4 *:892 *:* root mountd 1382 9 tcp4 *:892 *:* root rpcbind 1285 9 udp4 *:111 *:* root rpcbind 1285 10 udp4 *:898 *:* root rpcbind 1285 11 tcp4 *:111 *:*
Programar mantenimiento
# crontab -e @daily /sbin/service mountd reload @daily /sbin/service nfsd restart
Logs de errorres:
tail /var/log/messages | grep nfs
Capturar tráfico NFS:
tcpdump -i re0 port 2049 -w nfs-captura.pcap
Leer paquetes capturados del archivo nfs-captura.pcap
root@tormenta:~ # tcpdump -r nfs-captura.pcap
... 21:14:42.658371 IP solaris.960 > tormenta.nfsd: Flags [P.], seq 976297794:976297922, \ ack 2292617495, win 4352, options [nop,nop,TS val 2858673986 ecr 2537679775], length 128: \ NFS request xid 755722369 124 getattr fh 0,5/2 21:14:42.658440 IP tormenta.nfsd > solaris.960: Flags [.], ack 128, win 29128, options \ [nop,nop,TS val 2537739395 ecr 2858673986], length 0 21:14:42.658497 IP tormenta.nfsd > solaris.960: Flags [P.], seq 1:93, ack 128, win 29128, \ options [nop,nop,TS val 2537739395 ecr 2858673986], length 92: NFS reply xid 755722369 \ reply ok 88 getattr LNK 12231267145 ids 1/53 sz 0 21:14:42.658797 IP solaris.960 > tormenta.nfsd: Flags [.], ack 93, win 4352, options \ [nop,nop,TS val 2858673987 ecr 2537739395], length 0 ...
Configurar cliente FreeBSD
cat /etc/hosts... 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 solaris:~ # sysrc nfsv4_client_enable="YES" solaris:~ # sysrc hostid_enable="YES" solaris:~ # sysrc hostid_file="/etc/hostid" solaris:~ # sysrc rpc_statd_enable="YES" solaris:~ # sysrc rpc_lockd_enable="YES"
Iniciar servicio hostid
service hostid start
Iniciar el servicio nfsclient
solaris:~ # service nfsclient start NFS access cache time=60
solaris:~ nc -v tormenta 2049 Connection to tormenta 2049 port [tcp/nfsd] succeeded!
solaris:~ nc -v tormenta 111 Connection to tormenta 111 port [tcp/sunrpc] succeeded!
Montar manualmente un directorio compartido (en el cliente)
solaris:~ # mkdir /mids4 # mount -t nfs -o nfsv4 tormenta:/docs /mids4
Archivo /etc/fstab para un montaje permanente y automático
# Device Mountpoint FStype Options Dump Pass# /dev/gpt/efiboot0 /boot/efi msdosfs rw 2 2 /dev/nvd0p3 none swap sw 0 0 # fdesc /dev/fd fdescfs rw 0 0 # proc /proc procfs rw 0 0 # nfsv4 shared tormenta:/poolrecovery /nisc4 nfs rw,nfsv4,noatime,bg 0 0 tormenta:/development /nixs4 nfs rw,nfsv4,noatime,bg 0 0 tormenta:/docs /nids4 nfs rw,nfsv4,noatime,bg 0 0 tormenta:/dellhome /nihs4 nfs ro,nfsv4,noatime,bg 0 0
Archivo /etc/auto_master
cat /etc/auto_master # # Automounter master map, see auto_master(5) for details. # /net -hosts -nobrowse,nosuid,intr
Configurar el montaje automatico para montar dinámicamente cuando alguien acceda al recurso compartido NFS.
echo 'autofs_enable="YES"' >> /etc/rc.conf
service automountd start
Vamos a comprobar que podemos escribir en el directorio
cd /nids4 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
solaris:~ % mount
... map -hosts on /net (autofs) tormenta:/poolrecovery on /nisc4 (nfs, nfsv4acls) tormenta:/dellhome on /nihs4 (nfs, read-only, nfsv4acls) tormenta:/docs on /nids4 (nfs, nfsv4acls) tormenta:/development on /nics4 (nfs, nfsv4acls) ...
Verificar PF y reglas en tiempo real
pfctl -f /etc/pf.conf pfctl -s rulesFreeBSD es genial!.
No hay comentarios:
Publicar un comentario