Configura le porte NFS sulle VM client

Questa pagina mostra come impostare le porte per i daemon statd e nlockmgr sulle VM client per semplificare la configurazione del firewall.

Filestore utilizza i daemon nlockmgr e statd per abilitare il blocco dei file. Le porte per questi servizi devono essere esposte in modo appropriato sulle VM client tramite regole firewall, in modo che i client possano utilizzare correttamente i blocchi. Ti consigliamo di impostare le porte statd e nlockmgr in modo che siano coerenti su tutte le VM client, semplificando la configurazione delle regole firewall in entrata.

Per ulteriori informazioni su come determinare se è necessario configurare una regola firewall per la rete VPC, consulta Configurare le regole firewall.

Controlla le impostazioni delle porte

Per verificare su quali valori sono attualmente impostate le porte statd e nlockmgr, esegui i comandi seguenti sull'istanza VM del client. Se i file non esistono o se le opzioni non hanno valori, le porte non sono impostate. In questo caso, ai daemon vengono assegnate dinamicamente porte disponibili arbitrarie.

Debian/Ubuntu

  1. Per determinare la porta statd, esegui il comando seguente e osserva il valore STATDOPTS:

    cat /etc/default/nfs-common
    
  2. Per determinare la porta nlockmgr, esegui il comando seguente e controlla i valori nlm_tcpport e nlm_udpport:

    cat /etc/modprobe.d/lock.conf
    

RHEL/CentOS

  1. Per determinare la porta statd, esegui il comando seguente e osserva il valore STATD_PORT:

    cat /etc/sysconfig/nfs
    
  2. Per determinare la porta nlockmgr, esegui il comando seguente e controlla i valori nlm_tcpport e nlm_udpport:

    cat /etc/modprobe.d/lock.conf
    

SUSE

Esegui questo comando:

cat /etc/sysconfig/nfs

La porta statd è elencata in STATD_PORT, mentre la porta nlockmgr è elencata in LOCKD_TCPPORT e LOCKD_UDPPORT.

Windows

L'impostazione delle porte NFS non è obbligatoria su Windows.

Imposta porte

Per impostare le porte statd e nlockmgr, esegui i comandi seguenti sull'istanza VM client. In questi esempi viene utilizzato l'editor di testo di nano, ma puoi utilizzare qualsiasi editor di testo. In questi esempi viene usata anche la porta 2046 per statd e 4045 come porta per nlockmgr, perché questi valori sono scelte comuni. Puoi utilizzare porte diverse in base alla configurazione di rete. In questo caso, le regole firewall in entrata devono consentire il traffico verso le porte specifiche che utilizzi.

Debian/Ubuntu

  • Imposta la porta statd:

    1. Apri il file /etc/default/nfs-common da modificare:

      sudo nano /etc/default/nfs-common
      
    2. Imposta l'opzione STATDOPTS:

      STATDOPTS="-p 2046"
      
    3. Salva il file ed esci.

  • Imposta la porta nlockmgr:

    1. Crea il file /etc/modprobe.d/lock.conf:

      sudo nano /etc/modprobe.d/lock.conf
      
    2. Imposta le opzioni nlm_tcpport e nlm_udpport:

      options lockd nlm_tcpport=4045
      options lockd nlm_udpport=4045
      
    3. Salva il file ed esci.

RHEL/CentOS

  • Imposta la porta statd:

    1. Apri il file /etc/sysconfig/nfs da modificare:

      sudo nano /etc/sysconfig/nfs
      
    2. Imposta l'opzione STATD_PORT:

      STATD_PORT=2046
      
    3. Salva il file ed esci.

  • Imposta la porta nlockmgr:

    1. Crea il file /etc/modprobe.d/lock.conf:

      sudo nano /etc/modprobe.d/lock.conf
      
    2. Imposta le opzioni nlm_tcpport e nlm_udpport:

      options lockd nlm_tcpport=4045
      options lockd nlm_udpport=4045
      
    3. Salva il file ed esci.

SUSE

Imposta le porte statd e nlockmgr:

  1. Apri il file /etc/sysconfig/nfs da modificare:

    sudo nano /etc/sysconfig/nfs
    
  2. Imposta le opzioni STATD_PORT, LOCKD_TCPPORT e LOCKD_UDPPORT:

    STATD_PORT=2046
    LOCKD_TCPPORT=4045
    LOCKD_UDPPORT=4045
    
  3. Salva il file ed esci.

Windows

L'impostazione delle porte NFS non è obbligatoria su Windows.

Verifica che le porte siano aperte

Per verificare che le porte NFS siano state aperte correttamente, completa i passaggi seguenti.

  1. Installa le seguenti dipendenze.

    Debian/Ubuntu

    Dalla riga di comando, inserisci il seguente comando:

    sudo apt install nfs-common tcpdump tshark
    

    RHEL/CentOS

    Dalla riga di comando, inserisci il seguente comando:

    sudo yum install nfs-utils tcpdump wireshark
    

    SUSE

    Dalla riga di comando, inserisci il seguente comando:

    sudo zypper install nfs-client tcpdump wireshark
    

    Windows

    Questo processo di verifica non è supportato su Windows.

  2. Crea un file di script denominato verify-nfs-port-script.sh, copia e incolla il seguente script al suo interno e salvalo localmente sulla tua macchina. Prendi nota della posizione del file e salvalo per il passaggio successivo.

    #!/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}
    
  3. Inserisci questo comando:

    chmod +x SCRIPT_PATH
    

    Sostituisci quanto segue:

    • SCRIPT_PATH: il percorso in cui si trova il file di script. Deve essere eseguito come root, altrimenti aggiungi sudo all'inizio del comando.
  4. Inserisci questo comando:

    SCRIPT_PATH INSTANCE_IP SHARE_NAME
    

    Sostituisci quanto segue:

    • SCRIPT_PATH: il percorso in cui si trova il file di script. Deve essere eseguito come root, altrimenti aggiungi sudo all'inizio del comando.
    • INSTANCE_IP: l'indirizzo IP dell'istanza Filestore
    • SHARE_NAME: nome della condivisione file

    Se la porta è aperta, lo script restituisce la seguente risposta:

    The NLM GRANT message is working properly!
    

    Se la porta non è aperta, lo script restituisce il seguente errore:

    The NLM GRANT message is not working properly!
    

Passaggi successivi