このページでは、クライアント 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 ポートの設定は必要ありません。
ポートを設定する
クライアント VM インスタンスで次のコマンドを実行し、statd
ポートと nlockmgr
ポートを設定します。これらの例では 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
: スクリプト ファイルのパス。これは root として実行する必要があります。そうでない場合は、コマンドの先頭にsudo
を追加します。
次のコマンドを入力します。
SCRIPT_PATH INSTANCE_IP SHARE_NAME
以下を置き換えます。
SCRIPT_PATH
: スクリプト ファイルのパス。これは root として実行する必要があります。そうでない場合は、コマンドの先頭にsudo
を追加します。INSTANCE_IP
: Filestore インスタンスの IP アドレスSHARE_NAME
: ファイル共有の名前
ポートが開いている場合、スクリプトは次のレスポンスを返します。
The NLM GRANT message is working properly!
ポートが開いていない場合は、スクリプトから次のエラーが返されます。
The NLM GRANT message is not working properly!