我通常的问题是如何确保Ubuntu 24.04 系统仅使用最高优先级的网络接口(我自己设置优先级)?最好以一种用户友好且“官方”的方式?
为了更清楚地说明我的意思,以下是我的具体用例:我在一台只有 2.4 GHz Wifi 模块的旧 HP 笔记本电脑上运行 Ubuntu 24.04,使用默认的 Gnome 桌面环境和负责网络的网络管理器。它有一个有线以太网端口,我还有一个 5 GHz Wifi USB 适配器。我想要的是:
- 如果有线以太网端口已连接,则只使用该端口,不要担心任何 Wifi 端口。
- 如果已连接 USB 加密狗,请使用它连接到 5 GHz Wifi AP(显然带有预存的凭据)
- 其他情况下,使用内置 2.4 GHz Wifi 模块连接到 2.4 GHz Wifi AP
此外,我希望有一种“用户友好”的方式来解决这个问题,以便家庭中不懂技术的成员如果想要更好的覆盖范围,只需插入 USB 加密狗即可。
发生的情况是,两个 Wifi 适配器都被分配了一个有效的 IPv4 地址,并且都出现在路由表中。
需要明确的是,内置 Wifi 和 USB Wifi 适配器都可以工作,但问题是它们同时连接到同一个 IPv4 子网上的两个不同 SSID,而且 2.4 GHz 链路非常不稳定(因为有太多邻居的 2.4 GHz Wifi AP 信号可以到达我家)。
我曾经尝试过或者考虑过这些事情:
- 使用设置对话框禁用内部 Wifi 模块。这最终禁用了内部模块和 USB Wifi 加密狗。不起作用。
- 用来
rfkill
禁用内部模块 - 但这也会导致禁用 USB Wifi 加密狗,即使仅阻止内部 2.4 GHz 模块也是如此。我猜是 NetworkManager 解释了任何被阻止的 Wifi 设备,从而阻止了所有设备。不起作用。 - 使用 删除涉及 2.4 GHz Wifi 模块的路由
ip route del
。这种方法有效,因为与 Wifi AP 的连接仍然存在,但没有通过 2.4 GHz 链路路由流量。这种方法有效,但如果笔记本电脑切换到另一个 AP,路由会重新添加,因此不是一个稳定的长期解决方案。 ip link set dev DEVICE down
当检测到 5 GHz 设备时,在 2.4 GHz Wifi 接口上使用。这几乎与删除上述路由条目的解决方案相同,尚未测试过,但除非网络管理器重新启动它们,否则这应该有效。- 将内部模块的驱动程序列入黑名单。这不是一个可行的解决方案,因为每次连接/移除 USB Wifi 加密狗时都重新启动是不可接受的。
- 删除所有 2.4 GHz AP 凭证。不可接受,因为我希望即使移除 USB Wifi 适配器,笔记本电脑也能“无缝”使用。
我是否遗漏了完全不同的方法?如果没有,我猜需要一个脚本来监控各种适配器的状态,该脚本使用ip route
/ip link
命令在检测到高优先级接口时禁用低优先级接口。我意识到这排除了将不同的网络适配器连接到不同网络的可能性,但如果我有这种特定的用例,我会解决它。