NFS server启动时会随机启动多个端口并向RPC注册,这样如果使用iptables对NFS sever 端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口。

以前配置的nfs端口一直是通过rpcinfo xx.xx.xx.xx 这个命令查找到需要放行的端口,然后在防火墙中放行这个端口,每次f服务器断电重启之后,都需要重新设置防火墙,我们可以设置固定端口,这样设置固定端口以后即便重启机器也很方便挂载,如果不设置固定端口,机器或服务重启后之前添加的iptables规则就失效了!

下面的是没有设置固定端口时的情况:

# rpcinfo  -p
# rpcinfo nfs_sever_ip

设置固定端口:

编辑 /etc/sysconfig/nfs 文件:

#  vim    /etc/sysconfig/nfs

添加如下内容:

###################
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
###################

如果 nlockmgr Port 仍然无法修改,则要修改 /etc/sysctl.conf

# cp /etc/sysctl.conf /etc/sysctl.conf.$(date +%F)
fs.nfs.nlm_tcpport=30002
fs.nfs.nlm_udpport=30002
# sed -i '$a fs.nfs.nlm_tcpport=30002\nfs.nfs.nlm_udpport=30002' /etc/sysctl.conf

刷新配置生效:

# sysctl -p
# systemctl restart rpcbind
# systemctl restart nfs-server
# systemctl restart nfs-lock
# systemctl restart nfs-idmap

重启服务后再查看端口:

添加iptables规则:

# yum -y install iptables iptables-services

命令行添加:

# iptables  -A INPUT -p tcp -m tcp  --dport 111 -j ACCEPT
# iptables  -A INPUT -p udp -m udp  --dport 111 -j ACCEPT
# iptables  -A INPUT -p tcp -m tcp  --dport 2049 -j ACCEPT
# iptables  -A INPUT -p udp -m udp  --dport 2049 -j ACCEPT
# iptables  -A INPUT -p tcp -m tcp    --dport 30001:30004 -j ACCEPT
# iptables  -A INPUT -p udp -m udp  --dport 30001:30004 -j ACCEPT

配置文件添加:

# vim /etc/iptables.rules

保存防火墙规则:

# systemctl  restart    iptables

查看防火墙规则:

# iptables -nvL --line
Red Hat Enterprise Linux7/Storage Administration/Network File System (NFS)

实际测试中发现,上述操作需要reboot才能生效!

###################################################

用nfs来存储文件,在客户端节点遇到了问题,用df -h的时候系统直接就卡住了。

搜索发现,网上好多遇到这种问题的。

原来是nfs的server其实已经挂了,但是客户端还存在。所以会出现这种情况!

以前开发时就碰到过nfs客户端卡住的情况,umount -f /mnt umount -l /mnt 提示device is busy,并且尝试访问挂载目录、df -h等操作都会使终端卡住,ctrl+c也不能强行退出。

造成这种现象的原因是nfs服务器/网络挂了,nfs客户端默认采用hard-mount选项,而不是soft-mount。

两者的区别是:

soft-mount: 当客户端加载NFS不成功时,重试retrans设定的次数.如果retrans次都不成功,则放弃此操作,返回错误信息 "Connect time out"

hard-mount: 当客户端加载NFS不成功时,一直重试,直到NFS服务器有响应。hard-mount 是系统的缺省值。在选定hard-mount 时,最好同时选 intr , 允许中断系统的调用请求,避免引起系统的挂起。当NFS服务器不能响应NFS客户端的 hard-mount请求时, NFS客户端会显示:"NFS server hostname not responding, still trying"

参考

NFS/Troubleshooting (简体中文)

运维安全之NFS安全

NFSv3 NFSv3针对防火墙端口开通策略

NFS设置固定端口并添加防火墙规则

运维安全之NFS安全