主人
我有一台运行 Ubuntu 12.04 的主机,位于10.0.0.202
。它为网络上的其他机器提供 NFS 共享。以下是 的内容/etc/exports
:
/media/storagedrive 10.0.0.0/24(rw,sync,no_subtree_check)
这里的目的是将的内容共享/media/storagedrive
给IP范围内的网络上的其他机器10.0.0.0 - 10.0.0.255
。
工作客户端
这在运行 Ubuntu 13.10 的客户端机器10.0.0.40
(称为 MattDev)上正常工作。该机器/etc/fstab
如下所示:
UUID=8f8c838e-3ea2-457a-87f0-57b12dfab06c / ext4 errors=remount-ro 0 1
UUID=427089d4-46a2-432d-9df4-7016bdfc7df2 none swap sw 0 0
10.0.0.202:/media/storagedrive /mnt/NetworkStorageDrive nfs rsize=8192,wsize=8192,timeo=14,intr
在该机器上看起来ls -al /mnt/
是这样的:
total 12K
drwxr-xr-x 3 root root 4.0K Feb 4 17:48 .
drwxr-xr-x 23 root root 4.0K Feb 5 08:44 ..
drwxrwxr-x 7 root plugdev 4.0K Feb 5 11:43 NetworkStorageDrive
输出id
如下所示:
uid=1000(matt) gid=1000(matt) groups=1000(matt),4(adm),24(cdrom),27(sudo),30(dip),33(www-data),46(plugdev),112(lpadmin),124(sambashare)
虚拟客户端无法工作
我有第二台客户端计算机,运行 Ubuntu 12.10,作为 Windows 7 主机上的客户操作系统。主机在网络上作为10.0.0.28
。客户机由 Vagrant 管理,使用 VirtualBox 4.3.6 作为提供程序。我将 Windows 7 主机称为 AlexDevHost,Ubuntu 客户机称为 AlexDevGuest。
在 AlexDevGuest 上运行showmount -e 10.0.0.202
产生:
Export list for 10.0.0.202:
/media/storagedrive 10.0.0.0/24
但是,当我尝试安装共享时,失败了:
$ sudo mount 10.0.0.202:/media/storagedrive /mnt/NetworkStorageDrive
mount.nfs: access denied by server while mounting 10.0.0.202:/media/storagedrive
因此我开始寻找问题:
$ ls -alh /mnt/
total 12K
drwxr-xr-x 3 root root 4.0K Feb 5 12:23 .
drwxr-xr-x 26 root root 4.0K Feb 5 12:23 ..
drwxr-xr-x 2 root root 4.0K Feb 5 12:23 NetworkStorageDrive
$ id
uid=1001(vagrant) gid=1001(vagrant) groups=1001(vagrant)
$
该 uid 和 gid 与 MattDev 上的用户 matt 不同。因此,我调整了 vagrant 的 uid,因为我读到 NFS 访问是通过匹配 IP 地址和 uid 来控制的。因此现在:
$ id
uid=1000(vagrant) gid=1001(vagrant) groups=1001(vagrant)
$ sudo mount 10.0.0.202:/media/storagedrive /mnt/NetworkStorageDrive
mount.nfs: access denied by server while mounting 10.0.0.202:/media/storagedrive
$
还是没有成功。所以现在我没什么主意了。
- 我究竟做错了什么?
- 如果 uid 部分正确,有没有办法我可以验证 NFS 服务器计算机是否将我的访问尝试视为来自
10.0.0.28
,而不是来自允许范围内的其他 IP?
答案1
好的,我已经解决了(或者至少,我已经让它工作了,并且我想我知道是什么原因造成的)。
我在NFS 服务器上的行insecure
中添加了标志,所以现在它看起来像这样:/etc/exports
/media/storagedrive 10.0.0.0/24(rw,sync,no_subtree_check,insecure)
此标志允许连接来自 IPPORT_RESERVED (1024) 以上的客户端端口。
mount 命令现在有效。
我猜测,缺少该insecure
标志的原因在于 VirtualBox 使用 NAT 将请求传递到物理网络,因此虽然 Ubuntu 客户机 (AlexDevGuest) 上的端口可能低于 1024,但 Windows 7 主机 (AlexDevHost) 上的转换端口可能高于 1024,因此被阻止。设置该insecure
标志意味着允许该请求。
这个问题显然不会影响非虚拟机 MattDev。