我使用 VirtualBox 创建了一个虚拟机,内容如下VirtualBox 网络设置:
Attached to: Bridged Adapter
Name: wlan0
...
..
.
wlan0是我的笔记本电脑的无线接口,它连接到家用路由器,其型号取决于我工作的地方......不同地方的路由器型号不同。
该设置运行良好,这意味着客户操作系统可以与 Internet 和连接到无线网络的其他 PC 进行通信。我的问题是,当我去某些有特定路由器型号的地方时,例如型号:中兴HN F660。
某些路由器型号的问题如下中兴HN F660是客户操作系统在启动时配置其网络接口时没有收到 DHCP 回复。
我手动为客户操作系统分配了一个 IP 地址来测试可能的解决方法,但是数据包丢失率太高,导致网络变得毫无用处。
我测试了将主机操作系统配置为不使用 DHCP(使用静态 IP 配置),因此,如果路由器只对每个无线连接回复一个 DHCP 请求,主机操作系统就不会浪费这个机会,但什么都没有,即使主机操作系统不使用 DHCP 来获取其网络配置,客户操作系统在启动时尝试配置其网络接口时也不会收到来自路由器的回复。请注意,我使用DHCP客户端命令和是一样的。
我正在放弃每个无线链路的一些 IP 地址限制,因为我可以在为客户操作系统分配静态 IP 地址后进行 ping 操作(但正如我所说,数据包丢失率太高)。
这些路由器使用什么机制来抑制 DHCP 回复?有解决方法吗?
我使用的是装有最新 VirtualBox 的 Ubuntu 14.04。
编辑
主机操作系统网络与我测试过的所有路由器配合良好,因此排除了与主机 NIC 相关的问题。
答案1
您无法桥接到 WiFi 客户端连接。这是 802.11 规范所禁止的。如果可以,那么在扩展无线网络时就无需在现有接入点中配置 WDS 了——我们只需与接入点建立客户端连接并桥接到它即可。
有些路由器以各种方式违反 802.11 规范,使原本不应运行的功能“正常运行”,以方便客户使用。但您绝对不能依赖它。
问题在于——虚拟机和物理机具有不同的网络硬件地址。通过桥接 Wifi 连接,您可以向接入点提供两个不同的硬件地址。但接入点只有一个无线客户端,这只为其提供了一个硬件地址插槽。
如果桥接器通过数据包的原始源硬件地址传递数据包,则 802.11 规范要求接入点仅转发发往其中一个硬件地址的数据包。如果桥接器通过具有相同硬件地址的数据包,则它无法可靠地知道哪些数据包发往主机,哪些数据包发往虚拟机。
根据 802.11 规范,正确的解决方案是 WDS,它允许每个无线数据包有两个目标硬件地址,一个是无线端点的地址,另一个是目标以太网接口的地址。但如果没有 WDS,就只能通过违反规范来伪造它。
一般来说,Wifi 和桥接不能很好地混合使用。您可以使用 Internet 连接共享或任何基于路由而非桥接的技术。Wifi 与以太网非常相似,以至于人们会期望它与以太网完全一样。但事实并非如此,这是它真正不同的地方之一。
答案2
遗憾的是,并非所有 WLAN 组件都生来平等。即使在 2014 年,某些无线 NIC 仍无法与某些 AP 很好地兼容。
我很确定,这与 VirtualBox 无关 - 尝试从您的主机 ping 到网络上的其他地方,我敢打赌您会看到相同的数据包丢失。
我也确信,DHCP 不是问题的根源,而是问题的症状:DHCP 握手过程很容易受到数据包丢失的影响,因此很容易连续失败几次,给人一种完全失败的印象。
您可以尝试以下操作:
- 禁用 NIC 和/或路由器/AP 上的无线 N 模式
- 确保两者都在同一个监管范围内(设置为美国的路由器和设置为欧洲的 NIC 通常无法握手通道)