En esta página se explica cómo definir los puertos de los daemons statd
y nlockmgr
en tus VMs de cliente para facilitar la configuración del firewall.
Filestore usa los daemons nlockmgr
y statd
para habilitar el bloqueo de archivos. Los puertos de estos servicios deben exponerse correctamente en tus VMs de cliente mediante reglas de cortafuegos para que los clientes puedan usar los bloqueos correctamente. Te recomendamos que definas los puertos statd
y nlockmgr
para que sean coherentes en todas las VMs cliente, lo que facilitará la configuración de las reglas de firewall de entrada.
Para obtener más información sobre cómo determinar si necesitas configurar una regla de cortafuegos para la red de VPC, consulta Configurar reglas de cortafuegos.
Comprobar la configuración de los puertos
Para comprobar los valores que tienen asignados los puertos statd
y nlockmgr
, ejecuta los siguientes comandos en la instancia de VM cliente. Si los archivos no existen o si las opciones no tienen valores, los puertos no se definen. En ese caso, los daemons se asignan dinámicamente a puertos disponibles arbitrarios.
Debian o Ubuntu
Para determinar el puerto
statd
, ejecuta el siguiente comando y consulta el valorSTATDOPTS
:cat /etc/default/nfs-common
Para determinar el puerto de
nlockmgr
, ejecuta el siguiente comando y consulta los valores denlm_tcpport
ynlm_udpport
:cat /etc/modprobe.d/lock.conf
RHEL/CentOS
Para determinar el puerto
statd
, ejecuta el siguiente comando y consulta el valorSTATD_PORT
:cat /etc/sysconfig/nfs
Para determinar el puerto de
nlockmgr
, ejecuta el siguiente comando y consulta los valores denlm_tcpport
ynlm_udpport
:cat /etc/modprobe.d/lock.conf
SUSE
Ejecuta el siguiente comando:
cat /etc/sysconfig/nfs
El puerto statd
se indica en STATD_PORT
y el puerto nlockmgr
en LOCKD_TCPPORT
y LOCKD_UDPPORT
.
Windows
No es necesario configurar los puertos de NFS en Windows.
Definir puertos
Para definir los puertos statd
y nlockmgr
, ejecuta los siguientes comandos en la instancia de VM cliente. En estos ejemplos se usa el editor de texto nano
, pero puedes usar cualquier otro. En estos ejemplos también se usa 2046 como puerto de statd
y 4045 como puerto de nlockmgr
, ya que son valores habituales. Puedes usar diferentes puertos en función de la configuración de tu red. En este caso, las reglas de cortafuegos de entrada deben permitir el tráfico a los puertos específicos que utilices.
Debian o Ubuntu
Define el puerto
statd
:Abre el archivo
/etc/default/nfs-common
para editarlo:sudo nano /etc/default/nfs-common
Selecciona la opción
STATDOPTS
:STATDOPTS="-p 2046"
Guarda el archivo y sal.
Define el puerto
nlockmgr
:Crea el archivo
/etc/modprobe.d/lock.conf
:sudo nano /etc/modprobe.d/lock.conf
Configura las opciones
nlm_tcpport
ynlm_udpport
:options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045
Guarda el archivo y sal.
RHEL/CentOS
Define el puerto
statd
:Abre el archivo
/etc/sysconfig/nfs
para editarlo:sudo nano /etc/sysconfig/nfs
Selecciona la opción
STATD_PORT
:STATD_PORT=2046
Guarda el archivo y sal.
Define el puerto
nlockmgr
:Crea el archivo
/etc/modprobe.d/lock.conf
:sudo nano /etc/modprobe.d/lock.conf
Configura las opciones
nlm_tcpport
ynlm_udpport
:options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045
Guarda el archivo y sal.
SUSE
Define los puertos statd
y nlockmgr
:
Abre el archivo
/etc/sysconfig/nfs
para editarlo:sudo nano /etc/sysconfig/nfs
Configura las opciones
STATD_PORT
,LOCKD_TCPPORT
yLOCKD_UDPPORT
:STATD_PORT=2046 LOCKD_TCPPORT=4045 LOCKD_UDPPORT=4045
Guarda el archivo y sal.
Windows
No es necesario configurar los puertos de NFS en Windows.
Verificar que los puertos estén abiertos
Para comprobar que los puertos NFS se han abierto correctamente, sigue estos pasos.
Instala las siguientes dependencias.
Debian o Ubuntu
En la línea de comandos, introduce el siguiente comando:
sudo apt install nfs-common tcpdump tshark
RHEL/CentOS
En la línea de comandos, introduce el siguiente comando:
sudo yum install nfs-utils tcpdump wireshark
SUSE
En la línea de comandos, introduce el siguiente comando:
sudo zypper install nfs-client tcpdump wireshark
Windows
Este proceso de verificación no está disponible en Windows.
Crea un archivo de secuencia de comandos llamado
verify-nfs-port-script.sh
, copia y pega la siguiente secuencia de comandos en él y guárdalo localmente en tu máquina. Anota la ubicación del archivo y guárdala para el paso siguiente.#!/bin/bash # This script is intended to run on client machines to verify that the ports # are properly open to allow the reception of NLM GRANT messages from the server. set -eu function kill_descendants() { for pid in $(ps -o pid= --ppid "$1") do kill_descendants "$pid" done if [[ $1 -ne $$ ]]; then kill "$1" 2>/dev/null | true fi } function cleanup { set +eu # Kill all background jobs and wait for it to end, makes sure locks are released kill_descendants $$ # Wait for jobs to die and locks to be released, so mount is not busy sleep 2 umount -f "$MNT1" umount -f "$MNT2" rmdir "$MNT1" 2&> /dev/null || true rmdir "$MNT2" 2&> /dev/null || true } function print_help { echo "$0 [server_ip] [mount_path]" echo -e "\t For example, if you mount a server using:" echo -e "\t\t \"mount 10.0.0.1:share /mnt/mount_point\"" echo -e "\t Run the script: " echo -e "\t\t \"$0 10.0.0.1 share\"" } if [ $# -ne 2 ]; then print_help exit 1 fi if [ $(id -u) -ne 0 ]; then echo "Failure! This script needs to run as root, use \"sudo $@\"" exit 1 fi if ! [ -x "$(command -v tshark)" ]; then echo "The 'tshark' command does not exist and is needed for the script. Please install it" exit 1 fi if ! [ -x "$(command -v tcpdump)" ]; then echo "The 'tcpdump' command does not exist and is needed for the script. Please install it" exit 1 fi SERVER_IP=$1 MOUNT_PATH=$2 MNT1=$(mktemp -d) MNT2=$(mktemp -d) trap cleanup EXIT echo "Mounting..." mount -o nosharecache "$SERVER_IP":"$MOUNT_PATH" "$MNT1" mount -o nosharecache "$SERVER_IP":"$MOUNT_PATH" "$MNT2" REC_FILE=$(mktemp /tmp/nlm_recording_XXXXXXXX.pcap) tcpdump -i any -s0 -w "$REC_FILE" "host $SERVER_IP" & TCPDUMP_PID=$! echo "Recording TCP dump to $REC_FILE" sleep 5 # wait for tcpdump to start running echo "Running test..." flock "$MNT1"/lock_file -c "echo -n \"Got first lock: \" && date && sleep 5 && echo -n \"Releasing first lock: \" && date" & sleep 2 # Wait for the first lock to actually be taken echo "Waiting for second lock: $(date)" flock "$MNT2"/lock_file -c "echo -n \"Got second lock: \" && date" sleep 2 # Wait for tcpdump to record everything kill $TCPDUMP_PID # For quick analysis inspect recording with tshark, if you don't have it just inspect with Wireshark echo "Inspecting results in $REC_FILE with TShark" tshark -r "$REC_FILE" -Y nlm # First, print the output tshark -r "$REC_FILE" -Y nlm 2>/dev/null | grep -q GRANTED EXIT_CODE=0 if [ $? -eq 0 ]; then echo "The NLM GRANT message is working properly!" EXIT_CODE=0 else echo "The NLM GRANT message is not working properly!" EXIT_CODE=1 fi echo "For debugging, please provide the printed output of the script, and $REC_FILE" exit ${EXIT_CODE}
Introduce el siguiente comando:
chmod +x SCRIPT_PATH
Haz los cambios siguientes:
SCRIPT_PATH
: la ruta donde se encuentra el archivo de secuencia de comandos. Debe ejecutarse como root. De lo contrario, añadesudo
al principio del comando.
Introduce el siguiente comando:
SCRIPT_PATH INSTANCE_IP SHARE_NAME
Haz los cambios siguientes:
SCRIPT_PATH
: la ruta donde se encuentra el archivo de secuencia de comandos. Debe ejecutarse como root. De lo contrario, añadesudo
al principio del comando.INSTANCE_IP
: la dirección IP de la instancia de FilestoreSHARE_NAME
: el nombre del recurso compartido de archivos
Si el puerto está abierto, la secuencia de comandos devuelve la siguiente respuesta:
The NLM GRANT message is working properly!
Si el puerto no está abierto, la secuencia de comandos devuelve el siguiente error:
The NLM GRANT message is not working properly!
Siguientes pasos
- Configura las reglas de cortafuegos.
- Consulta más información sobre los requisitos de recursos de red y de IP para usar Filestore.