我代表一位朋友的儿子询问,他在印度上大学,所以如果我询问的信息不够,请见谅。他在 Windows 11 上使用 WSL2,并安装了 Ubuntu 22.04.3 LTS。
他的教授给出了有关安装课程所需的 NFS 共享的以下说明:
sudo apt-get install nfs-common
cd /
sudo mkdir tools
sudo mount -t nfs 10.0.17.82:/tools /tools
前三个命令运行正常,但挂载失败。我让他添加一个 -v 标志,输出为:
minor@Tejas:~$ sudo mkdir /tools
[sudo] password for minor:
minor@Tejas:~$ ls /tools
minor@Tejas:~$ sudo mount -v -t nfs 10.0.17.82:/tools /tools
mount.nfs: timeout set for Sun Sep 8 15:10:40 2024
mount.nfs: trying text-based options 'vers=4.2,addr=10.0.17.82,clientaddr=172.29.144.144'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'vers=4,minorversion=1,addr=10.0.17.82,clientaddr=172.29.144.144'
mount.nfs: mount(2): Operation not permitted
mount.nfs: trying text-based options 'addr=10.0.17.82'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 10.0.17.82 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 10.0.17.82 prog 100005 vers 3 prot UDP port 20048
mount.nfs: mount(2): Permission denied
mount.nfs: Operation not permitted
minor@Tejas:~$
我让他用了一下showmount
,结果是:
minor@Tejas:~$ showmount -e 10.0.17.82
Export list for 10.0.17.82:
/ *
我在列表中看不到/tools
导出,但我不知道我是否应该能够看到它。他的教授很可能没有正确配置服务器。
无论如何,有人可以指出哪里出了问题,或者采取进一步措施来检查问题是什么吗?
如果看不到服务器端 NFS 日志1 ,很难做出明确的诊断,但是这种行为可以通过以下事实来解释:WSL 网络接口使用网络地址转换(NAT),这导致客户端源端口看起来是非特权的,而服务器使用该选项导出远程文件系统
secure
- 仅允许来自特权端口的连接。为了演示,我
nfs-kernel-server
在 Kubuntu 24.04 框上配置了以下/etc/exports
文件:并创建一个
/tools
带有虚拟/tools/sometool
文件的目录,然后尝试从运行具有 NAT 接口的 Ubuntu 22.04 的 VirtualBox VM 挂载它:主机(Windows)IP:192.168.1.9
访客(Ubuntu 22.04)IP:10.0.2.15(NAT)
服务器端日志:
请注意错误消息中的高编号(>1024)源端口
illegal port 58242
。以桥接模式重新配置虚拟机接口:
主机(Windows)IP:192.168.1.9
访客(Ubuntu 22.04)IP:192.168.1.22(桥接)
服务器端日志:
为了进一步证明问题在于非特权端口,我尝试在桥接
noresvport
虚拟机上的 mount 命令中添加该选项:并获得与 NAT 配置相同的行为。
一些可能的解决方法是:
可以将 WSL 配置为使用桥接接口,如本博客中所述,例如如何桥接[原文如此] Windows Subsystem for Linux
但这超出了本网站的范围。
您可以切换到“裸机” Ubuntu 安装,或者允许开箱即用的桥接接口的虚拟化解决方案,如 Oracle Virtualbox 或 VMware。
您可以让您的教授修改导出以允许非特权端口号 - 如果它是基于现代 Linux 的服务器,那就意味着添加选项
insecure
(或更改secure
为insecure
):如需了解更多信息,请参阅
man exports
在 Ubuntu 手册页的第 5 节中安全注意事项部分
man nfs
如果教授的服务器运行的是基于 systemd 的 Linux,则默认情况下不启用日志记录,但可以按照此处的说明启用systemd 下的 NFS v4 日志在哪里?