我有一个虚拟开发服务器,运行 Ubuntu Server,该服务器使用 Apache 设置,并在 Mac 上的 VirtualBox 下运行(主机操作系统为 OSX 10.8.1)。我配置了一个桥接适配器,试图使其在网络内的测试设备(iPhone 和 Android)上可见。
当我从运行它的“真实”机器连接到服务器时,一切都很好 - 可以加载网页等等。但是,从我的任何测试设备连接到该服务器的尝试都会超时。
我尝试设置混杂模式 = 允许所有并重新启动客户操作系统,但似乎没有任何效果。我还验证了主机盒的防火墙已完全关闭(在命令行中使用“sudo ipfw list”并在“系统偏好设置”>“安全”>“防火墙”中)。
为了实现此功能,我是否应该进行其他设置?我遗漏了哪些其他故障排除步骤?
答案1
好的,之前我写过,使用 Mac 的无线接口 en1 根本无法进行桥接。我只有传闻证据,但既然您能够验证这一点,我们可以将其视为事实。
但是让我们看一下可用的文档,这本身就很有趣。也许其他人可以对此发表评论?
我查看了 VirtualBox 4.1.20 (r80170) 附带的文档。其中第 1 章提到6.4 Bridged networking
:
要启用桥接网络,您只需打开虚拟机的“设置”对话框,转到“网络”页面,然后在“连接到”字段的下拉列表中选择“桥接网络”。最后,从页面底部的列表中选择所需的主机接口,该列表包含系统的物理网络接口。例如,在典型的 MacBook 上,这将允许您在“en1:AirPort”(无线接口)和“en0:以太网”(代表带有网线的接口)之间进行选择。
好的,这似乎意味着应该en1
可以工作。但是,下一段说:
注意:桥接到无线接口与桥接到有线接口的方式不同,因为大多数无线适配器不支持混杂模式。所有流量都必须使用主机无线适配器的 MAC 地址,因此 VirtualBox 需要替换传出数据包以太网报头中的源 MAC 地址,以确保将回复发送到主机接口。当 VirtualBox 看到传入数据包的目标 IP 地址属于虚拟机适配器之一时,它会将以太网报头中的目标 MAC 地址替换为 VM 适配器的 MAC 地址并将其传递。VirtualBox 检查 ARP 和 DHCP 数据包以了解虚拟机的 IP 地址。
还好吗?我不太清楚机场卡的功能,但当我运行 tcpdump 时,我看见了en1: promiscuous mode enable succeeded
中的消息dmesg
。(虽然我看不到任何不是我的流量,或多路流量或广播流量。嗯)
现在,有趣的部分是:
根据主机操作系统,应注意以下限制:在 Macintosh 主机上,使用 AirPort(Mac 的无线网络)进行桥接网络时功能会受到限制。目前,VirtualBox 仅支持通过 AirPort 的 IPv4。对于 IPv6 和 IPX 等其他协议,您必须选择有线接口。
我可以想象 Oracle 做了假设关于能力。或者,它曾经某个点(当时 SUN 仍在掌权)并且不再适用于最近的 Mac 或 OSX 版本。我对此只是猜测,因为它绝不对我有用。