Cette page explique comment définir les ports des daemons statd
et nlockmgr
sur vos VM clientes pour simplifier la configuration du pare-feu.
Filestore utilise les daemons nlockmgr
et statd
pour activer le verrouillage de fichiers. Les ports de ces services doivent être correctement exposés sur vos VM clientes via des règles de pare-feu afin que les clients puissent utiliser correctement les verrous. Nous vous recommandons de définir les ports statd
et nlockmgr
de manière cohérente sur toutes les VM clientes, ce qui facilite la configuration des règles de pare-feu d'entrée.
Pour plus d'informations sur la nécessité ou non de configurer une règle de pare-feu pour le réseau VPC, consultez la page Configurer des règles de pare-feu.
Vérifier les paramètres des ports
Pour vérifier les valeurs auxquelles les ports statd
et nlockmgr
sont actuellement définis, exécutez les commandes suivantes sur l'instance de VM cliente. Si les fichiers n'existent pas ou si les options n'ont pas de valeur, les ports ne sont pas définis. Dans ce cas, les daemons sont affectés de façon dynamique à des ports arbitraires disponibles.
Debian/Ubuntu
Pour déterminer le port
statd
, exécutez la commande suivante et examinez la valeurSTATDOPTS
:cat /etc/default/nfs-common
Pour déterminer le port
nlockmgr
, exécutez la commande suivante et examinez les valeursnlm_tcpport
etnlm_udpport
:cat /etc/modprobe.d/lock.conf
RHEL/CentOS
Pour déterminer le port
statd
, exécutez la commande suivante et examinez la valeurSTATD_PORT
:cat /etc/sysconfig/nfs
Pour déterminer le port
nlockmgr
, exécutez la commande suivante et examinez les valeursnlm_tcpport
etnlm_udpport
:cat /etc/modprobe.d/lock.conf
SUSE
Exécutez la commande suivante :
cat /etc/sysconfig/nfs
Le port statd
est répertorié sous STATD_PORT
et le port nlockmgr
est répertorié sous LOCKD_TCPPORT
et LOCKD_UDPPORT
.
Windows
Il n'est pas nécessaire de définir des ports NFS sous Windows.
Définir les ports
Pour définir les ports statd
et nlockmgr
, exécutez les commandes suivantes sur l'instance de VM cliente. Ces exemples utilisent l'éditeur de texte nano
, mais vous pouvez opter pour n'importe quel éditeur. Ces exemples utilisent également 2046 comme port pour statd
et 4045 comme port pour nlockmgr
, car ces valeurs sont des choix courants. Vous pouvez utiliser différents ports en fonction de la configuration de votre réseau. Dans ce cas, les règles de pare-feu d'entrée doivent autoriser le trafic vers les ports spécifiques que vous utilisez.
Debian/Ubuntu
Définissez le port
statd
:Ouvrez le fichier
/etc/default/nfs-common
pour le modifier :sudo nano /etc/default/nfs-common
Définissez l'option
STATDOPTS
:STATDOPTS="-p 2046"
Enregistrez et fermez le fichier.
Définissez le port
nlockmgr
:Créez le fichier
/etc/modprobe.d/lock.conf
:sudo nano /etc/modprobe.d/lock.conf
Définissez les options
nlm_tcpport
etnlm_udpport
:options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045
Enregistrez et fermez le fichier.
RHEL/CentOS
Définissez le port
statd
:Ouvrez le fichier
/etc/sysconfig/nfs
pour le modifier :sudo nano /etc/sysconfig/nfs
Définissez l'option
STATD_PORT
:STATD_PORT=2046
Enregistrez et fermez le fichier.
Définissez le port
nlockmgr
:Créez le fichier
/etc/modprobe.d/lock.conf
:sudo nano /etc/modprobe.d/lock.conf
Définissez les options
nlm_tcpport
etnlm_udpport
:options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045
Enregistrez et fermez le fichier.
SUSE
Définissez les ports statd
et nlockmgr
:
Ouvrez le fichier
/etc/sysconfig/nfs
pour le modifier :sudo nano /etc/sysconfig/nfs
Définissez les options
STATD_PORT
,LOCKD_TCPPORT
etLOCKD_UDPPORT
:STATD_PORT=2046 LOCKD_TCPPORT=4045 LOCKD_UDPPORT=4045
Enregistrez et fermez le fichier.
Windows
Il n'est pas nécessaire de définir des ports NFS sous Windows.
Vérifier que les ports sont ouverts
Pour vérifier que les ports NFS ont bien été ouverts, procédez comme suit.
Installez les dépendances suivantes.
Debian/Ubuntu
Dans la ligne de commande, saisissez la commande suivante:
sudo apt install nfs-common tcpdump tshark
RHEL/CentOS
Dans la ligne de commande, saisissez la commande suivante:
sudo yum install nfs-utils tcpdump wireshark
SUSE
Dans la ligne de commande, saisissez la commande suivante:
sudo zypper install nfs-client tcpdump wireshark
Windows
Ce processus de validation n'est pas compatible avec Windows.
Créez un fichier de script appelé
verify-nfs-port-script.sh
, copiez-y et collez-y le script suivant, puis enregistrez-le localement sur votre machine. Notez l'emplacement du fichier et enregistrez-le pour l'étape suivante.#!/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}
Saisissez la commande suivante :
chmod +x SCRIPT_PATH
Remplacez les éléments suivants :
SCRIPT_PATH
: chemin d'accès au fichier de script. Cette commande doit être exécutée en tant qu'utilisateur racine. Sinon, ajoutezsudo
au début de la commande.
Saisissez la commande suivante :
SCRIPT_PATH INSTANCE_IP SHARE_NAME
Remplacez les éléments suivants :
SCRIPT_PATH
: chemin d'accès au fichier de script. Cette commande doit être exécutée en tant qu'utilisateur racine. Sinon, ajoutezsudo
au début de la commande.INSTANCE_IP
: adresse IP de l'instance FilestoreSHARE_NAME
: nom du partage de fichiers
Si le port est ouvert, le script renvoie la réponse suivante:
The NLM GRANT message is working properly!
Si le port n'est pas ouvert, le script renvoie l'erreur suivante:
The NLM GRANT message is not working properly!
Étape suivante
- Configurez des règles de pare-feu.
- En savoir plus sur les exigences en termes de mise en réseau et de ressources IP pour utiliser Filestore