Skip to content

NFS 文件挂载

修改日期:2023 年 5 月 15 日。

若实验室新增服务器需要进行 NFS 挂载,该文档将帮你解决相关问题。修改相关配置后,请更新该文档,以方便维护。

如无特殊说明,该文档所有命令都是由 root 用户运行的。

前言

由于 ada-709 服务器在”高新区 A709 实验室“内,并通过路由器与外网相连,因此,若直接将其余服务器的 NFS 服务的 exports ip 设为 高新区实验室的外网 ip,将导致所有接入该路由器的电脑都可以 NFS 挂载获取实验室其他服务器的数据资源,包括但不限于:通过 709 WIFI 接入的设备,通过实验室工位上网线插口接入的设备。

因此,为了数据安全,需要在其他服务器与 ada-709 间先建立 VPN,保证 709 实验室内只有 ada-709 这台设备可以 NFS 挂载其他服务器的数据资源。

即使未来 ada-709 服务器不通过路由器与外网相连了,先建立 VPN 再进行挂载,对服务器维护也是有帮助的(因为五花八门 IP 的服务器将会处于同一私有网络的网段内,可以减少配置复杂度)。

现有服务器节点信息

hostname 外网 IP VPN IP WireGuard 监听端口号 公共目录
ada-709 211.86.152.88 10.0.0.1 51709 /mnt/709/data2 /mnt/709/data3
ada-A100 202.38.86.218 10.0.0.2 51709 /mnt/a100/ada-data /mnt/a100/ada-data1
ada-server 210.45.64.11 10.0.0.3 51709 /mnt/server/data /mnt/server/data1
ada-mix 202.38.75.22 10.0.0.4 51709 /mnt/mix/ssd /mnt/mix/hdd
ada-4090 210.45.71.115 10.0.0.5 51709 /mnt/4090/data /mnt/4090/data1

新增服务器/更新服务器节点信息后,请及时更新上表。

拓扑结构

目前,实验室 NFS 挂载的拓扑结构为有向完全图,若未来需新增服务器,或某一台服务器 IP 变动,需要在所有服务器上修改配置。所幸,目前(至 2023 年 5 月 15 日)实验室内只有 5 台服务器,工作量不大,若后续继续增加服务器,或许得考虑新的拓扑结构和配置方案。

/etc/hosts 文件

Linux 文件中 /etc/hosts 文件保存了主机与 IP 的映射关系,可将实验室服务器的 IP 和 hostname 写入该文件中,方便维护,其每个条目的格式为 IPAddress HostName。若实验室新增服务器,请在新服务器的 /etc/hosts 文件中添加如下内容:

在机器数量增加后,建议实验室购买域名,使用域名来进行 DNS 解析,方便管理。

211.86.152.88 ada-709
202.38.86.218 ada-A100
210.45.64.11  ada-server
202.38.75.22  ada-mix
210.45.71.114 ada-4090

在为新服务器修改合适的 hostname 后,将该服务器的 IP 和 hostname 加入实验室其他服务器的 /etc/hosts 文件中。

VPN 配置

在每台服务器中,VPN 的由 WireGuard 实现,其配置文件位于 /etc/wireguard/wg0.conf,私钥 /etc/wireguard/privatekey,公钥 /etc/wireguard/publickey。注:私钥和配置文档需要设置权限 600,即仅 root 用户可见可修改。

实验室的已有服务器 VPN 配置了私有网络 10.0.0.0/24 网段的 IP,若需要新增服务器,建议仍然放在该网段下,并在为新服务器配置 VPN 前,请先查看任意服务器的配置文件,以确保 IP 不冲突。在配置完成后,请修改其余服务器配置文件,并修改本文档,以方便后续维护。

新增服务器

新服务器配置

若新增服务器,需要将该服务器加入实验室服务器的 VPN 中,首先,请先 安装 WireGuard。安装完成后,使用如下命令在 /etc/wireguard/ 目录中生成公钥和私钥:

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

创建文件 /etc/wireguard/wg0.conf,在其中写入本服务器的 WireGuard 接口信息:

