CentOS 6上的NFS客户端问题:rpcbind不在端口111上侦听

我试图在新的CentOS 6.6服务器上将NFS客户端设置到现有的NFS服务器上,并遇到我无法弄清楚的问题。 当启动rpcbind / nfs我得到:

 # /etc/init.d/rpcbind start # /etc/init.d/nfs start Starting NFS services: [ OK ] Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp). [FAILED] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ] 

rpcinfo -p工作正常

 # rpcinfo -p program vers proto port service 100000 4 tcp 111 portmapper .. snip 100021 4 tcp 47627 nlockmgr 

rpcinfo -p 127.0.0.1 (或localhost)返回一个错误:

 # rpcinfo -p 127.0.0.1 rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused 

使用(netstat -an)检查端口,看起来portmap / rpcbind没有监听端口111.没有监听端口111,rpcbind正在监听端口3421(编辑:不像我最初想象的那样是随机的)。

我已经检查或尝试过的东西包括:

  • 禁用selinux(未启用)
  • 清除/etc/hosts.deny
  • 清除iptables (它没有规则开始)
  • 检查日志(发现无关)
  • 重新启动的服务器(无效)
  • 检查CentOS 5服务器(端口映射正在监听端口111)
  • 检查谷歌:很多类似的错误消息,但没有具体关于rpcbind不听111端口(和解决scheme无论如何)。
  • 'telnet'到端口111(超时,确认没有任何人正在监听)
  • 检查127.0.0.1/localhost设置(他们工作正常)

在这一点上,我真的没有任何select或剩下的事情来检查,需要一些想法。 因为服务器在没有NFS的情况下是相对无用的,所以在这一点上我会做很多的尝试。

更新1:

在客户端上运行rpcinfo -s localhostrpcinfo -s server不起作用。 我想知道客户端是否是CentOS 6,服务器是CentOS 5有问题。

更新2:

来自showmount输出在新客户端和NFS服务器上是相同的:

 # showmount -e 10.2.212.10 Export list for 10.2.212.10: /shared/uesp/maps 67.205.112.104 /shared/uesp/skins 67.205.112.104 /shared/phpsessions 10.2.212.30,[...snip...],10.2.212.11 /shared/uesp/filecache 10.2.212.30,[...snip...],10.2.212.11 /shared/uesp/wikiimages 10.2.212.30,[...snip...],10.2.212.11 /shared/eqwiki/filecache 10.2.212.30,[...snip...],10.2.212.11 /shared/eqwiki/wikiimages 10.2.212.30,[...snip...],10.2.212.11 /shared/davewiki/filecache 10.2.212.30,[...snip...],10.2.212.11 /shared/davewiki/wikiimages 10.2.212.30,[...snip...],10.2.212.11 

我已经缩减了很长的IP列表,但10.2.212.30是新的客户端。 尝试在新客户端上挂载NFS共享结果如下:

 # mount -v 10.2.212.10:/shared/phpsessions /mnt/phpsessions mount: no type was given - I'll assume nfs because of the colon mount.nfs: timeout set for Thu Jan 15 18:53:43 2015 mount.nfs: trying text-based options 'vers=4,addr=10.2.212.10,clientaddr=10.2.212.30' mount.nfs: mount(2): Operation not permitted mount.nfs: trying text-based options 'addr=10.2.212.10' mount.nfs: prog 100003, trying vers=3, prot=6 mount.nfs: portmap query retrying: RPC: Unable to receive mount.nfs: prog 100003, trying vers=3, prot=17 mount.nfs: portmap query failed: RPC: Unable to receive - Connection refused mount.nfs: trying text-based options 'vers=4,addr=10.2.212.10,clientaddr=10.2.212.30' mount.nfs: mount(2): Operation not permitted mount.nfs: trying text-based options 'addr=10.2.212.10' mount.nfs: prog 100003, trying vers=3, prot=6 mount.nfs: portmap query retrying: RPC: Unable to receive mount.nfs: prog 100003, trying vers=3, prot=17 mount.nfs: portmap query failed: RPC: Unable to receive - Connection refused ... 

最后几行重复,直到超时。

更新3:

因此,如果我使用iptables将端口111redirect到客户机上使用的端口rpcbind则可以使用rpcinfo -p localhost在客户机上工作。 但是,这对安装问题没有任何帮助。 我试过强迫NFS使用v2,如:

 # mount -v -t nfs -o nfsvers=3 10.2.212.10:/shared/phpsessions /mnt/phpsessions 

但是会导致与上面相同的错误消息。 当我在客户端上运行时,我得到:

 # rpcinfo -s server rpcinfo: can't contact rpcbind: : RPC: Unable to receive; errno = Connection refused 

这与mount相同的错误信息。 我猜测在CentOS 6客户端上挂载的是试图在正在运行“旧”portmap的CentOS 5服务器上使用“新”rpcbind,所以它失败了。 我认为应该可以像这样混合使用CentOS版本。

更新4:

我在客户端上创build了一个testingNFS共享,并且能够在服务器上成功安装它。 这似乎符合理论,这是一个portmap / rpcbind不匹配。 客户端可以充当NFS服务器,因为rpcbind(rpc v3 / 4)向后兼容portmap(rpc v2),但是portmap不与rpcbind转发兼容。

更新5(可能的解决scheme)

更仔细地rpcbind客户,我注意到rpcbind似乎总是在端口3421(我认为它是最初的随机)。 在服务器上,我使用iptables将端口3421转发到端口111.之后,我能够成功地从客户端上的服务器挂载NFS共享。 这可能是一个有效的解决scheme,因为我将所有的服务器升级到CentOS 6,只有几个星期的CentOS 5/6服务器混合。

除非有更好的答案,否则我会在几天内回答我自己的问题。

根本问题原来是portmap / rpcbind的端口不匹配。 在CentOS 6上,我的rpcbind正在监听3421端口,而不是象CentOS 5中的端口映射那样是预期的111.这导致了启动nfs和两台机器之间共享的问题。

解决办法是使用itpables来将CentOS 6上的端口111redirect到端口3421:

 iptables -t nat -I PREROUTING -p tcp --dport 111 -j REDIRECT --to-ports 3421 iptables -t nat -I PREROUTING -p udp --dport 111 -j REDIRECT --to-ports 3421 iptables -t nat -I OUTPUT -p tcp -o lo --dport 111 -j REDIRECT --to-ports 3421 iptables -t nat -I OUTPUT -p udb -o lo --dport 111 -j REDIRECT --to-ports 3421 

在CentOS 5服务器上也做了同样的事情,除了反过来,将端口3421redirect到111.之后,我能够在CentOS 6客户机上成功地从CentOS 5服务器挂载NFS共享。

为了让nfs在CentOS 6服务器上完全工作,我还必须取消注释/etc/sysconfig/nfs所有与端口相关的行以使用固定的端口地址。 在做这件事之前,我有lockd服务没有响应的间歇性问题。