在一行中:以下是可能的:AirPort <- Mac OS X bridge -> vbox-Host-only -> VM's
在 Mac OS X 上,我有虚拟盒使用虚拟机。目前,我已为虚拟机配置了 2 个接口。eth0
是我的虚拟机访问互联网的正常桥梁(当 AirPort 已连接时)。eth1
设置为仅主机,这样当没有 Wi-Fi/AirPort 已关闭时,我可以从主机访问我的虚拟机。所以基本上,当有 Wi-Fi 时,它就像适配器 1,当没有 Wi-Fi 时,它就像适配器 2。
我希望只有一个配置以使其更简单。我想我可以只保留主机配置,然后在主机 (Mac OS X) 上转到 Internet 共享并选择“从 AirPort 共享”到 vboxnet0(vb 虚拟接口)。结果却发现 vboxnet0 没有显示在 Mac OS X 偏好设置中的接口列表中。
我知道在 Linux 主机上可以安装一个叫做 bridge-utils 的东西,并使用它来桥接两个接口。Mac 有类似的东西吗?
答案1
这实际上是一个相当简单的事情,但确实需要一定程度的网络和路由技术知识。
虽然可以使用某种形式的 NAT 将仅主机网络链接到网络的其余部分,但所谓的“双重 NAT”是不受欢迎的。双重 NAT 是指在网络中进行两次网络地址转换,从而为通过网络传输的数据包增加额外开销,应尽可能避免。
您想要实现的目标可以很好地完成,而不需要任何 NAT。
基本上,理论是,您创建一个单独的网络,该网络是仅主机网络,在 Mac 上打开 IP 转发,并在 Airport 上设置静态路由。
假设您的常规网络是 192.168.1.0/24,Airport 位于 192.168.1.1,而您的 Mac 位于 192.168.1.200。您需要一个静态 IP 地址在 Mac 上才能正常工作。仅主机网络已经分配了 IP 范围,为了便于讨论,我们假设它是 10.0.0.0/24,Mac 端在 10.0.0.1 上,而 VM 在 10.0.0.8 上运行。
因此我们想要实现:
Airport <--------------------> Mac <----------------------> VM
192.168.1.1 192.168.1.200 |10.0.0.1 10.0.0.8
在 Mac 上启用 IP 转发非常简单。如果您使用的是 10.5 或更低版本,请查看 /etc/hostconfig 文件并找到 IP 转发行(我忘记了它到底是什么)并将其设置为 YES。在所有其他版本的 OS/X 上,以及在 10.5 或更低版本上,您可以修改 /etc/sysctl.conf 并添加:
net.inet.ip.forwarding=1
完成上述操作后,您可以以 root 身份输入以下命令来打开转发功能,而无需重新启动:
sysctl -w net.inet.ip.forwarding=1
好的,现在网络数据包可以从主网络传输到 Host Only 网络。但是我们如何告诉网络的其余部分有关这个 Host Only 网络的信息?目前只有 Mac 知道。
嗯,这又是一件简单的事情。您不必告诉网络上的所有主机,只需告诉所有设备的一个共同呼叫点 - 默认网关 - 在本例中为 Airport。
现在,我还没有使用过机场,所以我无法告诉您在哪里寻找需要更改的设置,但该设施会在某处。
您正在寻找一个可以指定的设置静态路由. 它可能被标记为这样,或路由表或类似的东西。找到后,您需要通过 Mac 设置 Host Only 网络的路由。这时,静态地址在 Mac 上设置 IP 地址和网络掩码是必不可少的。您需要设置的路由将使用类似以下设置(来自上面的示例。将数字替换为您的实际 IP 地址和网络掩码):
Network: 10.0.0.0 Network address of the Host Only network
Netmask: 255.255.255.0 Netmask of the Host Only Network
Gateway: 192.168.1.200 IP address of your Mac.
设置该路由后,任何发往 Host Only 网络的流量将首先到达 Airport,然后 Airport 将响应“实际上,你不想和我说话,你想和 192.168.1.200 说话”并且流量将重定向到你的 Mac - 然后将其传递到仅主机网络。
唯一需要确定的是,在虚拟机中运行的客户操作系统已为其网络设置了默认网关。这必须是仅主机网络的 Mac 端(上例中为 10.0.0.1)。
那么这如何让虚拟机连接到互联网呢?其实很简单:它实际上扩展了您的网络以包括仅主机网络,而路由器 (Airport) 负责其余部分。它处理 NAT,并知道哪些流量用于主网络,哪些流量用于仅主机网络。