Ubuntu 20.04 上安装和配置 NFS 服务器

参考:

https://cloud.tencent.com/developer/article/1626660

环境:ubuntu 20.04 18.04

概览:

  • 服务端
  • 客户端

介绍:

  • 网络文件系统(NFS)是一个分布式文件系统协议,它允许你通过网络共享远程文件夹。通过 NFS,你可以将远程文件夹挂载到你的系统上,并且操作远程机器的文件,就像本地文件一样方便。

  • NFS 协议默认是不加密的,它不像 Samba,它不提供用户身份鉴别。服务端通过限定客户端的IP地址和端口来限制访问。

  • 在这个指南中,我们将一起看看如何在 Ubuntu 20.04 上建立一个 NFSV4 服务器。我们将会为你展示如何在客户端上挂载NFS文件系统。

前提:

  • 运行 Ubuntu 20.04 的服务器,在这台服务器上,我们将会建立 NFS 服务器,
  • 并且另外一个运行其他 Linux 发行版的机器将作为 NFS 客户端。
  • 服务器和客户端应该能够通过私有局域网互相连接。如果无法提供私有IP地址,你可以使用公有地址,配置服务器的防火墙,并且允许来自可信源的流量通过端口2049

这个例子中的机器有如下 IPs

服务端NFS Server IP IP NFS Clients IPs:
10.0.0.10 10.0.0.11
10.0.0.10 其他任何linux发行版连接 >> 服务端From the 10.0.0.10/24 range

一. 服务端 建立 NFS 服务器

这一段讲解如何安装必要的软件包,创建并且导出 NFS 目录,并且配置防火墙。

1.1 安装 NFS 服务器

刷新软件索引并且安装 NFS 服务器软件包

1
2
3
# 安装NFS服务端
sudo apt update
sudo apt install nfs-kernel-server

一旦安装完成,NFS 服务将会自动启动。默认情况下,在 ubuntu 20.04 上 NFS 版本 2 被禁用。NFS 3 和 NFS 4 都可以用。你可以运行下面的命令去验证

1
2
3
4
5
# 查看支持版本
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
# 查看运行情况
systemctl status nfs-server

NFSv2 非常古老,没有理由去启用它。 NFS 服务器配置选项在/etc/default/nfs-kernel-server/etc/default/nfs-common文件。默认的设置对于我们的使用场景已经足够了。

image-20230926143547233

2.服务端设置共享给客户端的挂载目录(10.0.0.12 192.168.33.0为服务端允许的客户端IP 本服务端IP >> 10.0.0.10)

  • 第一行包含fsid=0定义了 NFS 根目录/srv/nfs.来自10.0.0.12/24网络的所有客户端被允许访问 NFS 卷。crossmnt选项是必要的,用来分享被导出目录的子目录。
  • 第二行显示了如何针对一个文件系统指定多个导出规则。它导出了/srv/nfs4/backups目录,并且允许来自10.0.0.12/24的客户端只读访问,而来自192.168.33.3的客户端同时读写可访问。这个sync选项告诉了NFS在回复之前将修改写入磁盘。
  • 最后一行应该是自解释的。想要了解更多可用选项,在终端输入man exports
1
2
3
4
5
6
7
8
9
10
11
12
13
# 服务端设置共享给客户端的挂载目录
vim /etc/exports
------------------框内参考-----------------------
/srv/nfs4 192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www 192.168.33.110(rw,sync,no_subtree_check)
/srv/nfs4/data 10.0.0.11(rw,sync,no_subtree_check)
-------------------------------------------------
# 对10.0.0.11共享目录(本次使用)
vim /etc/exports
/srv/nfs4/backups 10.0.0.11(ro,sync,no_subtree_check,no_all_squash) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www 10.0.0.11(rw,sync,no_subtree_check,no_root_squash,no_all_squash)
# /srv/nfs4/data 10.0.0.11(rw,insecure,no_root_squash,no_all_squash,sync,anonuid=666,anongid=666) (错误配置)

3.生效配置

