如果在你的局域网里有两个linux机器,一个A,其ip是192.168.10.2,另外一个是B,ip是192.168.10.3,那么是否有办法将机器A的/home/haha/文件夹通过网络的方式共享给B呢?

答案是有的😀,且看下方的实战教程

针对服务器A端(以centos8为例):

  1. 安装nfs服务,并开机自启:
sudo dnf install nfs-utils
sudo systemctl enable nfs-server
sudo systemctl start nfs-server
  1. 编辑/etc/exports,输入下方:
/home/haha/ 192.168.10.3(rw,sync,no_root_squash)

需要注意,这里的192.168.10.3便是你需要的B的ip,次行便是告知nfs服务,允许连接文件夹/home/haha/的ip是多少,请根据自己的实际情况进行更改。

  1. 重新加载 NFS 服务以使更改生效:
sudo exportfs -a
  1. (可选) 设置防火墙,只允许机器B的ip 192.168.10.3进行访问:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.3" service name="nfs" accept'
sudo firewall-cmd --reload

针对客户端(以centos7为例):

  1. 安装nfs服务:
yum install nfs-utils -y
  1. 创建挂载文件夹:
mkdir /mnt/orchid
  1. 挂载nfs网络硬盘:
mount 192.168.10.2:/home/haha /mnt/orchid

需要注意,这里的192.168.10.2便是你需要的A的ip,请根据自己的实际情况进行更改。

大功告成🤗有问题欢迎评论区讨论哦




PS:非内网怎么连接呢?(20230713)

先说结论:非内网就不推荐nfs了,可以使用比如webdav等其他方式去实现,因为nfs主要就是针对内网设计的,往下看你就知道如果想穿透,那么会有诸多限制😓

nfs文件共享服务器,必须要内网才可以挂嘛?比如我的nfs服务器A,ip是11.22.33.44,这是公网ip,客户端B是192.168.3.1内网机器,B可以连接到A,但是A没办法主动连接到B,这种情况下可以挂载么?

其实也是可以的,只不过需要使用端口映射罢了,这里笔者举一个简单例子供大家参考:
经过查询,nfs-server在B上的端口是111,那么我们首先使用端口映射(不同链路的机器使用内网穿透完成映射),直接放与chatgpt的回答。请注意,下面的回答笔者并未实操,仅供参考


问:

我有两个机器,A是nfs服务器,其ip是11.22.33.44,是公网ip;B是nfs客户端,其是内网机器,ip是192.168.1.3 我如何用B来挂载服务器A上的/home/dingding目录到B机器的/mnt/dingding下呢?请注意,在这个例子中由于A是公网ip,所以B可以连接到A,但是A没办法连接到内网机器B的ip

答:

下面是完整的实现步骤,包括服务器 A 的设置和客户端 B 的操作:

在 NFS 服务器 A 上:

  1. 确保服务器 A 安装了 NFS 服务,并已配置共享目录 /home/dingding

  2. 编辑 /etc/exports 文件,并添加以下内容:

    /home/dingding 192.168.1.3(rw,sync,no_subtree_check)
    

    这将允许客户端 B 的 IP 地址 192.168.1.3 访问 /home/dingding 目录,并设置为读写权限。

  3. 保存并关闭 /etc/exports 文件。

  4. 执行以下命令以重新加载 NFS 服务:

    sudo exportfs -ra
    

在 NFS 客户端 B 上:

  1. 确保客户端 B 安装了 NFS 客户端软件包。可以使用以下命令安装:

    sudo apt-get install nfs-common
    
  2. 打开终端,使用 SSH 建立到 NFS 服务器 A 的端口转发隧道。执行以下命令:

    ssh -L 2049:localhost:2049 user@11.22.33.44
    

    其中,user 是 NFS 服务器 A 的用户名,11.22.33.44 是 NFS 服务器 A 的公网 IP。

  3. 输入密码并登录到 NFS 服务器 A。隧道将在本地客户端 B 的 2049 端口与 NFS 服务器 A 的 2049 端口之间建立连接。

  4. 打开另一个终端窗口,执行以下命令以在客户端 B 上挂载 NFS 共享:

    sudo mount -t nfs -o vers=4 localhost:/home/dingding /mnt/dingding
    

    这将使用本地的 2049 端口通过 SSH 隧道连接到 NFS 服务器 A,并将 /home/dingding 目录挂载到客户端 B 的 /mnt/dingding 目录。

  5. 确认挂载成功,可以使用以下命令查看已挂载的 NFS 共享:

    df -h
    

