NFS挂载timeout与iptables问题
(2014-10-22 18:28:07)
标签:
nfs挂载timeoutiptables |
分类: Ubuntu/Debian |
NFS挂载timeout与iptables问题
问题
一台机器A上搭建NFS作为server,在另外一台机器B上进行挂载
iptables规则加上了加上了portmap(111)
、nfsd(2049)
对应的端口,然后将其他的禁用
开启iptables时,在机器B上挂载显示 mount.nfs:
Connection timed out
关闭iptables就可以正常挂载
系统:debian7 64bit
分析
机器A ip:192.168.1.10
机器B ip:192.168.1.11
在机器A上查看端口监听情况:
# netstat -ltnp
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 913/portmap
tcp 0 0 0.0.0.0:59827 0.0.0.0:* LISTEN 19162/rpc.statd
tcp 0 0 0.0.0.0:36733 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:45861 0.0.0.0:* LISTEN 11638/rpc.mountd
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
在机器B上检查服务端状态:
# rpcinfo -p 192.168.1.10
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100021 1 udp 47777 nlockmgr
100021 4 tcp 36733 nlockmgr
100024 1 udp 44089 status
100024 1 tcp 59827 status
100003 2 tcp 2049 nfs
100003 4 udp 2049 nfs
100005 3 udp 45861 mountd
100005 3 tcp 45861 mountd
# showmount -e 192.168.1.10
rpc mount export: RPC: Unable to receive; errno = Connection refused
可以看出,iptables确实开放少了端口主要是mountd
的端口
因为设置的iptables规则需求是严格的,只开放需要开放的端口,其他全部关掉
但由于这个端口是随机开放的,没法在iptables指定好端口。
解决
找到了官方相关的文档
发现是可以指定固定的监听端口,于是开始动手
主要是修改nfs的相关配置,具体文件位于/etc/default
目录下
修改内容如下:
1、指定statd
运行端口
# /etc/default/nfs-common
STATDOPTS="--port 32765 --outgoing-port 32766"
2、指定mountd
运行端口(将原来的参数值删掉)
# /etc/default/nfs-kernel-server
RPCMOUNTDOPTS="-p 32767"
3、指定quotad
运行端口(我的系统没有这个文件,直接新建一个)
# /etc/default/quota
RPCRQUOTADOPTS="-p 32769"
4、重启nfs服务
/etc/init.d/nfs-kernel-server restart
开放iptables端口
# Allow nfs mounts to local network
ACCEPT fw loc udp 111
ACCEPT fw loc tcp 111
ACCEPT fw loc tcp 2049
ACCEPT fw loc udp 2049
ACCEPT fw loc tcp 32764:32769
ACCEPT fw loc udp 32764:32769
检查
在机器B上分别执行
# rpcinfo -p 192.168.1.10
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100021 1 udp 49346 nlockmgr
100021 4 tcp 39414 nlockmgr
100024 1 udp 51473 status
100024 1 tcp 57346 status
100003 2 tcp 2049 nfs
100003 4 udp 2049 nfs
100005 3 udp 32767 mountd
100005 3 tcp 32767 mountd
可以看出 mountd
已经在我们指定的端口32767
上运行
# showmount -e 192.168.1.10
Export list for 192.168.1.10:
/home/user/project1 192.168.1.11
/home/user/project2 192.168.1.11
而showmount
命令也能正常显示远程系统可以被挂载的目录
执行挂载
mount -t nfs 192.168.1.10:/home/user/project1 /tmp/project1
mount -t nfs 192.168.1.10:/home/user/project2 /tmp/project2
正常挂载,至此,问题解决。