我正在尝试在 WSL2 Ubuntu 20.04 中挂载 NFS 文件夹
sudo mount singularity:/srv/Storage /mnt/storage -v
但它给了我一个错误
mount.nfs:安装 singularity:/srv/Storage 时服务器拒绝访问
我检查了/etc/exports
服务器上的
/srv/Storage *(rw,sync,no_subtree_check,no_root_squash,crossmnt)
(为了调试,我将其设置为*
之前的版本)10.0.0.0/16
为了确保万无一失,我跑了exportfs -ra
过去sudo service nfs-kernel-server restart
。
但即便如此,当我尝试在 WSL 中挂载时,我还是收到权限被拒绝的错误。我可以在其他机器上正常挂载。
答案1
我有同样的问题,但有几个可能的解决方案。
我的 nfs 日志看起来像这样(我猜你的也是如此):
cat /var/log/syslog
:
refused mount request from 192.168.123.123 for /mnt/poolio/data
(/mnt/data): illegal port 59646
解决方案看起来像是兔子洞......
默认情况下,WSL 的网络是 NAT 的。这需要端口转发。
基本上发生了什么:
NFS 客户端使用 1024 以下的保留端口,该端口只有使用 root 权限才能打开,因此比较安全。
WSL 执行端口转换(NAT)-> 客户端端口现在大于 1024。
NFS 服务器拒绝与该不安全端口的连接。
有几种可能的解决方案,但不幸的是,每种解决方案都有其优点和缺点:
解决方案 1:使用端口转发
解决方案 2:在 WSL 接口上使用桥接模式而不是 NAT。(显然会产生 DNS 问题)
解决方案 3:允许 NFS 服务器上的不安全端口。问题是,如果您允许这样做,任何人都可以冒充您。
提到前两种解决方案在这个 Stack Overflow 答案中。第三个我还没有链接--抱歉。
我自己还没有机会尝试这些方法。如果您有机会在我之前尝试,我很想听听您的结果。
抱歉没有提供更完整的说明。我知道我喜欢这样的答案。