Configura le porte NFS sulle VM client

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

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

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

Controlla le impostazioni della porta

Per controllare i valori attualmente impostati per le porte statd e nlockmgr, esegui i seguenti comandi sull'istanza VM 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 seguente comando e controlla il valore STATDOPTS:

    cat /etc/default/nfs-common
    
  2. Per determinare la porta nlockmgr, esegui il seguente comando 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 seguente comando e controlla il valore STATD_PORT:

    cat /etc/sysconfig/nfs
    
  2. Per determinare la porta nlockmgr, esegui il seguente comando 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 è indicata in STATD_PORT e la porta nlockmgr è elencata in LOCKD_TCPPORT e LOCKD_UDPPORT.

Windows

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

Impostare le porte

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

Debian/Ubuntu

  • Imposta la porta statd:

    1. Apri il file /etc/default/nfs-common per la modifica:

      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 per la modifica:

      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 per la modifica:

    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 è richiesta su Windows.

Verifica che le porte siano aperte

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

  1. Installa le seguenti dipendenze.

    Debian/Ubuntu

    Nella riga di comando, inserisci il seguente comando:

    sudo apt install nfs-common tcpdump tshark
    

    RHEL/CentOS

    Nella riga di comando, inserisci il seguente comando:

    sudo yum install nfs-utils tcpdump wireshark
    

    SUSE

    Nella riga di comando, inserisci il seguente comando:

    sudo zypper install nfs-client tcpdump wireshark
    

    Windows

    Questa procedura di verifica non è supportata su Windows.

  2. Crea un file di script denominato verify-nfs-port-script.sh, copia e incolla al suo interno il seguente script 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 dello script. Questo comando deve essere eseguito come root, altrimenti aggiungi sudo all'inizio.
  4. Inserisci questo comando:

    SCRIPT_PATH INSTANCE_IP SHARE_NAME
    

    Sostituisci quanto segue:

    • SCRIPT_PATH: il percorso in cui si trova il file dello script. Questo comando deve essere eseguito come root, altrimenti aggiungi sudo all'inizio.
    • INSTANCE_IP: l'indirizzo IP dell'istanza Filestore
    • SHARE_NAME: il 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