vim /etc/wireguard/wg0.conf
[Interface]
Address = <NEW_NODE_VPN_IP>/24
ListenPort = <LISTEN_PORT>
PrivateKey = <SERVER_PRIVATE_KEY>
  • Address :私有网络 IP 地址,请选择 10.0.0.0/24 网段的未使用 IP 替换 <NEW_NODE_VPN_IP>,如 10.0.0.22。

  • ListenPort :WireGuard 监听端口,请使用选定的端口替换掉 <LISTEN_PORT>,如 51709。

  • PrivateKey :私钥,请用 cat /etc/wireguard/privatekey 命令的输出替换掉 <SERVER_PRIVATE_KEY>

/etc/wireguard/wg0.conf 中继续添加其余服务器的接口信息(新增服务器后,请将对应内容写入如下代码块,方便维护)

[Peer] # ada-709 (RTX 3080 Ti)
PublicKey = NeXK/gzemXfLM7wtJNup84gOTvGDLno5x+RZlzLArWA=
Endpoint = ada-709:51709
AllowedIPs = 10.0.0.1/32
PersistentKeepalive = 25

[Peer] # ada-server (RTX 2080 Ti)
PublicKey = nm5g9hsiHYIwY/SH4ntYhhtUQuz7Avzwdn+cBm4gXBQ=
Endpoint = ada-server:51709
AllowedIPs = 10.0.0.3/32
PersistentKeepalive = 25

[Peer] # ada-A100 (A100 80G)
PublicKey = I3Xz43Z7wIeM00rvaeHZs/kRJ2SSK1/0+vD7ZinJEzM=
Endpoint = ada-A100:51709
AllowedIPs = 10.0.0.2/32
PersistentKeepalive = 25

[Peer] # ada-mix (RTX 3090 + RTX 3080 Ti + A30)
PublicKey = X7BGTdAHr5HxBfHLfwJkpLojRfd7Iasf/VZCm0e5PBk=
Endpoint = ada-mix:51709
AllowedIPs = 10.0.0.4/32
PersistentKeepalive = 25

[Peer] # ada-4090 (RTX 4090)
PublicKey = 9v2DQWdIqgbo0ZtD1aybcLFjfYqW6hVEZ356FtsNUxs=
Endpoint = ada-4090:51709
AllowedIPs = 10.0.0.5/32
PersistentKeepalive = 25
  • PublicKey:对应服务器的公钥
  • Endpoint :对应服务器的外网 IP 地址与 WireGuard 监听端口(如上示例 IP 地址使用了 hostname,系统会查看 /etc/hosts 文件并解析为对应 IP )
  • AllowedIPs :私有网络 IP
  • PersistentKeepalive:发送 keepalive 包的时间间隔(单位 sec)。

修改文件权限,避免非授权者篡改或查看

cd /etc/wireguard/
chmod 600 wg0.conf privatekey 

已有服务器的新增配置

在已有服务器的 /etc/hosts 中添加新服务器的 ip 信息。并在其余每台服务器中 /etc/wireguard/wg0.conf 添加如下配置:

[Peer]
PublicKey = <NEW_NODE_PUBLIC_KEY>
Endpoint = <IP>:<LISTEN_PORT>
AllowedIPs = <NEW_NODE_VPN_IP>/32
PersistentKeepalive = 25
  • PublicKey 中的 <NEW_NODE_PUBLIC_KEY> 请用新服务器的公钥替换(新服务器的 /etc/wireguard/publickey 文件中的内容);
  • Endpoint<IP> 使用新服务器外网 IP 替换(建议在 /etc/hosts 中添加新服务器的条目,然后使用 hostname,方便维护),<LISTEN_PORT> 即新服务器 WireGuard 配置时设置的 <LISTEN_PORT>
  • AllowedIPS<NEW_NODE_VPN_IP> 即新服务器 WireGuard 配置时使用的 <NEW_NODE_VPN_IP>

启动服务

在新增服务器上,使用如下命令启动服务,并设为开机自启动

systemctl enable --now wg-quick@wg0.service

