我想要的是:
我想要一个运行 Ubuntu(在 VirtualBox 上)的虚拟机客户机,用于各种 Web 开发测试服务器(在不同的端口上运行,例如 Grunt.js 在端口 9000 上运行)。
- 我想测试在这些服务器上运行的 Web 应用程序 a) 从客户机内部 b) 从主机内部(顺便说一下,运行 Windows 7),c) 从同一网络中的其他设备,通过 WiFi 连接(例如,移动设备)
- 我希望能够从访客端访问互联网
我首先运行了一个解决方案,其中我在 VirtualBox 中配置了 NAT 和仅主机适配器,这对于从主机访问客户机以及从客户机内部访问 Internet 都很好。
现在我想让其他设备能够访问虚拟机,这个解决方案不再有效。几年前我可以使用桥接网络适配器做到这一点,但这似乎在这里不起作用。
我做了什么:
我在 VirtualBox 中设置了桥接网络作为唯一的网络适配器,并保留了默认设置。当我启动客户机时,右上角的 WiFi 符号不断闪烁,即箭头不显示。过了一会儿,它显示:“已断开连接 - 您现在处于离线状态”。这是输出ifconfig
:
eth0 Link encap:Ethernet HWaddr 08:00:27:71:92:9c
inet6 addr: fe80::a00:27ff:fe71:929c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:233 errors:0 dropped:0 overruns:0 frame:0
TX packets:103 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16083 (16.0 KB) TX bytes:22280 (22.2 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:32 errors:0 dropped:0 overruns:0 frame:0
TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2624 (2.6 KB) TX bytes:2624 (2.6 KB)
如您所见,没有 inet4 地址。因此,我无法从客户机内部 ping 主机,反之亦然。
我也试过这,即我更改了 MAC 地址并运行
sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
sudo reboot
根本就沒有改變任何东西。
我还能做什么来调试这个问题?我怀疑这是 DHCP 问题。我可以轻松地在主机和网络中的其他机器上获取 IP,但在客户机上却不行。
答案1
使用 VirtualBox 是可行的,我最近在带 wifi 的笔记本电脑上运行了相同的配置,Windows 7 主机、Arch Linux 客户机。正如您所说,这是在为客户机提供桥接网络时。我还为虚拟卡选择了 virtio 驱动程序,但我怀疑这与手头的主题无关。
客户机从主机连接到的任何路由器获取 IP,它无缝运行,想想看,这非常令人印象深刻。我试图在 Xen 主机上实现同样的功能,但没有成功。所以它来自 VirtualBox 驱动程序的一些魔力,唯一的公开描述在这里:http://www.virtualbox.org/manual/ch06.html#network_bridged。
桥接到无线接口与桥接到有线接口的方式不同,因为大多数无线适配器不支持混杂模式。所有流量都必须使用主机无线适配器的 MAC 地址,因此 VirtualBox 需要替换传出数据包的以太网报头中的源 MAC 地址,以确保将回复发送到主机接口。[...]VirtualBox 检查 ARP 和 DHCP 数据包以了解虚拟机的 IP 地址。
此驱动程序扩展应该是开源的,因为它没有在“Oracle VM VirtualBox 扩展包”中提及,但很难找到有关它的文档。不幸的是,我不知道如何排除故障,但我会尝试:
- 查看主机无线网卡的属性,检查是否在那里看到 virtualbox 的内容(因为我重新安装了机器,所以我无法检查附加项目到底是什么)
- 卸载并重新安装无线网卡。它可能会删除其他项目,因此我认为在虚拟机属性中停用/重新激活桥接网络将重新安装该部分。
此外,如果路由器是您的,您可以查看它的日志,看看它是否至少从访客那里获得了一些试探性连接。
编辑:您评论说它正在与另一个路由器/接入点一起工作?在这种情况下,某些路由器可能拒绝将多个 IP 分配给同一个 MAC 地址。很遗憾我不再有这台机器了,无法查看路由器中每个 IP 的 MAC 是否相同,但情况应该如此。
答案2
IEEE 802.11 标准要求 AP 拒绝来自未知 MAC 地址的数据包;客户端必须先进行 802.11 身份验证和关联,然后 AP 才能接受来自它的数据包。因此,如果“桥接模式”意味着您的 VM 或客户操作系统正在尝试通过同一个无线电卡使用第二个 MAC 地址,则必须确保第二个 MAC 地址得到 802.11 身份验证和关联,否则 AP 必须忽略来自第二个 MAC 地址的数据包。
有没有关于 VirtualBox 如何处理此问题的文档?这肯定是一个众所周知的问题,要么已经解决(并且应该有文档说明如何解决),要么应该有充分的文档说明“不支持 Wi-Fi 桥接模式”。
答案3
我从路由器获取 IP 的方法如下sudo dhclient enp0s3
。enp0s3
是接口,也可以是eth0
例如。
不确定到底是什么问题,但至少这是一个临时修复,直到重新启动。
答案4
尝试以下命令:
nmcli connection up id enp0s3
它对我有用。有关更多信息,请访问:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/sec-configuring_ip_networking_with_nmcli