En esta página, se muestra cómo configurar los puertos para los daemons statd
y nlockmgr
en las VM de cliente a fin de facilitar la configuración de firewall.
Filestore usa los daemons nlockmgr
y statd
para habilitar el bloqueo de archivos. Los puertos de estos servicios deben estar expuestos de forma correcta en las VM de cliente a través de reglas de firewall para que los clientes puedan usar los bloqueos de forma adecuada. Recomendamos configurar los puertos statd
y nlockmgr
para que sean coherentes en todas las VM cliente, lo que facilita la configuración de las reglas de firewall de entrada.
Para obtener más información sobre si se necesita configurar reglas de firewall en la red de VPC, consulta Configura reglas de firewall.
Verifica la configuración de los puertos
Para verificar qué valores están configurados los puertos statd
y nlockmgr
, ejecuta los siguientes comandos en la instancia de VM del cliente. Si los archivos no existen, o si las opciones no tienen valores, entonces los puertos no están configurados. En ese caso, los daemons se asignan de forma dinámica a puertos arbitrarios disponibles.
Debian/Ubuntu
Para determinar el puerto
statd
, ejecuta el siguiente comando y observa el valorSTATDOPTS
:cat /etc/default/nfs-common
Para determinar el puerto
nlockmgr
, ejecuta el siguiente comando y observa los valoresnlm_tcpport
ynlm_udpport
:cat /etc/modprobe.d/lock.conf
RHEL y CentOS
Para determinar el puerto
statd
, ejecuta el siguiente comando y observa el valorSTATD_PORT
:cat /etc/sysconfig/nfs
Para determinar el puerto
nlockmgr
, ejecuta el siguiente comando y observa los valoresnlm_tcpport
ynlm_udpport
:cat /etc/modprobe.d/lock.conf
SUSE
Ejecuta el siguiente comando:
cat /etc/sysconfig/nfs
El puerto statd
aparece en STATD_PORT
y el puerto nlockmgr
aparece en LOCKD_TCPPORT
y LOCKD_UDPPORT
.
Windows
No es necesario configurar puertos NFS en Windows.
Configura los puertos
Para configurar los puertos statd
y nlockmgr
, ejecuta los siguientes comandos en la instancia de VM del cliente. En estos ejemplos se usan el editor de texto nano
, pero puedes usar el que desees. En estos ejemplos, también se usa 2046 como el puerto para statd
y 4045 como el puerto para nlockmgr
, ya que estos valores son opciones comunes. Puedes usar diferentes puertos según la configuración de tu red. En este caso, las reglas de firewall de entrada deben permitir el tráfico a los puertos específicos que uses.
Debian/Ubuntu
Configure el puerto
statd
:Abre el archivo
/etc/default/nfs-common
para editarlo:sudo nano /etc/default/nfs-common
Establece la opción
STATDOPTS
:STATDOPTS="-p 2046"
Guarda el archivo y cierra.
Configure el puerto
nlockmgr
:Crea el archivo
/etc/modprobe.d/lock.conf
:sudo nano /etc/modprobe.d/lock.conf
Establece las opciones
nlm_tcpport
ynlm_udpport
:options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045
Guarda el archivo y cierra.
RHEL y CentOS
Configure el puerto
statd
:Abre el archivo
/etc/sysconfig/nfs
para editarlo:sudo nano /etc/sysconfig/nfs
Establece la opción
STATD_PORT
:STATD_PORT=2046
Guarda el archivo y cierra.
Configure el puerto
nlockmgr
:Crea el archivo
/etc/modprobe.d/lock.conf
:sudo nano /etc/modprobe.d/lock.conf
Establece las opciones
nlm_tcpport
ynlm_udpport
:options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045
Guarda el archivo y cierra.
SUSE
Configura los puertos statd
y nlockmgr
:
Abre el archivo
/etc/sysconfig/nfs
para editarlo:sudo nano /etc/sysconfig/nfs
Establece las opciones
STATD_PORT
,LOCKD_TCPPORT
yLOCKD_UDPPORT
:STATD_PORT=2046 LOCKD_TCPPORT=4045 LOCKD_UDPPORT=4045
Guarda el archivo y cierra.
Windows
No es necesario configurar puertos NFS en Windows.
Verifica que los puertos estén abiertos
Para verificar que los puertos NFS se hayan abierto correctamente, completa los siguientes pasos.
Instala las siguientes dependencias.
Debian/Ubuntu
En la línea de comandos, ingresa el siguiente comando:
sudo apt install nfs-common tcpdump tshark
RHEL y CentOS
En la línea de comandos, ingresa el siguiente comando:
sudo yum install nfs-utils tcpdump wireshark
SUSE
En la línea de comandos, ingresa el siguiente comando:
sudo zypper install nfs-client tcpdump wireshark
Windows
Este proceso de verificación no es compatible con 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árdala de forma local en tu máquina. Anota la ubicación del archivo y guárdalo para el siguiente paso.#!/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}
Ingresa el siguiente comando:
chmod +x SCRIPT_PATH
Reemplaza lo siguiente:
SCRIPT_PATH
: Es la ruta de acceso en la que se encuentra el archivo de secuencia de comandos. Se debe ejecutar como raíz. De lo contrario, agregasudo
al comienzo del comando.
Ingresa el siguiente comando:
SCRIPT_PATH INSTANCE_IP SHARE_NAME
Reemplaza lo siguiente:
SCRIPT_PATH
: Es la ruta de acceso en la que se encuentra el archivo de secuencia de comandos. Se debe ejecutar como raíz. De lo contrario, agregasudo
al comienzo del comando.INSTANCE_IP
: La dirección IP de la instancia de FilestoreSHARE_NAME
: Es el nombre del uso compartido de archivos.
Si el puerto está abierto, la secuencia de comandos muestra la siguiente respuesta:
The NLM GRANT message is working properly!
Si el puerto no está abierto, la secuencia de comandos muestra el siguiente error:
The NLM GRANT message is not working properly!
¿Qué sigue?
- Configura reglas de firewall.
- Obtén más información sobre los requisitos de recursos de red y de IP para usar Filestore.