如何在连接到特定 SSID 或网络之前自动启用 wifi 4addr(WDS)模式?

如何在连接到特定 SSID 或网络之前自动启用 wifi 4addr(WDS)模式?

我有一台笔记本电脑,在以太网和 WiFi 设备之间设置了一个桥接接口,以便将非 WiFi 设备连接到网络,然后再进入最终的有线位置。我使用桥接而不是转发/路由,因为它允许 ARP 和广播通过。为了使其正常工作,我每次激活桥接时都会手动启用 4addr 模式:iw dev wlp3s0 set 4addr on需要注意的是,WiFi 网络也必须支持此功能。

我想实现这一目标的自动化,并尝试了各种方法:

  1. NetworkManager dispatcher.d 脚本(同样是准备)
  2. udev 规则

第一种方法的问题是,dispatcher.d 脚本(常规和预启动)在设备连接到 SSID 后运行,此时启用 4addr 为时已晚。第二种方法太过宽泛,只是在启动时打开 4addr,这意味着我无法连接到任何不支持 4addr 的 WiFi 网络。

在 NetworkManager 告诉 WLAN 卡连接到指定网络之前,有没有办法设置 4addr 模式(或仅运行脚本)?

答案1

简短回答:不,NetworkManager 无法根据连接启用 4addr,但使用 udev 创建第二个虚拟 wlan 接口基本上解决了我的问题。

我想出了以下解决方案,我认为它比手动启用 4addr 更好,但仍然有一些功能不尽如人意,因为您需要先手动断开“正常”WiFi 连接,然后才能激活桥接。

我使用 udev 规则在启动时创建第二个 WLAN 接口,该接口永久启用了 4addr。然后我设置桥接器以将此新接口用于 WLAN 部分,并确保所有其他 WiFi 连接都明确设置为使用原始 WLAN 接口(全部使用 KDE NetworkManager Applet)

最后,就我而言,重要的是禁用桥接成员的自动连接,并让桥接在需要时启用它们。

/etc/udev/rules.d/90-wlan-bridge.rules

ACTION=="add", SUBSYSTEM=="ieee80211", KERNEL=="phy0", RUN="/usr/bin/iw phy %k interface add brwlan type managed 4addr on"
nmcli connection modify 'wlan-eth-bridge' connection.autoconnect-slaves 1
nmcli connection modify 'bridge-member-wlan' connection.autoconnect 0
nmcli connection modify 'bridge-member-eth' connection.autoconnect 0

相关内容