问题来源:
项目上遇到一个centos7上开通Nfs服务的问题:
1) 通过nfs4协议,本机和网络上的其他主机都能连
2) 通过NFS3协议,本机能连,其他主机不能连
3)于是关闭nfs server主机的防火墙服务,这时候所有主机都能连
以上现象明显指示出是防火墙的问题,需要我们定位nfs3服务需要访问哪些端口,怎么监控出来呢?
方法一:在服务端通过netstat命令,查出服务端监听了哪些端口,在防火墙上添加对应的端口就好,但是难点是有些应用可能监听了多个端口,但是并不是每个端口都是需要的。如netstat -tulnp |grep rpc:
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 5058/rpcbind
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 4438/rpc.mountd
tcp 0 0 0.0.0.0:55841 0.0.0.0:* LISTEN 1824/rpc.statd
tcp6 0 0 :::111 :::* LISTEN 5058/rpcbind
tcp6 0 0 :::20048 :::* LISTEN 4438/rpc.mountd
tcp6 0 0 :::45859 :::* LISTEN 1824/rpc.statd
udp 0 0 0.0.0.0:111 0.0.0.0:* 5058/rpcbind
udp 0 0 127.0.0.1:728 0.0.0.0:* 1824/rpc.statd
udp 0 0 0.0.0.0:992 0.0.0.0:* 5058/rpcbind
udp 0 0 0.0.0.0:40938 0.0.0.0:* 1824/rpc.statd
udp 0 0 0.0.0.0:20048 0.0.0.0:* 4438/rpc.mountd
udp6 0 0 :::111 :::* 5058/rpcbind
udp6 0 0 :::992 :::* 5058/rpcbind
udp6 0 0 :::40457 :::* 1824/rpc.statd
udp6 0 0 :::20048 :::* 4438/rpc.mountd
方法二:先关闭server上的防火墙,先在客户端进常mount上,再查客户端连了服务端哪些端口,这个比较精确
netstat -an |grep 172.16.11.231:
tcp 0 0 192.168.1.107:42230 172.16.11.231:20048 TIME_WAIT
tcp 0 0 192.168.1.107:42230 172.16.11.231:20048 TIME_WAIT
tcp 0 0 192.168.1.107:42151 172.16.11.231:111 TIME_WAIT
tcp 0 0 192.168.1.107:744 172.16.11.231:2049 ESTABLISHED
tcp 0 0 192.168.1.107:41086 172.16.11.231:22 ESTABLISHED
tcp 0 0 192.168.1.107:38720 172.16.11.231:443 ESTABLISHED
tcp 0 0 192.168.1.107:34043 172.16.11.231:111 TIME_WAIT
tcp 0 0 192.168.1.107:37126 172.16.11.231:111 TIME_WAIT
tcp 0 0 192.168.1.107:706 172.16.11.231:2049 TIME_WAIT
tcp 0 0 192.168.1.107:756 172.16.11.231:20048 TIME_WAIT
tcp 0 0 192.168.1.107:33516 172.16.11.231:2049 TIME_WAIT
这样我们就发现了缺失的端口20048,原来nfs以前默认开启的端口是892, 新版本的centos将这个端口改成了20048, 通过使用配置文件/etc/sysconfig/nfs, 可以强制将默认端口改回892, 但是需要重启机器才有用。不管怎么样,得益于强大的网络监控工具netstat,问题得到了快速的解决,以后类似的问题也可以用它来解决。