桥接:使用 4addr 选项丢失 WLAN 网络连接 - 为什么?

Wit*_*aft 9 network-manager networking virtualization xen network-bridge

问题:
为了与我的 Xen VM 一起使用,我需要创建一个桥接到 wlan0 的虚拟网络接口 (vif)。

如果在 /etc/network/interfaces 我添加

auto xenbr0
       iface xenbr0 inet dhcp
Run Code Online (Sandbox Code Playgroud)

然后再做

brctl addif xenbr0 wlan0

我收到此错误消息。

can't add wlan0 to bridge xenbr0: Operation not supported
Run Code Online (Sandbox Code Playgroud)

我发现 Linux 根本不会让您在托管模式下桥接无线接口,除非您启用 4addr 选项(需要重新编译 iw):

iw dev wlan0 set 4addr on
Run Code Online (Sandbox Code Playgroud)

然后

brctl addif xenbr0 wlan0
Run Code Online (Sandbox Code Playgroud)

工作正常,并且 brctl show 显示 xenbr0 已桥接到 wlan0。

不幸的是,一旦我执行

iw dev wlan0 set 4addr on
Run Code Online (Sandbox Code Playgroud)

我的整个网络连接都消失了(没有连接)。一旦我执行

iw dev wlan0 set 4addr off
Run Code Online (Sandbox Code Playgroud)

我重新连接,它再次工作。如果我重新执行 4addr,它会再次中断,如果我关闭 4addr,它会再次工作。

不幸的是,我不能只打开 4addr,激活网桥,然后将其关闭(错误:设备未准备好)。

有人知道我为什么失去连接吗?

小智 14

在这里找到答案:http : //nullroute.eu.org/~grawity/journal.html#post : 20110826

iw dev wlan0 set 4addr on
Run Code Online (Sandbox Code Playgroud)

但是,启用 4addr 后,您可能会被 AP 完全忽略:关联成功但所有数据帧都消失在以太中。这可能是出于安全原因(因为很难欺骗源 MAC 地址。是的。)在我的路由器(运行 OpenRG)中,有必要为无线 AP 接口启用“WDS”模式,添加一个 WDS 设备仅限于我的笔记本电脑的 MAC 地址,并将其添加到 LAN 桥接器。4addr 数据包现在可以工作了。

但是,还有另一个问题——路由器现在拒绝来自笔记本电脑的三地址数据包,这可能相当不方便(每次更改 WLAN 网络时都必须切换 4addr)。解决方法是在笔记本电脑上添加连接到同一设备的第二个无线接口,但具有不同的 MAC 地址:

# undo the earlier configuration
iw dev wlan0 set 4addr off


# add a second interface
iw dev wlan0 interface add wds.wlan0 type managed 4addr on
ip link set dev wds.wlan0 addr $ADDR
ip link set dev wds.wlan0 up
Run Code Online (Sandbox Code Playgroud)

这里的 $ADDR 必须与路由器中配置的 WDS 设备地址相匹配;除此之外,它可以是任何有效的 MAC 地址。wlan0 的原始 MAC 然后保留用于“正常”使用。

可以同时使用 wlan0 和 wds.wlan0——尽管我只测试了两次关联到同一个 AP,而不是不同的 AP。


小智 5

在某些情况下,您还可以使用 wlan_kabel。它使用数据包套接字直接桥接 wlan*-设备与以太网设备。但是,您一次只能使用 wlan_kabel 桥接一个 MAC。它没有被接入点禁止的缺点,因为只使用了 wlan 设备的原始 MAC。

在您的情况下,这意味着 wlan0 只能由一个 VM 使用,甚至不能由主机使用。

您可以在此处获取 wlan_kabel 。