NFS依赖portmap分配它监听的端口。这些端口是动态分配的,所以每次NFS重启后,端口都会改变。这使得在只允许访问系统指定端口的防火墙后运行一个NFS服务器变得困难。

 解决:

 第一步是分配一个永久端口号给每个NFS服务(rquotad, mountd, statd, and lockd)。因为它们能使用任何高于1024的没有被使用的端口,建议你首先查看/etc/services文件来找到一个有效的没有使用的端口范围。下面的例子使用10000-10005。

 这些端口大部分在/etc/sysconfig/nfs文件里被配置。如果它不存在就创建它。它看起来像这样:

 # NFS port numbers
 STATD_PORT=10002
 STATD_OUTGOING_PORT=10003
 MOUNTD_PORT=10004
 RQUOTAD_PORT=10005

 lockd服务和其他服务配置不同,因为它是一个核心模块。要设置lockd使用的端口,在/etc/sysconfig/nfs文件里添加这些选项:

 LOCKD_UDPPORT=30001
 LOCKD_TCPPORT=30001

 这里"30001"可以被替换成任何可用并且可以被分配使用的端口。

 做完这些配置改变后,你可以用命令 rpcinfo -p <hostname> 来查看端口分配情况:

 # rpcinfo -p localhost

    program vers proto   port
     100000    2   tcp    111 portmapper
     100000    2   udp    111 portmapper
     100021    1   udp 10001 nlockmgr
     100021    3   udp 10001 nlockmgr
     100021    4   udp 10001 nlockmgr
     100021    1   tcp 10000 nlockmgr
     100021    3   tcp 10000 nlockmgr
     100021    4   tcp 10000 nlockmgr
     100024    1   udp 10002 status
     100024    1   tcp 10002 status
     100011    1   udp 10005 rquotad
     100011    2   udp 10005 rquotad
     100011    1   tcp 10005 rquotad
     100011    2   tcp 10005 rquotad
     100003    2   udp   2049 nfs
     100003    3   udp   2049 nfs
     100003    4   udp   2049 nfs
     100003    2   tcp   2049 nfs
     100003    3   tcp   2049 nfs
     100003    4   tcp   2049 nfs
     100005    1   udp 10004 mountd
     100005    1   tcp 10004 mountd
     100005    2   udp 10004 mountd
     100005    2   tcp 10004 mountd
     100005    3   udp 10004 mountd
     100005    3   tcp 10004 mountd

 这样,当NFS重启后端口将会保留。下面是在防火墙上需要被打开的端口列表:

    * 111: portmap (tcp/udp)
    * 2049: nfs (tcp/udp)
    * 10000: example lockd (tcp)
    * 10001: example lockd (udp)
    * 10002: example statd/status (tcp/udp)
    * 10003: example statd/status outgoing (tcp/udp)
    * 10004: example mountd (tcp/udp)
    * 10005: example rquotad (tcp/udp)

 你现在可以在防火墙上打开这些端口,来允许远方的客户端挂载服务器上的共享输出了。如果你使用iptables,可以用下面的命令来增加输入/输出规则,来允许访问这些端口。注意这只是一个例子,你的防火墙规则可能不一样:

 # 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 10000 -j ACCEPT
 # iptables -A INPUT -p udp -m udp --dport 10001 -j ACCEPT
 # iptables -A INPUT -p tcp -m tcp --dport 10002:10005 -j ACCEPT
 # iptables -A INPUT -p udp -m udp --dport 10002:10005 -j ACCEPT
 # iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 # iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable
 # iptables -A OUTPUT -p tcp -m tcp --dport 111 -j ACCEPT
 # iptables -A OUTPUT -p udp -m udp --dport 111 -j ACCEPT
 # iptables -A OUTPUT -p tcp -m tcp --dport 2049 -j ACCEPT
 # iptables -A OUTPUT -p udp -m udp --dport 2049 -j ACCEPT
 # iptables -A OUTPUT -p tcp -m tcp --dport 10000 -j ACCEPT
 # iptables -A OUTPUT -p udp -m udp --dport 10001 -j ACCEPT
 # iptables -A OUTPUT -p tcp -m tcp --dport 10002:10005 -j ACCEPT
 # iptables -A OUTPUT -p udp -m udp --dport 10002:10005 -j ACCEPT
 # iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 # iptables -A OUTPUT -j REJECT --reject-with icmp-port-unreachable
 注意:没有指明用tcp选项的挂载请求会缺省使用udp。

此文章由 flyinweb 于 2010-09-07 15:21:25 编辑

本日志由 flyinweb 于 2010-09-07 15:16:47 发表,目前已经被浏览 4904 次,评论 0 次;

作者添加了以下标签: NFS

引用通告:http://www.517sou.net/Article/520/Trackback.ashx

评论订阅:http://www.517sou.net/Article/520/Feeds.ashx

相关文章

评论列表

    暂时没有评论
(必填)
(必填,不会被公开)