Jack77793's Blog

Quo Fata Vocant

12 Apr 2025

搭建 NFS 服务

准备

安装 nfs-utils 包(包名可能因发行版而不同,详情参考对应发行版文档),并确保系统时间同步后,执行 systemd enable --now nfs-server.service 启动并启用 NFS 服务。

配置

服务端配置

指定根目录

以以 /srv/nfs 为 NFS 根目录,存储文件的硬盘分区在 /mnt/nfs 挂载为例,使用下述命令挂载分区并将挂载位置绑定挂载至 NFS 根目录:

1
2
3
mkdir -p /srv/nfs /mnt/nfs
mount /path/to/your/partition /mnt/nfs
mount --bind /mnt/nfs /srv/nfs

可以在 fstab 中加入下述条目以持久化该绑定:

1
/mnt/nfs /srv/nfs none bind 0 0

接着在 /etc/exports 文件中添加下述条目:

1
/srv/nfs ip.address.in.cidr(rw,fsid=0,other_arguments)

注意允许访问的 IP(范围)应以 CIDR 表示,参数中的 fsid=0 表示该目录为 NFS 根目录,其它目录须在其之下。

其它参数配置

除上述参数外,建议加上参数 insecureall_squashanonuid=65534anongid=65534insecure 允许客户端使用大于 1024 的端口连接,其余三个参数将客户端的用户映射为服务端的用户 nobody,以避免相关问题,同时也可以考虑使用如 NFSv4 ID 映射等其它映射方案或不进行映射。

防火墙配置

开放端口 2049 的 TCP 上行连接,使 NFSv4 服务可以被访问,如须访问 NFSv3 服务,则还需为 rpcbind 开放端口 111 的 TCP 与 UDP 连接,并在 /etc/nfs.conf 中加入下述内容以固定 mountd 的端口并在防火墙中开放:

1
2
[mountd]
port=<your_port>

使用

执行命令 exportfs -arv 或重启 NFS 服务以使 /etc/exports 中的配置生效,在客户端挂载即可,可能须指定类型为 NFS,若挂载失败,尝试包括服务器的分享根目录,这在某些操作系统上可能是必需的。也可以使用 /etc/fstab 以持久化挂载,如有需要,也可使用 TLS 等进行加密,本文不再赘述。

参考资料

  1. NFS - Arch Linux 中文维基
  2. nfs-utils - Gentoo Wiki
  3. nfs(5) — Arch manual pages
  4. exports(5) — Arch manual pages
Next time, we'll talk about "nothing"