为什么 NFS 不允许我挂载共享?

Ale*_*lex 14 nfs virtualbox vagrant

主人

我有一台主机,运行 Ubuntu 12.04,位于10.0.0.202. 它为网络上的其他机器提供 NFS 共享。以下是内容/etc/exports

/media/storagedrive 10.0.0.0/24(rw,sync,no_subtree_check)
Run Code Online (Sandbox Code Playgroud)

这里的目的是将 的内容共享/media/storagedrive给 IP 范围内网络上的其他机器10.0.0.0 - 10.0.0.255

工作客户

这适用于10.0.0.40运行 Ubuntu 13.10(称为 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

的输出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)
Run Code Online (Sandbox Code Playgroud)

非工作虚拟客户端

我有第二台客户端机器,运行 Ubuntu 12.10,作为 Windows 7 主机上的来宾操作系统。主机在网络上作为10.0.0.28。来宾机器由 Vagrant 管理,使用 VirtualBox 4.3.6 作为提供程序。我将调用 Windows 7 主机 AlexDevHost 和 Ubuntu 来宾 AlexDevGuest。

showmount -e 10.0.0.202在 AlexDevGuest 上运行会产生:

Export list for 10.0.0.202:
/media/storagedrive 10.0.0.0/24
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试挂载共享时,它失败了:

$ sudo mount 10.0.0.202:/media/storagedrive /mnt/NetworkStorageDrive
mount.nfs: access denied by server while mounting 10.0.0.202:/media/storagedrive
Run Code Online (Sandbox Code Playgroud)

于是我开始寻找问题:

$ 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)
$
Run Code Online (Sandbox Code Playgroud)

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
$
Run Code Online (Sandbox Code Playgroud)

还是没有成功。所以现在我的想法不多了。

  1. 我究竟做错了什么?
  2. 如果 uid 部分是正确的,有没有办法可以验证 NFS 服务器机器是否看到我的访问尝试来自10.0.0.28,而不是其他一些不在允许范围内的 IP?

Ale*_*lex 16

好的,我已经解决了(或者至少,我已经成功了,我想我知道是什么导致了它)。

我将insecure标志添加到/etc/exportsNFS 服务器上的行中,所以现在看起来像这样:

/media/storagedrive 10.0.0.0/24(rw,sync,no_subtree_check,insecure)
Run Code Online (Sandbox Code Playgroud)

此标志允许连接源自 IPPORT_RESERVED (1024) 以上的客户端端口。

mount 命令现在可以工作了。

我猜测为什么缺少insecure标志是问题所在,VirtualBox 使用 NAT 将请求传递到物理网络,因此虽然 Ubuntu 来宾 (AlexDevGuest) 上的端口可能低于 1024,但转换后的端口在Windows 7 主机 (AlexDevHost) 可能高于 1024,因此被阻止。设置insecure标志意味着它被允许。

这个问题显然不会影响非虚拟机DevMatt。

  • 但是我怎样才能说服 VirtualBox 的网络使用低于 1024 的端口呢?.. (2认同)