NFS故障处理
NFS协议故障分析
前言
下面是最近我远程在我们市某个高校机房处理的一则故障,我觉很有意思,分享一下。
此篇文章不过多解释NFS的一些基础操作,有关基本操作和基本概念请看我另一篇博文: https://www.cnblogs.com/yizhangheka/p/12079312.html
环境描述:
NFS-SERVER | 192.168.80.10 |
---|---|
CLIENT | 192.168.77.11 |
[root@nfs-server ~]# uname -r
3.10.0-957.el7.x86_64
[root@client ~]# uname -r
3.10.0-957.el7.x86_64
操作
服务器端的操作是现场的同事发给我的,我先贴出来,如下。
NFS-SERVER
//给NFS准备好专门的用户www,是为了前后端统一用户。
groupadd -g 666 www
useradd -g 666 -u 666 -M -s /sbin/nologin www
//准备好分享的目录,并设置好权限
[root@nfs-server ~]# mkdir /data
[root@nfs-server ~]# chown www:www /data
//安装nfs-utils并编写配置文件
[root@nfs-server ~]# yum -y install nfs-utils
[root@nfs-server ~]# vim /etc/exports
/data 192.168.77.0/24(rw,all_squash,anonuid=666,anongid=666)
//启动nfs-server并验证是否启动成功,最后加入开机启动
[root@nfs-server ~]# systemctl start nfs-server
[root@nfs-server ~]# systemctl enable nfs-server
[root@nfs-server ~]# systemctl status nfs-server | grep active
Active: active (exited) since Fri 2020-04-03 10:37:23 CST; 15s ago
通过查看服务器端的配置,我发现我们现在的同事还是相当严谨的。
CLIENT
客户端一直在报这个错误,无法挂载。
[root@client ~]# mount -t nfs 192.168.80.10:/data /cli_data/
mount.nfs: access denied by ……
但是,其它都是正常的,从客户端到服务器的111端口、1234端口、2049端口全都是通的,并且showmount也能正常显示,但就是无法挂载。
[root@client ~]# telnet 192.168.80.10 111
Trying 192.168.80.10...
Connected to 192.168.80.10.
[root@client ~]# telnet 192.168.80.10 1234
Trying 192.168.80.10...
Connected to 192.168.80.10.
[root@client ~]# telnet 192.168.80.10 2049
Trying 192.168.80.10...
Connected to 192.168.80.10.
[root@client ~]# showmount -e 192.168.80.10
Export list for 192.168.80.10:
/data 192.168.90.0/24
111端口通畅说明portmap正常、1234端口通畅说明mount正常、2049端口通畅说明nfs正常,也间接说明没有防火墙拦截。
在挂载被拒绝的时候另开一个终端,通过tcpdump抓取NFS的数据包
[root@client ~]# tcpdump -i eth0 -w /tmp/nfs.cap
抓下来之后通过wireshark打开发现服务器端的IP是192.168.80.10没有问题,但是客户端的IP却不是 192.168.77.11,而是192.168.80.11,这个80.11是哪些来的?我恍然大悟,两个网站不在同一个网段,中间很有可能存在了S-NAT地址转换,将客户端的源地址192.168.77.11转换成了192.168.80.11,但服务端却不允许192.168.80.0网段挂载,只允许192.168.77.0网段挂载,所以挂载不上。
我把分析报文发给了现场的同事,他和客户沟通了之后,果然证实了我的分析,最终把服务器和客户端接到一个交换机下就正确挂载好了。