环境:VMware8 虚拟机
Linux发行版:CentOS5.8
内核版本:2.6.18-308.el5
现象:开启两台虚拟机,运行的操作系统都是上述操作系统,把其中一台做服务器,开启NFS服务,开启portmap服务。
另外一台做客户机,开启portmap服务,开启NFS服务。
做好服务器上的共享目录后,在客户机上运行showmount -e 服务器IP地址发现,提示如下出错信息:
[root@机器名略去 ~]# showmount -e 192.168.88.128
mount clntudp_create: RPC: Port mapper failure - RPC: Unable to receive提示说rpc端口映射失败,仔细看了所有该启动的服务,发现有几个该启动的服务没有启动,尝试service nfs restart无效。
在service nfs restart的过程中,会发现部分进程启动失败(这个不是一定的,可能所有进程都正常重启)
[root@机器名略去 ~]# service nfs restart
Shutting down NFS mountd: [ OK ] Shutting down NFS daemon: [ OK ] Shutting down NFS quotas: [ OK ] Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ]
考虑到,可能会不会是Linux的防火墙iptables把数据包拦截了?
查看iptables -nvxL
[root@机器名略去 ~]# iptables -nvxL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 823 65116 RH-Firewall-1-INPUT all -- * * 0.0.0.0/0 0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination 0 0 RH-Firewall-1-INPUT all -- * * 0.0.0.0/0 0.0.0.0/0Chain OUTPUT (policy ACCEPT 331 packets, 32038 bytes)
pkts bytes target prot opt in out source destinationChain RH-Firewall-1-INPUT (2 references)
pkts bytes target prot opt in out source destination 88 7528 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 12 1152 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 255 0 0 ACCEPT esp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT ah -- * * 0.0.0.0/0 0.0.0.0/0 18 4100 ACCEPT udp -- * * 0.0.0.0/0 224.0.0.251 udp dpt:5353 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:631 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:631 227 15052 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:21 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:2049 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 478 37284 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW udp dpt:137 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW udp dpt:138 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:139 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:445 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:23 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
再查看命令,rpcinfo -p 192.168.88.128
[root@机器名略去 ~]# rpcinfo -p 192.168.88.128
program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 819 status 100024 1 tcp 822 status 100011 1 udp 752 rquotad 100011 2 udp 752 rquotad 100011 1 tcp 755 rquotad 100011 2 tcp 755 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100021 1 udp 41030 nlockmgr 100021 3 udp 41030 nlockmgr 100021 4 udp 41030 nlockmgr 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100021 1 tcp 37684 nlockmgr 100021 3 tcp 37684 nlockmgr 100021 4 tcp 37684 nlockmgr 100005 1 udp 767 mountd 100005 1 tcp 770 mountd 100005 2 udp 767 mountd 100005 2 tcp 770 mountd 100005 3 udp 767 mountd 100005 3 tcp 770 mountd可以看到,很多端口没有在iptables中打开。
有两种解决办法,一种,把这些端口全部在iptables中允许,另外一种,关闭防火墙。
这两种方法,个人觉得第二种比较方便一些,NFS开启的一些端口是随机的,不能固定加入这些端口。
在NFS服务器端,
[root@机器名略去 ~]# service iptables stop
Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ]再重新在客户端showmount查看,
[root@cahou ~]# showmount -e 192.168.88.128
Export list for 192.168.88.128: /home/toshiba/sed_test/nfstest 192.168.88.0/24显示已经可以挂载,挂载看看,挂载成功,已可以访问该共享目录。
[root@机器名略去 ~]# mount -t nfs 192.168.88.128:/home/toshiba/sed_test/nfstest /root/nfstest
[root@机器名略去 ~]# [root@机器名略去 ~]# [root@机器名略去 ~]# cd /root/nfstest/;ls -l total 0 -rw-r--r-- 1 root root 0 Sep 4 15:40 nfstest1 -rw-r--r-- 1 root root 0 Sep 4 15:40 nfstest2 -rw-r--r-- 1 root root 0 Sep 4 15:40 nfstest3