在我的 Ubuntu 系统上,/etc/fstab 中有以下行:
myserver:/home/me /mnt/me nfs rsize=8192,wsize=8192,timeo=14,intr
当我做
sudo mount -a
我得到:
mount.nfs: access denied by server while mounting myserver:/home/me
我该如何诊断这个问题?nfs 服务器也是 Ubuntu。
其他详细信息:我能够从同一网络上的其他 Ubuntu 客户端挂载此 nfs 共享,没有任何问题。但是,有问题的客户端不同,因为它在 Windows 系统上的 VirtualBox 中运行。我可以从有问题的客户端顺利 ping “myserver”。
编辑: “myserver” 上的 /etc/exports:
/home/me *(rw,all_squash,async,no_subtree_check,anonuid=1000,anongid=1000)
“myserver” 上的 /etc/hosts.allow 和 /etc/hosts.deny 都是注释。请记住,我可以从同一网络上的其他客户端正常连接。
答案1
找到了!
其中一条日志有这样一行:
refused mount request from 192.168.1.108 for /home/me (/home/me): illegal port 64112
我谷歌了一下,发现由于端口超过 1024,我需要在服务器上的 /etc/exports 的相关行中添加“不安全”选项。一旦我这样做(并运行 exportfs -r),客户端上的 mount -a 就可以正常工作了。
答案2
该问题与如何为您的虚拟机设置网络有关。
默认情况下,使用 VirtualBox 时,您有NAT网络。这导致端口翻译。
一步一步来,得出:
- NFS 客户端正在使用保留端口(<1024...只能由 root 打开 -> 安全)
- Virtualbox 进行端口转换(NAT)-> 客户端端口现在大于 1024
- NFS 服务器拒绝该不安全端口的连接。
正如 @JoelFan 所说,一种解决方法是将选项设置insecure
为服务器。这是一个快速修复方法,但...不安全 ;)
为我解决这个问题(以一种安全的方式)是从NAT到桥此虚拟机的网络。这样,我的虚拟机就有了自己的 IP 地址,并且无需进行端口转换。
答案3
猜猜怎么着……对我来说,完全相同的错误的根源是我的 NFS 客户端和服务器之间的版本不匹配。
日志没有任何动静,好像什么事都没发生过一样,只有在服务器端运行的 nfswatch 帮助我弄清了情况。
通过在客户端添加 nfsver 挂载选项解决了该问题:
server:/path /mount/point nfs nfsvers=3 0 0
答案4
您是否已验证尝试连接的客户端在服务器上的名称解析是否正确(并在导出文件中列出)?