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/ 目录中生成公钥和私钥:
创建文件 /etc/wireguard/wg0.conf,在其中写入本服务器的 WireGuard 接口信息:
[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:私有网络 IPPersistentKeepalive:发送 keepalive 包的时间间隔(单位 sec)。
修改文件权限,避免非授权者篡改或查看
已有服务器的新增配置
在已有服务器的 /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>。
启动服务
在新增服务器上,使用如下命令启动服务,并设为开机自启动
在已有服务器上,重启 wg-quick
启动后,使用 wg 命令查看是否配置成功。
NFS 配置
新增服务器的配置
在配置完 VPN 后,就可以通过 VPN 进行 NFS 挂载了。
假设,新服务器中有 /mnt/node/data1 和 /mnt/node/data2 两个目录需要 NFS 挂载到其他服务器,那么在新服务器的 /etc/exports 文件中添加如下内容:(注意:目录名不能与已有挂载点重名,最好起一个一眼能看出这个目录属于哪个服务器的名字)
该文件声明,只有 10.0.0.0/24 网段 IP 的设备可 NFS 挂载本机的 /mnt/node 下的文件,其余已有服务器也是类似配置,不需要修改(这就是为什么建议将新增服务器的 VPN IP 设置在该网段的原因,否则,还需修改所有已有服务器的 /etc/exports 配置文件)。
修改保存后,执行如下命令启用配置
然后打开 /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
保存退出后,为每台机服务器的挂载点创建目录
用如下命令进行挂载
完成如上配置后,各服务器皆可访问其他服务器的数据目录
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
保存退出后,为挂载点创建目录,并挂载
完成如上配置,已有服务器也可访问新增服务器的 /mnt/node/data1 和 /mnt/node/data2 目录了。