ポートフォワードを介してNFSv4サーバーに到達したいと思います。大きな計画は、ローカルホスト上で実行されているHAProxyと負荷分散されたNFSv4サーバーのクラスターです。しかし、これは今ではそれほど重要ではありません。
サーバーで/etc/exports
こんな感じ
/mnt/x 192.168.0.0/16(rw,sync,no_subtree_check,no_root_squash,fsid=1)
クライアントからサーバーにTCP 2049で接続し、このように共有をマウントできます
mount -t nfs4 -o proto=tcp,port=2049 192.168.2.25:/mnt/x /mnt
2台のマシン間の他のすべての通信をフィルタリングすることにより、NFVs4がこの1つだけで満足していることをテストしましたTCPポートが開いています。
したがって、NFSはうまく機能すると思います。
しかし、たとえばクライアントのredir
を使用してポートを転送すると、次のようになります。
redir --lport=3049 --cport=2049 --caddr=192.168.2.25
次のようにマウントしたい
mount -t nfs4 -o proto=tcp,port=3049 127.0.0.1:/mnt/x /mnt
私は得る
mount.nfs4: Operation not permitted
何が恋しい?サーバーログに関連情報が表示されません。
更新:接続の良い試みと悪い試みの両方をキャプチャしました。最初は同じで、クライアントは
PUTROOTFH,GETFH,GETATTR
コマンド。良い場合、サーバーは応答します
PUTROOTFH-NFS4_OK,GETFH-NFS4_OK,GETATTR-NFS4_OK
悪い(転送された)場合は応答します
PUTROOTFH-NFS4_OK,GETFH-NFS4_OK,GETATTR-NFS4ERR_PERM
この時点で、エクスポートをに変更しました
/mnt/x 0.0.0.0/0.0.0.0(rw,sync,no_subtree_check,no_root_squash,fsid=1)
しかし、エラーは同じです。
良い場合、サーバーログは
rpc.mountd[1711]: nfsd_export: inbuf '0.0.0.0/0.0.0.0 /'
rpc.mountd[1711]: nfsd_export: found 0x12dfeb0 path /
rpc.mountd[1711]: nfsd_export: inbuf '0.0.0.0/0.0.0.0 /mnt'
rpc.mountd[1711]: nfsd_export: found 0x12e2810 path /mnt
悪い場合には
rpc.mountd[1711]: nfsd_export: inbuf '0.0.0.0/0.0.0.0 /'
rpc.mountd[1711]: nfsd_export: found 0x12dfeb0 path /
私の同僚は、tcpdump
で解決策を見つけました。接続の試行の良し悪しの違いは、送信元ポートだけです。
次に、Googleは、エクスポートにinsecure
オプションが必要だと教えてくれました。転送後、送信元ポートは1024を超え、通常は1024を下回り、insecure
はサーバーに次のように伝えます。送信元ポートが1024を超えるクライアントを受け入れることができます。