1
2
3
4
5
6
# 生效配置
sudo exportfs -rv
# 导出分享
sudo exportfs -a
# 查看当前活跃的导出和它们的状态
sudo exportfs -v

NOTE: 每次修改/etc/exports文件你都需要运行一次上面的命令。如果有任何的错误或者警告,它们会被显示在终端上。

image-20230926141725648

4.防火墙配置开放端口

1
2
3
4
5
6
# 允许192.168.33.0/24段IP访问NFS服务
sudo ufw allow from 192.168.33.0/24 to any port nfs
// 或 直接放开2049端口
ufw allow 2049
# 验证
sudo ufw status

此时服务端构建结束。

二. 客服端

1.在其他客户端的机器上,安装需要挂载远程 NFS 文件系统的工具.

  • DebianUbuntu 上安装 NFS 客户端 在基于 Debian 的发行版中,包含挂载 NFS 文件系统的软件包名是:nfs-common。安装运行: sudo apt update && sudo apt install nfs-common
  • CentOSFedora 上安装 NFS 客户端 在 Red Hat 和它的衍生版本上安装nfs-utils包: sudo yum install nfs-utils
1
2
3
4
# ubuntu安装
sudo apt install nfs-common
# centos安装
sudo yum install nfs-utils

2.挂载文件系统

我们将在 IP10.0.0.11的客户端机器上操作。这台机器拥有对/srv/nfs4/www的读写操作权限,和对/srv/nfs4/backups文件的只读访问权限。

创建两个新目录作为挂载点。你可以在任何位置创建这些目录:

1
2
3
# 创建挂载点目录
sudo mkdir -p /backups
sudo mkdir -p /srv/www

2.1. 临时挂载 >> 永久挂载

1
2
3
4
5
6
7
# 挂载
sudo mount -t nfs -o vers=4 10.0.0.10:/srv/nfs4/backups /backups
sudo mount -t nfs -o vers=4 10.0.0.10:/srv/nfs4/www /srv/www
# 永久挂载
vim /etc/fstab
10.0.0.10:/srv/nfs4/backups /backups nfs defaults,timeo=900,retrans=5,_netdev 0 0
10.0.0.10:/srv/nfs4/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev 0 0

image-20230926135706784

3.验证永久挂载

1
2
3
4
5
# 卸载(此目录为挂载点目录)
umount /backups
umount /srv/www
# 挂载
mount -a

image-20230926135223936

三. 客户端测试 NFS 访问

1.概览

1
2
3
4
# 服务端定义共享目录 10.0.0.11只读192.168.33.3读写
/srv/nfs4/backups 10.0.0.11(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
# 读写
/srv/nfs4/www 10.0.0.11(rw,sync,no_subtree_check)

2.NFS共享10.0.0.11只读权限目录

1
2
3
4
5
6
7
8
9
10
# 服务端定义共享目录 10.0.0.11只读192.168.33.3读写
/srv/nfs4/backups 10.0.0.11(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
# 挂载
mount -t nfs -o vers=4 10.0.0.10:/srv/nfs4/backups /backups
# 测试
cd /backups
// 回显为只读文件系统只支持在服务端读写 客户端只能查看
# 在服务端构建文件(10.0.0.10)
cd /srv/nfs4/backups
touch 1.txt

image-20230926140352012

服务端创建客户端已同步文件只读

image-20230926142437345

image-20230926142501618

3.NFS共享10.0.0.11读写权限目录

1
2
3
4
5
6
7
8
9
# 服务端定义共享目录读写
/srv/nfs4/www 10.0.0.11(rw,sync,no_subtree_check)
# 挂载
sudo mount -t nfs -o vers=4 10.0.0.10:/srv/nfs4/www /srv/www
# 客户端测试(10.0.0.11)
cd /srv/www
touch {1..3}.txt 1.sh && sh 1.sh
# 服务端测试(10.0.0.10)
cd /srv/nfs4/www && ls

image-20230926142126552

服务端文件同步

image-20230926142622359

结语fighting!