我已经设置了一个 nfsv4 服务器并且它运行良好,但是即使端口 2049 和 111 已打开,防火墙也会阻止 nfs。
我知道 nfs 使用一些每次启动时都会改变的随机端口,但如何才能使它们变为静态,以便我可以使用 nfs 而不必再次禁用防火墙?
答案1
我对此做了一些研究。Ubuntu 使用的是 UFW,它非常容易配置,而且非常强大,至少对于 soho 的需求来说是这样。因此,rpc.mountd默认情况下监听多个端口,因此你必须绑定rpc.mountd到一个端口,然后您可以添加额外的 UFW 规则来接受该特定端口上的传入连接。
为此,请打开/etc/default/nfs 内核服务器并注释掉以下行
RPCMOUNTDOPTS=--manage-gids
并添加以下行
RPCMOUNTDOPTS="-p 13025"
13025 只是一个随机选择的端口,它是可用的,并且尚未定义/etc/services。
sudo systemctl restart nfs-kernel-server
使用(或sudo /etc/init.d/nfs-kernel-server restart
在旧版 Ubuntu 上)重新启动 NFSd 。
现在配置 UFW 以接受端口上的传入连接13025,2049和港口111。
ufw allow from 192.168.1.0/24 to any port 111
ufw allow from 192.168.1.0/24 to any port 2049
ufw allow from 192.168.1.0/24 to any port 13025
就是这样。您现在应该能够从另一台机器安装您的导出文件了。:-)
答案2
接受的答案对于旧版本的 Ubuntu 来说是正确的。但是现在我正在使用 Ubuntu 22,在尝试此选项后(在我之前的 Raspberry Pi 上的 Ubuntu 中运行良好),似乎不再有效。
根据此链接。
Ubuntu 22.04 中的 NFS 服务器或客户端会忽略 /etc/default/nfs-* 文件。
这意味着@Jar 提出的解决方案不再有效。
现在必须做的是编辑/etc/nfs.conf
并根据此链接. 更新此配置:
[mountd]
#port=0
取消注释该行#port=0
并将端口替换为所需的数字(即,按照其他示例替换为 13025)。
[mountd]
port=13025
此后,重新启动服务器:
systemctl restart nfs-server
并确保端口13025
现在已正确打开,rpcinfo -p
并提供如下输出:
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 13025 mountd
100005 1 tcp 13025 mountd
100005 2 udp 13025 mountd
100005 2 tcp 13025 mountd
100005 3 udp 13025 mountd
100005 3 tcp 13025 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
现在必须按预期工作。显然,请记住打开防火墙以访问端口2049
、111
、13025
。如前面的答案所述:
ufw allow from 192.168.1.0/24 to any port 111
ufw allow from 192.168.1.0/24 to any port 2049
ufw allow from 192.168.1.0/24 to any port 13025
答案3
使用新版本的 Ubuntu,您无需进行复杂的操作。Ubuntu 18.04 ufw 和 nfs-kernel-server。
只需使用此命令即可允许主机上的 nfs
sudo ufw allow from your_client_ip to any port nfs
或者
sudo ufw allow from your_client_ip_block/24 to any port nfs