今天我在 Debian 12 上安装了 VirtualBox,并使用 wifi 桥接器工作,我可以使用与 wlan0 wifi(88x2bu 驱动程序)相同的 ip 类 ping 虚拟机,但 ip addr 和 ip link sh 没有报告接口
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether ******** brd ******
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether ************ brd ********** permaddr *******
,桥在哪儿?
使用其他应用程序(如 kvm/qemu libvirt)时,我曾无法设置任何与 wlan 的桥接(以太网可以),VirtualBox 可以使用桥接而 libvirt 不能,这怎么可能呢?对于 libvirt,我曾使用 virbr 解决方案:创建一个“指向” wlan 的 virbr 接口,如下所示
<name>wifibr</name>
<uuid>***</uuid>
<forward dev='wlan0' mode='route'>
<interface dev='wlan0'/>
</forward>
<bridge name='virbr5' stp='on' delay='0'/>
<mac address='****'/>
<domain name='rosso.priv'/>
<ip address='192.168.201.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.201.128' end='192.168.201.254'/>
</dhcp>
</ip>
<dnsmasq:options>
<dnsmasq:option value='dynamic-host=rosso.priv,0.0.0.0,wlan0'/>
</dnsmasq:options>
</network>
尝试搭桥失败
brctl addif br0 wlan0
can't add wlan0 to bridge br0: Operation not supported
问题:virtualbox 桥接如何工作?是否可以使用 libvirt 实现类似功能?我更喜欢使用 wlan0 ip 类
Virtualbox 并不以同样的方式进行桥接。它使用“网络过滤器”接口来拦截数据包。
来自https://www.virtualbox.org/manual/ch06.html#network_bridged
主机不会在常规工具
ip -a
等中看到它,因为它处于较低级别;没有与之关联的接口。您可以从
virtualbox
GUI 中选择要桥接的接口。这也将显示在.vbox
虚拟机的配置文件中例如
不幸的是,不行。VirtualBox 方法的一个重要部分是其过滤驱动程序不仅实现以太网桥接,还实现MAC 地址重写。
阻止 Wi-Fi“客户端”接口桥接的真正原因是 Wi-Fi 仅允许客户端从其自己的MAC 地址1发送帧- 相同的“源 MAC 地址”字段在 Wi-Fi 中有两个用途,既可以识别 MAC 发送者(第 2 层的上半部分),也可以识别与特定接入点关联的物理 Wi-Fi 无线电(第 2 层的下半部分)。简而言之,发送者的 MAC 地址用于选择 WPA 解密密钥和其他 Wi-Fi 无线电参数,因此您的 WLAN 接口不可能任意从 VM 的 MAC 发送帧。
VirtualBox 通过实施本质上是 MAC 级的 NAT 来解决此问题 - 其内部桥接实施在所有帧头中将虚拟机的 MAC 地址与主机的 MAC 地址进行交换,重写 ARP 查询和 ICMPv6 邻居发现数据包,并跟踪 IP 地址,以便在从网络接收到帧(当然是发送到主机的 MAC)时,它可以再次交换正确的虚拟机的目标 MAC。(请参阅
Devices/Network/SrvIntNetR0.cpp
。)据我所知,Linux 没有与之对应的本机版本;相反,它只是拒绝桥接 Wi-Fi 客户端接口。
(建议的解决方案是使用以太网电缆。)
1 802.11 帧头是不对称的 – “接入点”端有两个地址字段,“客户端”端只有一个。允许客户端桥接的四地址模式是可行的,Linux 甚至支持它,但大多数 AP 会拒绝这样的帧;很少有 AP 可以配置为接受 4addr 帧。