ローカルネットワークマシンで正常に機能するNFSサーバー/クライアントシステムをセットアップしました。大好きです!
しかし、起動時にマウントが利用できない場合の長い遅延にうんざりしていたので、代わりにautofsを使用して共有をマウントするという彼の提案を@ridgyに取り上げることにしました- この投稿 。
以前にファイアウォールの問題があったので、すぐにufwがマウントのタイムアウトの原因であると疑った。そこで、サーバーとクライアントでufwを無効にしました。そして、確かに。これにより、autofsが正常に機能するようになりました。したがって、基本構成は正しいと確信しています。
この時点でufwにある他のルールは、ポート2078および6589のALLOWルールのみです。BLOCKルールは設定されていません。また、NFSはfstabで制御されたマウント中にufwをオンにして正常に動作するため、ブロックが発生している場所について少し混乱しています。
これまでのところ、通常のNFS 111,2049 TCP/UDP以外に、どのポート/プロトコルがautofsに固有であるかに関するドキュメントを見つけていません。
Ufwを再度有効にするたびに。共有に再びアクセスできなくなります。
何か案は?
@ridgy
以下のアドバイスに従って、nfs-commonとnfs-kernel-serverを編集した後、トリプルチェックを行い、編集は示されているとおりに行われました。再起動して実行しました...
$Sudo netstat -nalp | grep rpc
...出力は;
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1220/rpcbind
tcp 0 0 0.0.0.0:32767 0.0.0.0:* LISTEN 4158/rpc.mountd
tcp6 0 0 :::111 :::* LISTEN 1220/rpcbind
tcp6 0 0 :::32767 :::* LISTEN 4158/rpc.mountd
udp 0 0 0.0.0.0:972 0.0.0.0:* 1220/rpcbind
udp 0 0 0.0.0.0:32767 0.0.0.0:* 4158/rpc.mountd
udp 0 0 0.0.0.0:111 0.0.0.0:* 1220/rpcbind
udp6 0 0 :::972 :::* 1220/rpcbind
udp6 0 0 :::32767 :::* 4158/rpc.mountd
udp6 0 0 :::111 :::* 1220/rpcbind
unix 2 [ ACC ] STREAM LISTENING 15939 1/init /run/rpcbind.sock
unix 2 [ ] DGRAM 49175 4158/rpc.mountd
unix 3 [ ] STREAM CONNECTED 48294 1220/rpcbind /run/rpcbind.sock
unix 3 [ ] STREAM CONNECTED 16984 1220/rpcbind
unix 3 [ ] STREAM CONNECTED 48275 4157/rpc.idmapd
unix 3 [ ] STREAM CONNECTED 48276 4157/rpc.idmapd
OK ...だから、私は疑問に思う... rpc.statdはどこにあるのか???また、クライアントからNFS共有(autofsはまだ無効になっています)が表示されたままです。ファイアウォールは新しいrpc.mountdポート32767で更新されていませんでしたが。
最終的には、それほど複雑ではなく、 Securing NFS のヒントに従っています。ファイル/etc/default/nfs-common
および/etc/default/nfs-kernel-server
を次のように変更しました。
nfs-common:
.
.
# Options for rpc.statd.
# Should rpc.statd listen on a specific port? This is especially useful
# when you have a port-based firewall. To use a fixed port, set this
# this variable to a statd argument like: "--port 4000 --outgoing-port 4001".
# For more information, see rpc.statd(8) or http://wiki.debian.org/SecuringNFS
STATDOPTS="--port 32765 --outgoing-port 32766"
.
.
nfs-kernel-server:
.
.
# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option. For more information,
# see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
# To disable NFSv4 on the server, specify '--no-nfs-version 4' here
RPCMOUNTDOPTS="--manage-gids --port 32767"
.
.
なぜこれらのポートですか? 32767
は最高の15ビット数であるため、これらのポートが他の何かによってすでに使用されている可能性はほとんどありません。
クォータを使用していないため、/etc/default/quota
を提案どおりに変更しませんでした。そして、これらの変更を行った後に再起動する必要がありました。その後、私は結果を見ました
$ Sudo netstat -nalp | grep rpc
tcp 0 0 0.0.0.0:32767 0.0.0.0:* LISTEN 1018/rpc.mountd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 735/rpcbind
tcp 0 0 0.0.0.0:32765 0.0.0.0:* LISTEN 806/rpc.statd
tcp6 0 0 :::32767 :::* LISTEN 1018/rpc.mountd
tcp6 0 0 :::111 :::* LISTEN 735/rpcbind
tcp6 0 0 :::32765 :::* LISTEN 806/rpc.statd
udp 0 0 0.0.0.0:875 0.0.0.0:* 735/rpcbind
udp 0 0 127.0.0.1:982 0.0.0.0:* 806/rpc.statd
udp 0 0 0.0.0.0:32765 0.0.0.0:* 806/rpc.statd
udp 0 0 0.0.0.0:32767 0.0.0.0:* 1018/rpc.mountd
udp 0 0 0.0.0.0:111 0.0.0.0:* 735/rpcbind
udp6 0 0 :::875 :::* 735/rpcbind
udp6 0 0 :::32765 :::* 806/rpc.statd
udp6 0 0 :::32767 :::* 1018/rpc.mountd
udp6 0 0 :::111 :::* 735/rpcbind
unix 2 [ ACC ] STREAM LISTENING 11412 735/rpcbind /run/rpcbind.sock
unix 2 [ ] DGRAM 9521 806/rpc.statd
unix 2 [ ] DGRAM 9614 1018/rpc.mountd
unix 3 [ ] STREAM CONNECTED 11721 862/rpc.idmapd
unix 3 [ ] STREAM CONNECTED 11722 862/rpc.idmapd
ご覧のとおり、rpc.mountd
およびrpc.statd
がリッスンしているポートは静的です。
クライアントでshowmount
と入力すると(ここでは192.168.192.20)、Wiresharkは通信を表示します(サーバーは192.168.192.111)。ここで重要:GETPORT Call
およびGETPORT reply
を返すPort:32767
。通信では、このポートが使用されます。
これで、ファイアウォールルールを変更できるようになり、showmount
およびautofs
をファイアウォール経由で使用できるようになります。
レコードのみ
コメントのヒントと私自身の経験から、ディストリビューションごとに異なる動作を発見しました。
raspbian jessie
(debian
に基づく)には、サービスnfs-common
(ファイル/etc/init.d/nfs-common
)があります。 rpc.statd
のポート設定を尊重して、ブート時に/etc/default/nfs-common
。Ubuntu 16.04
には、そのようなサービスはありません。 NFS V4では必要ないため、rpc.statd
は起動時に開始されません。しかし、mount .... -o nfsvers=3
が完了すると、rpc.statd
のポート設定を尊重して、/etc/default/nfs-common
が開始されます。私はそれに関する一貫した文書を見つけられませんでした。 in NFSの構成方法 ファイル/etc/init.d/nfs-common
が明示的に言及されていますが、パッケージにはnotがあります。誰かがそれについてのヒント/リンクを持っている場合、それは豊かに値するでしょう。
もう1つのコメント:man rpc.mountd
およびman rpc.statd
say(オプション--port
の場合):
「このオプションが指定されていない場合、rpc.statdは/ etc/servicesを参照しようとします。ポートが成功した場合、すべてのリスナーソケットに同じポートを設定します。
/etc/services
でポートを設定しても(上記のwikiで提案されているように)、これは機能しませんでした。したがって、/etc/default
のファイルを変更することは必須のようです-その時点でmanページは正しくありません。