Esta página mostra como definir as portas para os daemons statd
e nlockmgr
nas VMs de cliente para facilitar a configuração da firewall.
O Filestore usa os daemons nlockmgr
e statd
para ativar o bloqueio de ficheiros. As portas destes serviços têm de ser expostas corretamente nas VMs de cliente através de regras de firewall para que os clientes possam usar bloqueios corretamente. Recomendamos que defina as portas statd
e nlockmgr
para que sejam consistentes em todas as VMs cliente, o que facilita a configuração das regras de firewall de entrada.
Para mais informações sobre como determinar se precisa de configurar uma regra de firewall para a rede da VPC, consulte o artigo Configurar regras de firewall.
Verifique as definições de portas
Para verificar a que valores as portas statd
e nlockmgr
estão atualmente definidas, execute os seguintes comandos na instância de VM do cliente. Se os ficheiros não existirem ou se as opções não tiverem valores, as portas não são definidas. Nesse caso, os
daemons são atribuídos dinamicamente a portas disponíveis arbitrárias.
Debian/Ubuntu
Para determinar a porta
statd
, execute o seguinte comando e consulte o valorSTATDOPTS
:cat /etc/default/nfs-common
Para determinar a porta
nlockmgr
, execute o seguinte comando e consulte os valoresnlm_tcpport
enlm_udpport
:cat /etc/modprobe.d/lock.conf
RHEL/CentOS
Para determinar a porta
statd
, execute o seguinte comando e consulte o valorSTATD_PORT
:cat /etc/sysconfig/nfs
Para determinar a porta
nlockmgr
, execute o seguinte comando e consulte os valoresnlm_tcpport
enlm_udpport
:cat /etc/modprobe.d/lock.conf
SUSE
Execute o seguinte comando:
cat /etc/sysconfig/nfs
A porta statd
é apresentada em STATD_PORT
e a porta nlockmgr
é apresentada em LOCKD_TCPPORT
e LOCKD_UDPPORT
.
Windows
Não é necessário definir portas NFS no Windows.
Defina portas
Para definir as portas statd
e nlockmgr
, execute os seguintes comandos na instância de VM do cliente. Estes exemplos usam o editor de texto
nano
, mas pode usar qualquer editor de texto. Estes exemplos também usam 2046 como a porta para statd
e 4045 como a porta para nlockmgr
porque estes valores são escolhas comuns. Pode usar portas diferentes com base na configuração da sua rede. Neste caso, as regras de firewall de entrada têm de permitir o tráfego para as portas específicas que usa.
Debian/Ubuntu
Defina a porta
statd
:Abra o ficheiro
/etc/default/nfs-common
para edição:sudo nano /etc/default/nfs-common
Defina a opção
STATDOPTS
:STATDOPTS="-p 2046"
Guarde o ficheiro e saia.
Defina a porta
nlockmgr
:Crie o ficheiro
/etc/modprobe.d/lock.conf
:sudo nano /etc/modprobe.d/lock.conf
Defina as opções
nlm_tcpport
enlm_udpport
:options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045
Guarde o ficheiro e saia.
RHEL/CentOS
Defina a porta
statd
:Abra o ficheiro
/etc/sysconfig/nfs
para edição:sudo nano /etc/sysconfig/nfs
Defina a opção
STATD_PORT
:STATD_PORT=2046
Guarde o ficheiro e saia.
Defina a porta
nlockmgr
:Crie o ficheiro
/etc/modprobe.d/lock.conf
:sudo nano /etc/modprobe.d/lock.conf
Defina as opções
nlm_tcpport
enlm_udpport
:options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045
Guarde o ficheiro e saia.
SUSE
Defina as portas statd
e nlockmgr
:
Abra o ficheiro
/etc/sysconfig/nfs
para edição:sudo nano /etc/sysconfig/nfs
Defina as opções
STATD_PORT
,LOCKD_TCPPORT
eLOCKD_UDPPORT
:STATD_PORT=2046 LOCKD_TCPPORT=4045 LOCKD_UDPPORT=4045
Guarde o ficheiro e saia.
Windows
Não é necessário definir portas NFS no Windows.
Verifique se as portas estão abertas
Para verificar se as portas NFS foram abertas corretamente, conclua os seguintes passos.
Instale as seguintes dependências.
Debian/Ubuntu
Na linha de comandos, introduza o seguinte comando:
sudo apt install nfs-common tcpdump tshark
RHEL/CentOS
Na linha de comandos, introduza o seguinte comando:
sudo yum install nfs-utils tcpdump wireshark
SUSE
Na linha de comandos, introduza o seguinte comando:
sudo zypper install nfs-client tcpdump wireshark
Windows
Este processo de validação não é suportado no Windows.
Crie um ficheiro de script denominado
verify-nfs-port-script.sh
, copie e cole o script seguinte no ficheiro e guarde-o localmente no seu computador. Tome nota da localização do ficheiro e guarde-o para o passo seguinte.#!/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}
Introduza o seguinte comando:
chmod +x SCRIPT_PATH
Substitua o seguinte:
SCRIPT_PATH
: o caminho onde o ficheiro de script está localizado. Este comando deve ser executado como root. Caso contrário, adicionesudo
ao início do comando.
Introduza o seguinte comando:
SCRIPT_PATH INSTANCE_IP SHARE_NAME
Substitua o seguinte:
SCRIPT_PATH
: o caminho onde o ficheiro de script está localizado. Este comando deve ser executado como root. Caso contrário, adicionesudo
ao início do comando.INSTANCE_IP
: o endereço IP da instância do FilestoreSHARE_NAME
: o nome da partilha de ficheiros
Se a porta estiver aberta, o script devolve a seguinte resposta:
The NLM GRANT message is working properly!
Se a porta não estiver aberta, o script devolve o seguinte erro:
The NLM GRANT message is not working properly!
O que se segue?
- Configure regras de firewall.
- Saiba mais sobre os requisitos de rede e recursos de IP para usar o Filestore.