web-dev-qa-db-ja.com

ポートフォワードを介したNFSv4

ポートフォワードを介して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 /
4
Stone

私の同僚は、tcpdumpで解決策を見つけました。接続の試行の良し悪しの違いは、送信元ポートだけです。

次に、Googleは、エクスポートにinsecureオプションが必要だと教えてくれました。転送後、送信元ポートは1024を超え、通常は1024を下回り、insecureはサーバーに次のように伝えます。送信元ポートが1024を超えるクライアントを受け入れることができます。

4
Stone