我们有一台安装了 Win7-x64 的机器。在这台机器上,我们用 VirtualBox 运行一个客户机 Fedora-x64。我们在这个 Fedora 实例上定义了一个 NFS 共享。以下是 /etc/exports 中的条目:
/dvr 192.168.0.0/192.168.255.255(读写)
Windows 机器的 ip 地址是 192.168.1.100,Fedora 客户端的 ip 地址是 192.168.1.110。虚拟机的网络模式设置为桥接网络。
现在,从另一个 Linux 机器上,当我们 ping Fedora 客户机 (192.168.1.110) 时,我们得到了很好的响应。但是,当我们尝试挂载 nfs 共享时,我们收到“无路由到主机”错误。我们使用的命令是:
安装-t nfs 192.168.1.110:/dvr /mnt/test
为了确保没有 iptables 问题,在 Fedora 客户机上,我们执行以下操作:
服务 iptables 停止
并重新尝试安装,但无济于事。
你知道我们的设置可能出了什么问题吗?所有这些机器都通过集线器相互连接。Linksys 路由器配置为 DHCP 服务器,所有机器都从中获取 IP 地址。
谢谢。
答案1
Fedora 目前使用firewalld 作为防火墙。直接停止 iptables 并不是停止防火墙的正确方法。请尝试systemctl stop firewalld.service
其他方法。
你已经在 Fedora VM 上启动了 NFS 服务,不是吗?
您可以通过systemctl start nfs.service
在虚拟机上运行来实现这一点。
如果您自启动 nfsd 以来更改了/etc/exports
文件,那么您需要使用systemctl restart nfs.service
该命令重新导出文件系统exportfs -a
。
答案2
我知道这个问题有点老了,但我认为它仍然有意义。设置 NFS 挂载可能很棘手,因为它由多个组件组成,因此必须在防火墙中打开多个端口。此外,Fedora 使用防火墙,因此没有名为“iptables”的服务。
我假设你已经在 NFS 服务器上正确定义了导出(TLDP 文档exportfs -ra
),这是另一个 Fedora 框。编辑后不要忘记运行/etc/exports
。它也可能是您运行 VirtualBox 的 vm 主机(在主机和客户机之间设置文件共享,而无需安装和维护客户机附加包),这没什么区别。
尝试在“客户端”上安装 NFS 共享时,您可能会遇到超时:
# mount -v Share/
mount.nfs: timeout set for Tue May 22 15:40:52 2018
mount.nfs: trying text-based options 'vers=3,addr=192.168.56.1'
mount.nfs: prog 100003, trying vers=3, prot=6
^C
RPC 需要工作(必须能够通信)才能使 NFS 工作。在这种情况下,它无法连接到 NFS 服务器(192.168.56.1 是 VirtualBox 主机系统的默认 IP 地址,请将其替换为您的 NFS 服务器的 IP):
# rpcinfo -p 192.168.56.1
rpcinfo: can't contact portmapper: RPC: Remote system error - No route to host
为了阻止防火墙阻止服务器(vm 主机或单独的服务器)上的 NFS,您不应禁用它,这实际上允许一切。您需要确定客户端通过其连接的网络接口。如果未将其分配给防火墙区域,请选择一个合适的区域(可能不是“公共”区域)。然后允许该区域中的 NFS。
识别网络接口(以下命令将在服务器上运行):
# ip address
...
6: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.1/24 brd 192.168.56.255 scope global vboxnet0
valid_lft forever preferred_lft forever
在此示例中,客户端连接到 192.168.56.1,因此vboxnet0是该主机上的正确接口。
识别此接口被分配到的防火墙区域。
# firewall-cmd --get-zone-of-interface vboxnet0
如果是“无区域”,则需要自己选择一个区域并进行分配。例如“内部”,以明确表示不允许在外部接口上使用 NFS。
# firewall-cmd --add-interface=vboxnet0 --zone=internal
如果您现在列出“内部”区域中的所有接口,“vboxnet0”应该会出现:
# firewall-cmd --list-interfaces --zone=internal
vboxnet0
启用 NFS 服务器所需的那些“服务”(即打开端口)。
# firewall-cmd --add-service nfs --zone internal
# firewall-cmd --add-service mountd --zone internal
# firewall-cmd --add-service rpc-bind --zone internal
仔细检查“内部”区域中的 nic 是否已启用这些服务:
# firewall-cmd --list-services --zone internal
ssh mdns samba-client dhcpv6-client nfs ntp mountd rpc-bind
如果服务器上的这个防火墙阻止了 NFS,那么现在它应该可以正常工作了。或者可能因为网络中有另一个防火墙而无法正常工作。但是,这是关于 Fedora 及其防火墙的。
最后但并非最不重要的一点:上面列出的命令所做的所有更改都是临时的。只有运行时配置已更改(因为--permanent
尚未使用)。如果您犯了错误,重新启动firewalld 后所有更改都将消失。
如果您想保留更改,则需要将其保存到永久配置(防火墙文档):
# firewall-cmd --runtime-to-permanent
答案3
/etc/exports
需要一个 IP 地址,后面可选跟着一个 CIDR 或旧式网络掩码。
因此您需要将其更改为以下之一:
/dvr 192.168.0.0/255.255.0.0(rw)
或者:
/dvr 192.168.0.0/16(rw)
(也可以使用主机名,但与此无关。)