相关命令一览表
systecmctl status nfs-utilsshowmount -e 192.168.197.133showmount -elocalhost
systemctl status nfs-server
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --reloaddnf install nfs-server
systemctl start rpcbindsystemctl status rpcbind
mount 192.168.197.133:/nfs /mount
firewall-cmd --permanent --add-service=nfsvim /etc/exports
`exportfs -r
这些命令的联系是什么,nfs到底是怎么提供服务的?
🧭 一、什么是 NFS?
**NFS(网络文件系统)**是一种允许客户端通过网络访问远程服务器上的文件系统的协议。它最初由 Sun Microsystems 开发,常用于 Linux 和 UNIX 系统间的文件共享。
简言之:让一台机器的文件夹,像本地磁盘一样,被另一台机器挂载和使用。
🌐 二、NFS 的网络工作原理(核心)
1️⃣ 网络通信协议:
| 层级 | 协议 |
|---|---|
| 应用层 | NFS 协议(如 NFSv3、NFSv4) |
| 表示层 | XDR(External Data Representation) |
| 会话层 | Portmap / rpcbind(管理动态端口) |
| 传输层 | TCP 或 UDP(NFSv3 支持 UDP,NFSv4 强制用 TCP) |
| 网络层 | IP |
2️⃣ 工作过程:
▶ 服务端启动 NFS:
-
rpcbind(或portmap)监听 111 端口,管理 RPC 动态端口映射。 -
nfs-server、mountd、nfsd等服务根据配置文件/etc/exports决定共享哪些目录。 -
NFS 服务注册自己使用哪些端口,告知 rpcbind。
▶ 客户端挂载 NFS 共享:
-
发出挂载请求(
mount -t nfs server:/data /mnt) -
客户端联系
rpcbind查询服务端 NFS 使用的端口 -
mountd验证权限(IP 或子网)==这一步实在服务端进行的 -
建立 TCP 会话,NFS 协议层开始传输文件元信息、数据、权限
三、 具体配置:
客户端配置
挂载远程主机到本地
#### 挂载远程主机的目录
法一:直接挂载
mount 192.168.197.133:/nfs /mount
法二:使用autofs进行挂载
[root@101 ~]# dnf install autofs ; 安装autofs服务
[root@101 ~]# echo "/mount /etc/auto.nfs" >> /etc/auto.master
[root@101 ~]# echo "nfs 192.168.197.133:/nfs" >> /etc/auto.nfs
[root@101 ~]# systemctl start autofs
autofs自动挂载配置文件有哪些?怎么写?
autofs服务配置文件有/etc/auto.master(主配置文件)和/etc/auto.nfsd(映射文件)
/etc/auto.master 主配置文件书写格式
<挂载根目录> <映射文件> <挂载选项>
| 字段 | 含义 |
|---|---|
| 挂载根目录 | 客户端本地的挂载点目录,如 /mnt/nfs |
| 映射文件 | 描述子目录如何挂载,如 /etc/auto.nfs |
| 挂载选项 | 可选,如 --timeout=60 表示 60 秒未访问自动卸载 |
示例 1:挂载 NFS 主目录
/etc/auto.master 文件
/mnt/nfs /etc/auto.nfs --timeout=120
- 当访问
/mnt/nfs/dir1,autofs会读取/etc/auto.nfs中dir1的挂载规则进行挂载。 - 如果超过 120 秒未访问,自动卸载。
/etc/auto.master 映射文件书写格式
<子目录名> -<挂载选项> <服务器:/共享路径>
示例 /etc/auto.nfs 写法
proj1 -rw,sync 192.168.1.100:/data/project1
proj2 -ro 192.168.1.100:/data/project2
说明:
- 访问
/mnt/nfs/proj1时,会挂载192.168.1.100:/data/project1到本地。 -rw,sync表示读写、同步写入。这个字段可以省略
服务端配置
需要启用的服务
nfs-utils 是 nfs 服务的核心组件,提供了管理 nfs 服务的命令和配置文件。
nfs-server 包含在 nfs-utils 组件中,但是要单独启用,其中包含了 rpc.mountd,rpc.statd, rpc.nfsd和rpcbind等服务.
rpcbind: 管理端口映射
rpc.mountd: 处理客户端挂载
rpc.nfsd: 核心服务,处理nfs请求。
rpc.statd: 处理锁定
命令:
[root@133 ~]# dnf install nfs.utils ;安装nfs服务核心组件
[root@133 ~]# systemctl start nfs.utils ;启用nfs服务
[root@133 ~]# systemctl start nfs-server ;启用nfs-server服务(需单独启用)
[root@133 ~]# firewall-cmd --add-service=nfs ;允许nfs服务的流量通过防火墙
[root@133 ~]# firewall-cmd --add=service=rpc-bind ;允许rpcbind流量通过。
[root@133 ~]# firewall-cmd --add=service=mountd ;允许mountd流量通过,处理客户端挂载
[root@133 ~]# echo "/nfs *(rw)" >> /etc/exports ;配置nfs服务的配置文件,
[root@133 ~]# export -r ;重新从配置文件中读取配置,刷新作用。
[root@133 ~]# export -v ;查看nfs服务的共享状态
[root@133 ~]# showmount -e 192.168.197.133 ;
`showmount -e IP 就是用来远程查看某台 NFS 服务器当前对外共享了哪些目录、共享给谁的工具,极适合客户端前期确认与调试。
nfs配置文件有哪些?怎么写?
nfs服务的配置文件只有/etc/exports
/etc/exports配置文件的书写方法
<要共享的文件> <哪些主机可以访问> <访问权限>
示例
# 示例
/data 192.168.1.0/24(rw,sync,no_root_squash)
rw:可读写sync:同步写入no_root_squash:客户端 root 保持 root 身份all_squash:客户端所有用户都映射为 nobody
三、一些其他的问题?
为什么客户端的firewalld没有允许任何关于nfs的端口和服务,却还可以访问服务端的文件?
客户端访问 NFS 服务端,只需要服务端开放 NFS 所需的端口即可,客户端不需要主动开放端口。
🔍 原因是:
NFS 是典型的“客户端主动发起、服务端被动响应”的架构。
客户端作为“请求者”,只需要发送请求给服务端,而服务端需要开放端口接收这些请求。
其他相似的案例
在做防火墙 REJECT 与 default 区别的案例时,通过icmp协议传输的ping指令也是只需要目标主机的firewalld允许icmp报文的echo-request就能ping通。换言之:只要能进去,就能原路返回。
8351

被折叠的 条评论
为什么被折叠?



