通过端口转发实现 NFSv4

通过端口转发实现 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

我测试了 NFVs4 是否只需打开这一个 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 /

答案1

我的同事在 中发现了解决方案tcpdump,即良好连接尝试和不良连接尝试之间的唯一其他区别是源端口。

然后谷歌告诉我,我需要insecure导出选项,因为转发后源端口高于 1024,而在正常情况下它低于 1024,并insecure告诉服务器它可以接受源端口高于 1024 的客户端。

相关内容