我想通过端口转发访问我的 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 的客户端。