在已有服务器上,重启 wg-quick

systemctl restart wg-quick@wg0.service

启动后,使用 wg 命令查看是否配置成功。

NFS 配置

新增服务器的配置

在配置完 VPN 后,就可以通过 VPN 进行 NFS 挂载了。

假设,新服务器中有 /mnt/node/data1/mnt/node/data2 两个目录需要 NFS 挂载到其他服务器,那么在新服务器的 /etc/exports 文件中添加如下内容:(注意:目录名不能与已有挂载点重名,最好起一个一眼能看出这个目录属于哪个服务器的名字

/mnt/node 10.0.0.0/24(rw,sync,no_subtree_check,no_root_squash,crossmnt)

该文件声明,只有 10.0.0.0/24 网段 IP 的设备可 NFS 挂载本机的 /mnt/node 下的文件,其余已有服务器也是类似配置,不需要修改(这就是为什么建议将新增服务器的 VPN IP 设置在该网段的原因,否则,还需修改所有已有服务器的 /etc/exports 配置文件)。

修改保存后,执行如下命令启用配置

exportfs -ra

然后打开 /etc/fstab 文件添加 NFS 文件挂载信息,以确保每次开机时能够自动挂载(新服务器配置完成后,请在如下代码块中添加新服务器对应内容,方便后期维护)

10.0.0.1:/mnt/709/data2 /mnt/709/data2 nfs4 _netdev,soft,nofail,x-systemd.after=wg-quick@wg0.service 0 0
10.0.0.1:/mnt/709/data3 /mnt/709/data3 nfs4 _netdev,soft,nofail,x-systemd.after=wg-quick@wg0.service 0 0
10.0.0.2:/mnt/a100/data /mnt/a100/data nfs4 _netdev,soft,nofail,x-systemd.after=wg-quick@wg0.service 0 0
10.0.0.2:/mnt/a100/data1 /mnt/a100/data1 nfs4 _netdev,soft,nofail,x-systemd.after=wg-quick@wg0.service 0 0
10.0.0.3:/mnt/server/data /mnt/server/data nfs4 _netdev,soft,nofail,x-systemd.after=wg-quick@wg0.service 0 0
10.0.0.3:/mnt/server/data1 /mnt/server/data1 nfs4 _netdev,soft,nofail,x-systemd.after=wg-quick@wg0.service 0 0
10.0.0.4:/mnt/mix/hdd /mnt/mix/hdd nfs4 _netdev,soft,nofail,x-systemd.after=wg-quick@wg0.service 0 0
10.0.0.4:/mnt/mix/ssd /mnt/mix/ssd nfs4 _netdev,soft,nofail,x-systemd.after=wg-quick@wg0.service 0 0
10.0.0.5:/mnt/4090/data /mnt/4090/data nfs4 _netdev,soft,nofail,x-systemd.after=wg-quick@wg0.service 0 0
10.0.0.5:/mnt/4090/data1 /mnt/4090/data1 nfs4 _netdev,soft,nofail,x-systemd.after=wg-quick@wg0.service 0 0

保存退出后,为每台机服务器的挂载点创建目录

mkdir -p $(grep '10.0.0' /etc/fstab | awk '{print $2}'); ls /mnt/*

用如下命令进行挂载

systemctl daemon-reload; mount -a

完成如上配置后,各服务器皆可访问其他服务器的数据目录

PS:公共数据目录需设置权限 777。

已有服务器的配置

所有已有的服务器上,进行如下配置,让其能访问新增服务器的 /mnt/node/data1/mnt/node/data2 目录。

打开服务器 /etc/fstab 文件,添加如下内容:

<NEW_NODE_VPN_IP>:/mnt/node /mnt/node nfs4 _netdev,soft,nofail,x-systemd.after=wg-quick@wg0.service 0 0

保存退出后,为挂载点创建目录,并挂载

mkdir /mnt/<NEW_NODE>
mount -a

完成如上配置,已有服务器也可访问新增服务器的 /mnt/node/data1/mnt/node/data2 目录了。