이 페이지에서는 클라이언트 VM에서 statd
및 nlockmgr
데몬의 포트를 설정하여 방화벽 구성을 쉽게 만드는 방법을 설명합니다.
Filestore는 nlockmgr
및 statd
데몬을 사용하여 파일 잠금을 사용 설정합니다. 이러한 서비스의 포트는 클라이언트가 잠금을 올바르게 사용할 수 있도록 방화벽 규칙을 통해 클라이언트 VM에 올바르게 노출되어야 합니다. 인그레스 방화벽 규칙을 더 쉽게 구성하기 위해 모든 클라이언트 VM에서 일관성을 갖도록 statd
및 nlockmgr
포트를 설정하는 것이 좋습니다.
VPC 네트워크에 대한 방화벽 규칙을 구성해야 하는지 여부를 확인하는 방법은 방화벽 규칙 구성을 참조하세요.
포트 설정 확인
statd
및 nlockmgr
포트가 현재 설정된 값을 확인하려면 클라이언트 VM 인스턴스에서 다음 명령어를 실행합니다. 파일이 없거나 옵션에 값이 없는 경우 포트가 설정되지 않은 것입니다. 이 경우 데몬에는 임의의 사용 가능한 포트가 동적으로 할당됩니다.
Debian/Ubuntu
statd
포트를 확인하려면 다음 명령어를 실행하고STATDOPTS
값을 확인합니다.cat /etc/default/nfs-common
nlockmgr
포트를 확인하려면 다음 명령어를 실행하고nlm_tcpport
및nlm_udpport
값을 확인합니다.cat /etc/modprobe.d/lock.conf
RHEL/CentOS
statd
포트를 확인하려면 다음 명령어를 실행하고STATD_PORT
값을 확인합니다.cat /etc/sysconfig/nfs
nlockmgr
포트를 확인하려면 다음 명령어를 실행하고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-common
STATDOPTS
옵션을 설정합니다.STATDOPTS="-p 2046"
파일을 저장하고 종료합니다.
nlockmgr
포트를 설정합니다./etc/modprobe.d/lock.conf
파일을 만듭니다.sudo nano /etc/modprobe.d/lock.conf
nlm_tcpport
,nlm_udpport
, 옵션을 설정합니다.options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045
파일을 저장하고 종료합니다.
RHEL/CentOS
statd
포트를 설정합니다.수정할
/etc/sysconfig/nfs
파일을 엽니다.sudo nano /etc/sysconfig/nfs
STATD_PORT
옵션을 설정합니다.STATD_PORT=2046
파일을 저장하고 종료합니다.
nlockmgr
포트를 설정합니다./etc/modprobe.d/lock.conf
파일을 만듭니다.sudo nano /etc/modprobe.d/lock.conf
nlm_tcpport
,nlm_udpport
, 옵션을 설정합니다.options lockd nlm_tcpport=4045 options lockd nlm_udpport=4045
파일을 저장하고 종료합니다.
SUSE
statd
및 nlockmgr
포트를 설정합니다.
수정할
/etc/sysconfig/nfs
파일을 엽니다.sudo nano /etc/sysconfig/nfs
STATD_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 tshark
RHEL/CentOS
명령줄에서 다음 명령어를 입력합니다.
sudo yum install nfs-utils tcpdump wireshark
SUSE
명령줄에서 다음 명령어를 입력합니다.
sudo zypper install nfs-client tcpdump wireshark
Windows
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!