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網段掛載,所以掛載不上。
我把分析報文發給了現場的同事,他和客戶溝通了之后,果然證實了我的分析,最終把服務器和客戶端接到一個交換機下就正確掛載好了。