이 페이지에서는 클라이언트 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!