Answers:
$ rpcinfo -p | grep nfs
NFS服务器的端口111(TCP和UDP)和2049(TCP和UDP)。
还有用于集群和客户端状态的端口(前者为端口1110 TCP,后者为1110 UDP)以及NFS锁定管理器的端口(端口4045 TCP和UDP)。只有您可以根据跨网关需要的服务来确定需要允许的端口。
grep nfs
,但是我放弃了grep来了解111是用于的portmapper
。也很高兴知道!(和您提到的一样,必要)
除了用于portmapper的111和用于nfs的2049外,您还需要允许安装的端口以及可能的rquotad,lockd和statd,它们都是动态的。这份出色的NFS安全指南建议您更改启动脚本和内核模块配置,以强制它们使用静态端口。
除了上面的指南(其中包含有关防火墙的部分)之外,请参阅我对有关加固NFS的另一个问题的回答。
RPCMOUNTDOPTS="--port 34567"
,然后用重新启动sysctl --system
和/etc/init.d/nfs-kernel-server restart
我在此页面上找到了解决问题的有用指导,但没有容易遵循的方法。这是我的食谱。
TL; DR-修复后需要同时允许nfs端口(111、2049)和mountd端口。
说明:
gksudo gedit /etc/default/nfs-kernel-server
RPCMOUNTDOPTS=--manage-gids
RPCMOUNTDOPTS="--port 33333"
或任何其他端口号。
现在尝试使用以下方法重置nfs:
sudo service nfs-kernel-server restart
并测试它是否有助于使用:
rpcinfo -p | grep "tcp.*mountd"
对我来说这还不够,但是完全重启可以解决此问题。
(信用)
(1)删除旧规则,手动执行此操作;如果这是防火墙的唯一用法,则将其重置:
sudo ufw reset
sudo ufw enable
(2)添加NFS和挂载端口
sudo ufw allow in from 10.0.0.1/20 to any port 111
sudo ufw allow in from 10.0.0.1/20 to any port 2049
sudo ufw allow in from 10.0.0.1/20 to any port 33333
(更改为您的本地IP或更改为“ any
”,而不是10.0.0.1/20
)
这就是全部。
sudo service nfs-config restart
重新启动nfs-kernel-server
就可以了。
systemctl
,则为systemctl restart nfs-kernel-server.service
。
sudo nfs allow proto tcp from 10.0.0.1/20 to any port 111,2049,33333
接着是(好的,两口气做饭)sudo nfs allow proto udp from 10.0.0.1/20 to any port 111,2049,33333
。注意,端口33333符合上述示例。您可以使用其他端口作为答案。
使用FERM,可以使用Backticks从rpcinfo获取端口,例如:
服务器:
proto tcp {saddr ($CLIENT) {
dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:tcp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}
proto udp {saddr ($CLIENT) {
dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:udp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}
客户:
proto udp {saddr ($SERVER) {ACCEPT;}} # NFS
(如果只打算使用TCP,则只需要proto tcp
一部分)。
为了进行记录,我必须为Windows 2008 R2服务器导出NFS共享且客户端为Ubuntu 12.04.4的配置添加端口111、2049 和 1048的权限。
我希望这可以帮助别人。