如果一切顺利,您应该能够在客户端 B 的 /mnt/dingding 目录下看到 NFS 服务器 A 上 /home/dingding 目录的内容。

请确保客户端 B 可以通过 SSH 连接到 NFS 服务器 A,并具有适当的权限。另外,请根据实际情况替换服务器 A 的公网 IP、用户名和共享目录路径。

问:

/home/dingding 192.168.1.3(rw,sync,no_subtree_check)
这句话,在A服务器并不能连接到192.168.1.3这个ip,这样写可以吗?

答:

如果 NFS 服务器 A 无法直接连接到客户端 B 的 IP 地址(192.168.1.3),而且你已经通过 SSH 隧道将 NFS 端口映射到本地的 2049 端口,那么你可以尝试以下修改 /etc/exports 文件的内容:

/home/dingding localhost(rw,sync,no_subtree_check)

这样设置将允许 NFS 服务器 A 只接受来自本地回环地址(localhost)的连接。然后,在客户端 B 上挂载 NFS 共享时,使用以下命令:

sudo mount -t nfs -o vers=4 localhost:/home/dingding /mnt/dingding

这样,客户端 B 将通过本地回环地址连接到 NFS 服务器 A,并成功挂载 /home/dingding 目录。

请注意,这种设置仅适用于通过 SSH 隧道进行端口转发的情况。确保在客户端 B 上已经建立了正确的 SSH 隧道,并且本地的 2049 端口与 NFS 服务器 A 的 2049 端口之间建立了连接。

问:

必须要2049吗?我能不能更换端口

答:

默认情况下,NFS 服务器使用的端口是 2049,因此在进行 NFS 挂载时,通常需要连接到该端口。如果你希望更改端口,可以进行如下操作:

  1. 在 NFS 服务器上修改 /etc/nfs.conf 文件,添加或修改以下行:

    [nfsd]
    port=<新端口号>
    
  2. 在 NFS 服务器上重新启动 NFS 服务,以使更改生效。

  3. 在客户端上进行挂载时,使用 -p 选项指定新的端口号:

    sudo mount -t nfs -o vers=4 -p <新端口号> <NFS服务器IP>:/<共享目录> <挂载点>
    

确保在服务器和客户端上都进行相应的配置更改,并使用相同的新端口号进行通信。

需要注意的是,更改 NFS 端口可能需要进行额外的防火墙配置,以允许新的端口进行网络通信。请确保在服务器和客户端上相应的防火墙规则已正确配置,以允许流量通过指定的端口。

问:

你没明白我的意思,我是说在/etc/exports里如何添加修改的端口信息?

答:

对不起,我误解了你的问题。在 /etc/exports 文件中,无法直接指定 NFS 服务器的端口号。NFS 服务器默认使用的端口是 2049,并且在 /etc/exports 中只需指定共享的目录和相关权限。

如果你希望更改 NFS 服务器的端口号,需要在 NFS 服务器上修改 /etc/nfs.conf 文件,如我之前所述。请注意,这是在 NFS 服务器上配置的端口号,而不是在 /etc/exports 中指定的。

因此,无论你是否更改了 NFS 服务器的端口号,对于 NFS 客户端来说,仍然需要使用默认的 2049 端口进行挂载。客户端会尝试与服务器建立连接,并通过默认端口进行通信。

问:

那/etc/exports就无法使用自定义端口了??

答:

是的,对于 /etc/exports 文件来说,无法直接指定自定义的端口号。它只负责指定共享目录和相关权限,不涉及端口号的设置。

如果你需要在 NFS 服务器上使用自定义的端口号,你需要在服务器的配置文件中进行相应的更改。在大多数 Linux 发行版中,NFS 的配置文件是 /etc/nfs.conf。你可以编辑该文件,找到并修改 MOUNTD_PORTSTATD_PORT 参数的值,以自定义 NFS 服务器的端口号。修改后,保存文件并重启 NFS 服务使更改生效。

需要注意的是,修改 NFS 服务器的端口号可能会影响与客户端的连接,因为客户端默认会使用 NFS 服务器的标准端口号(例如,2049)进行通信。如果你修改了服务器的端口号,客户端可能需要相应地调整配置以使用新的端口号进行挂载操作。