이 페이지에서는 클라이언트 VM에서 statd 및 nlockmgr 데몬의 포트를 설정하여 방화벽 구성을 쉽게 만드는 방법을 설명합니다.
Filestore는 nlockmgr 및 statd 데몬을 사용하여 파일 잠금을 사용 설정합니다. 이러한 서비스의 포트는 클라이언트가 잠금을 올바르게 사용할 수 있도록 방화벽 규칙을 통해 클라이언트 VM에 올바르게 노출되어야 합니다. 인그레스 방화벽 규칙을 더 쉽게 구성하기 위해 모든 클라이언트 VM에서 일관성을 갖도록 statd 및 nlockmgr 포트를 설정하는 것이 좋습니다.
VPC 네트워크에 대한 방화벽 규칙을 구성해야 하는지 여부를 확인하는 방법은 방화벽 규칙 구성을 참조하세요.
포트 설정 확인
statd 및 nlockmgr 포트가 현재 설정된 값을 확인하려면 클라이언트 VM 인스턴스에서 다음 명령어를 실행합니다. 파일이 없거나 옵션에 값이 없는 경우 포트가 설정되지 않은 것입니다. 이 경우 데몬에는 임의의 사용 가능한 포트가 동적으로 할당됩니다.
Debian/Ubuntu
statd포트를 확인하려면 다음 명령어를 실행하고STATDOPTS값을 확인합니다.cat /etc/default/nfs-commonnlockmgr포트를 확인하려면 다음 명령어를 실행하고nlm_tcpport및nlm_udpport값을 확인합니다.cat /etc/modprobe.d/lock.conf
RHEL/CentOS
statd포트를 확인하려면 다음 명령어를 실행하고STATD_PORT값을 확인합니다.cat /etc/sysconfig/nfsnlockmgr포트를 확인하려면 다음 명령어를 실행하고nlm_tcpport및nlm_udpport값을 확인합니다.cat /etc/modprobe.d/lock.conf
SUSE
다음 명령어를 실행합니다.
cat /etc/sysconfig/nfs
statd 포트는 STATD_PORT 아래에 나열되고 nlockmgr 포트는 LOCKD_TCPPORT 및 LOCKD_UDPPORT 아래에 나열됩니다.
Windows
Windows에서는 NFS 포트를 설정하지 않아도 됩니다.
포트 설정
statd 및 nlockmgr 포트를 설정하려면 클라이언트 VM 인스턴스에서 다음 명령어를 실행합니다. 이러한 예에서는 nano 텍스트 편집기를 사용하지만 원하는 텍스트 편집기를 사용할 수 있습니다. 또한 이러한 예시에서는 해당 값이 일반적인 선택이기 때문에 statd의 포트로 2046을, nlockmgr의 포트로 4045를 사용합니다. 네트워크 구성을 기반으로 여러 포트를 사용할 수 있습니다. 이 경우 인그레스 방화벽 규칙은 사용 중인 특정 포트로 트래픽을 허용해야 합니다.
Debian/Ubuntu
statd포트를 설정합니다.수정할
/etc/default/nfs-common파일을 엽니다.sudo nano /etc/default/nfs-commonSTATDOPTS옵션을 설정합니다.STATDOPTS="-p 2046"파일을 저장하고 종료합니다.
nlockmgr포트를 설정합니다./etc/modprobe.d/lock.conf파일을 만듭니다.sudo nano /etc/modprobe.d/lock.confnlm_tcpport,nlm_udpport, 옵션을 설정합니다.options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045파일을 저장하고 종료합니다.
RHEL/CentOS
statd포트를 설정합니다.수정할
/etc/sysconfig/nfs파일을 엽니다.sudo nano /etc/sysconfig/nfsSTATD_PORT옵션을 설정합니다.STATD_PORT=2046파일을 저장하고 종료합니다.
nlockmgr포트를 설정합니다./etc/modprobe.d/lock.conf파일을 만듭니다.sudo nano /etc/modprobe.d/lock.confnlm_tcpport,nlm_udpport, 옵션을 설정합니다.options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045파일을 저장하고 종료합니다.
SUSE
statd 및 nlockmgr 포트를 설정합니다.
수정할
/etc/sysconfig/nfs파일을 엽니다.sudo nano /etc/sysconfig/nfsSTATD_PORT,LOCKD_TCPPORT,LOCKD_UDPPORT옵션을 설정합니다.STATD_PORT=2046 LOCKD_TCPPORT=4045 LOCKD_UDPPORT=4045파일을 저장하고 종료합니다.
Windows
Windows에서는 NFS 포트를 설정하지 않아도 됩니다.
포트가 열려 있는지 확인
NFS 포트가 제대로 열렸는지 확인하려면 다음 단계를 완료하세요.
다음 종속 항목을 설치합니다.
Debian/Ubuntu
명령줄에서 다음 명령어를 입력합니다.
sudo apt install nfs-common tcpdump tsharkRHEL/CentOS
명령줄에서 다음 명령어를 입력합니다.
sudo yum install nfs-utils tcpdump wiresharkSUSE
명령줄에서 다음 명령어를 입력합니다.
sudo zypper install nfs-client tcpdump wiresharkWindows
Windows에서는 이 확인 절차가 지원되지 않습니다.
verify-nfs-port-script.sh라는 스크립트 파일을 만들고 다음 스크립트를 복사하여 붙여넣은 후 로컬 머신에 저장합니다. 파일의 위치를 기록하고 다음 단계를 위해 저장합니다.#!/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}다음 명령어를 입력합니다.
chmod +x SCRIPT_PATH다음을 바꿉니다.
SCRIPT_PATH: 스크립트 파일이 있는 경로입니다. 이 명령어는 루트로 실행해야 합니다. 그러지 않으면 명령어 시작 부분에sudo를 추가하세요.
다음 명령어를 입력합니다.
SCRIPT_PATH INSTANCE_IP SHARE_NAME다음을 바꿉니다.
SCRIPT_PATH: 스크립트 파일이 있는 경로입니다. 이 명령어는 루트로 실행해야 합니다. 그러지 않으면 명령어 시작 부분에sudo를 추가하세요.INSTANCE_IP: Filestore 인스턴스의 IP 주소SHARE_NAME: 파일 공유 이름
포트가 열려 있으면 스크립트는 다음과 같은 응답을 반환합니다.
The NLM GRANT message is working properly!포트가 열려 있지 않으면 스크립트는 다음 오류를 반환합니다.
The NLM GRANT message is not working properly!