通过nfs-ganesha代理NFS服务

假设局域网A中的机器需要访问局域网B的NFS服务,但是基于网络安全的考虑,局域网A中只有机器A1可以访问局域网B的NFS服务,相信这种场景是比较常见的。最近,笔者就遇到了类似的使用场景,在调查解决方案的时候,搜索引擎多次关联到一个叫nfs-ganasha的开源软件。于是,笔者就根据nfs-ganasha为数不多的文档,结合nfs-ganesha源代码尝试解决我的问题。


nfs-ganesha目前最新的正式release版本为v3.3,经多次验证,是不支持代理NFS v3服务的,所幸,笔者从当前最新更新的代码分支中(next分支),查到了代理V3服务器的逻辑,于是费了好大劲从最新代码中编译二进制文件,经验证,问题得到解决,下面我会简单介绍一下如何配置nfs-ganesha解决我的问题的。


先睹为快

1. 首先准备好配置文件(比如叫做ganesha-v3.conf)

EXPORT
{
        Export_Id = 77;
        # 这个是上面提到的局域网B的NFS服务export的一个目录
        Path = /my_shared_dir;
        Pseudo = /tmp_proxy;
        Access_Type = RW;
        Squash = no_root_squash;
        # Exporting FSAL
        FSAL {
                Name = PROXY_V3;
                # 这个是上面提到的局域网B的NFS服务IP地址
                Srv_Addr = 100.0.0.1;
        }
}
NFS_CORE_PARAM {
        ## Allow NFSv3 to mount paths with the Pseudo path, the same as NFSv4,
        ## instead of using the physical paths.
        mount_path_pseudo = true;
}

2. 然后启动ganesha服务

注意:ganesha-v3.conf的内容如步骤1所示

rpcbind
rpc.statd -L
rpc.idmapd
/usr/bin/ganesha.nfsd -F -L /dev/stdout -f /usr/bin/ganesha.nfsd -F -L /dev/stdout -f ganesha-v3.conf

3.尝试挂载

注意:如果在不同于步骤2的机器上挂载,127.0.0.1设为步骤2机器的公网IP

mkdir lhg
mount -t nfs 127.0.0.1:/tmp_proxy lhg

代码编译ganesha

wget https://github.com/nfs-ganesha/nfs-ganesha/archive/next.zip && unzip next.zip
cd next/next
cmake -DCMAKE_BUILD_TYPE=Release -Wno-dev -DPROXY_HANDLE_MAPPING=ON -DUSE_9P=OFF -DUSE_FSAL_CEPH=OFF -DUSE_FSAL_GLUSTER=OFF -DUSE_FSAL_LUSTRE=OFF -DUSE_FSAL_LIZARDFS=OFF -DUSE_FSAL_XFS=ON -DUSE_FSAL_RGW=OFF -DRADOS_URLS=OFF -DUSE_RADOS_RECOV=OFF -D_MSPAC_SUPPORT=OFF -DUSE_GSS=ON -DUSE_FSAL_LUSTRE=OFF -DALLOCATOR=libc ../src/ \
make
make install

总结

Nfs-ganesha是运行在用户空间的NFS(支持v3,4.0,4.1,4.1 pNFS和4.2)文件服务,旨在解决linux内核FUSE(Filesystem in Userspace)不支持通过NFS协议向外export FUSE的痛点,目前可支持通过NFS export多种文件系统,包括ceph,Cluster,GPFS等(更多信息请参阅链接)。

Nfs-ganesha适用于较多的使用场景,希望本文能够帮助到大家。

合智互联客户成功服务热线:400-1565-661

admin
admin管理员

上一篇:使用VScode部署华为鲲鹏开发套件配置参考
下一篇:【华为云-建站之路】小白的建站之路

留言评论

暂无留言
取消
扫码支持