我想通过端口转发到达我的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
我testing了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 /
我的同事发现tcpdump的解决scheme,好的和不良的连接尝试之间唯一的区别是源端口。
然后谷歌告诉我,我需要导出的insecure选项,因为在转发之后,源端口在1024以上,正常情况下在1024以下, insecure告诉服务器它可以接受源端口在1024以上的客户端。