Mengonfigurasi port NFS di VM klien

Halaman ini menunjukkan cara menetapkan port untuk daemon statd dan nlockmgr di VM klien untuk mempermudah konfigurasi firewall.

Filestore menggunakan daemon nlockmgr dan statd untuk mengaktifkan penguncian file. Port untuk layanan ini harus diekspos dengan benar di VM klien Anda melalui aturan firewall agar klien dapat menggunakan kunci dengan benar. Sebaiknya tetapkan port statd dan nlockmgr agar konsisten di semua VM klien, sehingga lebih mudah untuk mengonfigurasi aturan firewall masuk.

Untuk informasi selengkapnya tentang cara menentukan apakah Anda perlu mengonfigurasi aturan firewall untuk jaringan VPC, lihat Mengonfigurasi aturan firewall.

Memeriksa setelan port

Untuk memeriksa nilai yang ditetapkan untuk port statd dan nlockmgr saat ini, jalankan perintah berikut di instance VM klien. Jika file tidak ada, atau jika opsi tidak memiliki nilai, port tidak akan ditetapkan. Dalam hal ini, daemon secara dinamis ditetapkan ke port arbitrer yang tersedia.

Debian/Ubuntu

  1. Untuk menentukan port statd, jalankan perintah berikut dan lihat nilai STATDOPTS:

    cat /etc/default/nfs-common
    
  2. Untuk menentukan port nlockmgr, jalankan perintah berikut dan lihat nilai nlm_tcpport dan nlm_udpport:

    cat /etc/modprobe.d/lock.conf
    

RHEL/CentOS

  1. Untuk menentukan port statd, jalankan perintah berikut dan lihat nilai STATD_PORT:

    cat /etc/sysconfig/nfs
    
  2. Untuk menentukan port nlockmgr, jalankan perintah berikut dan lihat nilai nlm_tcpport dan nlm_udpport:

    cat /etc/modprobe.d/lock.conf
    

SUSE

Jalankan perintah berikut:

cat /etc/sysconfig/nfs

Port statd tercantum di bagian STATD_PORT dan port nlockmgr tercantum di bagian LOCKD_TCPPORT dan LOCKD_UDPPORT.

Windows

Menetapkan port NFS tidak diperlukan di Windows.

Menetapkan port

Untuk menetapkan port statd dan nlockmgr, jalankan perintah berikut di instance VM klien. Contoh ini menggunakan editor teks nano, tetapi Anda dapat menggunakan editor teks apa pun. Contoh ini juga menggunakan 2046 sebagai port untuk statd dan 4045 sebagai port untuk nlockmgr karena nilai ini adalah pilihan umum. Anda dapat menggunakan port yang berbeda berdasarkan konfigurasi jaringan. Dalam hal ini, aturan firewall masuk harus mengizinkan traffic ke port tertentu yang Anda gunakan.

Debian/Ubuntu

  • Tetapkan port statd:

    1. Buka file /etc/default/nfs-common untuk mengedit:

      sudo nano /etc/default/nfs-common
      
    2. Tetapkan opsi STATDOPTS:

      STATDOPTS="-p 2046"
      
    3. Simpan file dan keluar.

  • Tetapkan port nlockmgr:

    1. Buat file /etc/modprobe.d/lock.conf:

      sudo nano /etc/modprobe.d/lock.conf
      
    2. Tetapkan opsi nlm_tcpport dan nlm_udpport:

      options lockd nlm_tcpport=4045
      options lockd nlm_udpport=4045
      
    3. Simpan file dan keluar.

RHEL/CentOS

  • Tetapkan port statd:

    1. Buka file /etc/sysconfig/nfs untuk mengedit:

      sudo nano /etc/sysconfig/nfs
      
    2. Tetapkan opsi STATD_PORT:

      STATD_PORT=2046
      
    3. Simpan file dan keluar.

  • Tetapkan port nlockmgr:

    1. Buat file /etc/modprobe.d/lock.conf:

      sudo nano /etc/modprobe.d/lock.conf
      
    2. Tetapkan opsi nlm_tcpport dan nlm_udpport:

      options lockd nlm_tcpport=4045
      options lockd nlm_udpport=4045
      
    3. Simpan file dan keluar.

SUSE

Tetapkan port statd dan nlockmgr:

  1. Buka file /etc/sysconfig/nfs untuk mengedit:

    sudo nano /etc/sysconfig/nfs
    
  2. Tetapkan opsi STATD_PORT, LOCKD_TCPPORT, dan LOCKD_UDPPORT:

    STATD_PORT=2046
    LOCKD_TCPPORT=4045
    LOCKD_UDPPORT=4045
    
  3. Simpan file dan keluar.

Windows

Menetapkan port NFS tidak diperlukan di Windows.

Memverifikasi port terbuka

Untuk memverifikasi bahwa port NFS telah dibuka dengan benar, selesaikan langkah-langkah berikut.

  1. Instal dependensi berikut.

    Debian/Ubuntu

    Dari command line, masukkan perintah berikut:

    sudo apt install nfs-common tcpdump tshark
    

    RHEL/CentOS

    Dari command line, masukkan perintah berikut:

    sudo yum install nfs-utils tcpdump wireshark
    

    SUSE

    Dari command line, masukkan perintah berikut:

    sudo zypper install nfs-client tcpdump wireshark
    

    Windows

    Proses verifikasi ini tidak didukung di Windows.

  2. Buat file skrip bernama verify-nfs-port-script.sh, salin dan tempelkan skrip berikut di dalamnya, lalu simpan secara lokal ke komputer Anda. Catat lokasi file dan simpan untuk langkah berikutnya.

    #!/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. Masukkan perintah berikut:

    chmod +x SCRIPT_PATH
    

    Ganti kode berikut:

    • SCRIPT_PATH: jalur tempat file skrip Anda berada. Perintah ini harus dijalankan sebagai root. Jika tidak, tambahkan sudo ke awal perintah.
  4. Masukkan perintah berikut:

    SCRIPT_PATH INSTANCE_IP SHARE_NAME
    

    Ganti kode berikut:

    • SCRIPT_PATH: jalur tempat file skrip Anda berada. Perintah ini harus dijalankan sebagai root. Jika tidak, tambahkan sudo ke awal perintah.
    • INSTANCE_IP: alamat IP instance Filestore
    • SHARE_NAME: nama berbagi file

    Jika port terbuka, skrip akan menampilkan respons berikut:

    The NLM GRANT message is working properly!
    

    Jika port tidak terbuka, skrip akan menampilkan error berikut:

    The NLM GRANT message is not working properly!
    

Langkah selanjutnya