如果在你的局域网里有两个linux机器,一个A,其ip是192.168.10.2
,另外一个是B,ip是192.168.10.3
,那么是否有办法将机器A的/home/haha/
文件夹通过网络的方式共享给B呢?
答案是有的😀,且看下方的实战教程
针对服务器A端(以centos8为例):
- 安装nfs服务,并开机自启:
sudo dnf install nfs-utils
sudo systemctl enable nfs-server
sudo systemctl start nfs-server
- 编辑/etc/exports,输入下方:
/home/haha/ 192.168.10.3(rw,sync,no_root_squash)
需要注意,这里的192.168.10.3
便是你需要的B的ip,次行便是告知nfs服务,允许连接文件夹/home/haha/
的ip是多少,请根据自己的实际情况进行更改。
- 重新加载 NFS 服务以使更改生效:
sudo exportfs -a
- (可选) 设置防火墙,只允许机器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为例):
- 安装nfs服务:
yum install nfs-utils -y
- 创建挂载文件夹:
mkdir /mnt/orchid
- 挂载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 上:
-
确保服务器 A 安装了 NFS 服务,并已配置共享目录
/home/dingding
。 -
编辑
/etc/exports
文件,并添加以下内容:/home/dingding 192.168.1.3(rw,sync,no_subtree_check)
这将允许客户端 B 的 IP 地址
192.168.1.3
访问/home/dingding
目录,并设置为读写权限。 -
保存并关闭
/etc/exports
文件。 -
执行以下命令以重新加载 NFS 服务:
sudo exportfs -ra
在 NFS 客户端 B 上:
-
确保客户端 B 安装了 NFS 客户端软件包。可以使用以下命令安装:
sudo apt-get install nfs-common
-
打开终端,使用 SSH 建立到 NFS 服务器 A 的端口转发隧道。执行以下命令:
ssh -L 2049:localhost:2049 user@11.22.33.44
其中,
user
是 NFS 服务器 A 的用户名,11.22.33.44
是 NFS 服务器 A 的公网 IP。 -
输入密码并登录到 NFS 服务器 A。隧道将在本地客户端 B 的 2049 端口与 NFS 服务器 A 的 2049 端口之间建立连接。
-
打开另一个终端窗口,执行以下命令以在客户端 B 上挂载 NFS 共享:
sudo mount -t nfs -o vers=4 localhost:/home/dingding /mnt/dingding
这将使用本地的 2049 端口通过 SSH 隧道连接到 NFS 服务器 A,并将
/home/dingding
目录挂载到客户端 B 的/mnt/dingding
目录。 -
确认挂载成功,可以使用以下命令查看已挂载的 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 挂载时,通常需要连接到该端口。如果你希望更改端口,可以进行如下操作:
-
在 NFS 服务器上修改
/etc/nfs.conf
文件,添加或修改以下行:[nfsd] port=<新端口号>
-
在 NFS 服务器上重新启动 NFS 服务,以使更改生效。
-
在客户端上进行挂载时,使用
-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_PORT
和 STATD_PORT
参数的值,以自定义 NFS 服务器的端口号。修改后,保存文件并重启 NFS 服务使更改生效。
需要注意的是,修改 NFS 服务器的端口号可能会影响与客户端的连接,因为客户端默认会使用 NFS 服务器的标准端口号(例如,2049)进行通信。如果你修改了服务器的端口号,客户端可能需要相应地调整配置以使用新的端口号进行挂载操作。