绑定 WiFi 和以太网以实现更轻松的网络移动性

有时一个网络接口是不够的。 网络绑定允许多个网络连接与单个逻辑接口一起操作。 您可能会这样做,因为您需要比单个连接处理的更多的带宽。 或者,也许您想在有线和无线网络之间来回切换而不会丢失网络连接。

后者适用于我。 在家工作的好处之一是,当天气晴朗时,在阳光明媚的甲板上而不是在室内工作会很愉快。 但每次我这样做时,我都会失去网络连接。 IRC、SSH、VPN——一切都消失了,至少在一些客户端重新连接的那一刻。 本文介绍了如何在我的 Fedora 30 台笔记本电脑可从我的笔记本电脑底座的有线连接无缝移动到 WiFi 连接。

在 Linux 中,接口绑定由绑定内核模块处理。 Fedora 默认情况下不启用此功能,但它包含在 kernel-core 包中。 这意味着启用接口绑定只是一个命令:

sudo modprobe bonding

请注意,这只会在您重新启动之前生效。 要永久启用接口绑定,请在 /etc/modules-load.d 目录中创建一个名为 bonding.conf 的文件,其中仅包含单词“bonding”。

现在您已启用绑定,是时候创建绑定接口了。 首先,您必须获取要绑定的接口的名称。 要列出可用接口,请运行:

sudo nmcli device status

您将看到如下所示的输出:

DEVICE          TYPE      STATE         CONNECTION         
enp12s0u1       ethernet  connected     Wired connection 1
tun0            tun       connected     tun0               
virbr0          bridge    connected     virbr0             
wlp2s0          wifi      disconnected  --      
p2p-dev-wlp2s0  wifi-p2p disconnected  --      
enp0s31f6       ethernet  unavailable   --      
lo              loopback  unmanaged     --                 
virbr0-nic      tun       unmanaged     --       

在这种情况下,有两个(有线)以太网接口可用。 enp12s0u1 位于笔记本电脑扩展坞上,您可以看出它是从 STATE 列连接的。 另一个 enp0s31f6 是笔记本电脑的内置端口。 还有一个名为 wlp2s0 的 WiFi 连接。 enp12s0u1 和 wlp2s0 是我们在这里感兴趣的两个接口。 (请注意,本练习不必了解网络设备的命名方式,但如果您有兴趣,可以查看 systemd.net-naming-scheme 手册页.)

第一步是创建绑定接口:

sudo nmcli connection add type bond ifname bond0 con-name bond0

在这个 example,绑定的接口命名为bond0。 “con-name bond0”设置连接名称为bond0; 将其关闭将导致名为 bond-bond0 的连接。 您还可以将连接名称设置为更人性化的名称,例如“Docking station bond”或“Ben”

下一步是将接口添加到绑定接口:

sudo nmcli connection add type ethernet ifname enp12s0u1 master bond0 con-name bond-ethernet
sudo nmcli connection add type wifi ifname wlp2s0 master bond0 ssid Cotton con-name bond-wifi

如上,连接名称指定为 更具描述性. 请务必将 enp12s0u1 和 wlp2s0 替换为系统上的相应接口名称。 对于 WiFi 接口,使用您自己的网络名称 (SSID),我使用“Cotton”。 如果您的 WiFi 连接有密码(当然有!),您也需要将其添加到配置中。 以下假设您正在使用 WPA2-PSK 验证

sudo nmcli connection modify bond-wifi wifi-sec.key-mgmt wpa-psk
sudo nmcli connection edit bond-wif

第二个命令将带您进入交互式编辑器,您可以在其中输入密码,而无需将其记录在 shell 历史记录中。 Enter 以下,用您的实际密码替换密码

set wifi-sec.psk password
save
quit

现在您已准备好启动绑定接口和您创建的辅助接口

sudo nmcli connection up bond0
sudo nmcli connection up bond-ethernet
sudo nmcli connection up bond-wifi

您现在应该能够在不丢失网络连接的情况下断开有线或无线连接。

警告:使用其他 WiFi 网络

当在指定的 WiFi 网络上移动时,此配置效果很好,但当离开此网络时,绑定中使用的 SSID 不可用。 从理论上讲,可以为使用的每个 WiFi 连接添加一个接口,但这似乎不合理。 相反,您可以禁用绑定接口:

sudo nmcli connection down bond0

回到定义的 WiFi 网络后,只需启动上述绑定接口即可。

微调你的债券

默认情况下,绑定接口使用“负载均衡(循环)”模式。 这将负载均匀地分布在各个接口上。 但如果您有有线和无线连接,您可能更喜欢有线连接。 “主动备份”模式可以实现这一点。 您可以在创建接口时指定模式和主接口,或者之后使用此命令(绑定接口应该关闭):

sudo nmcli connection modify bond0 +bond.options "mode=active-backup,primary=enp12s0u1"

内核文档 有更多关于绑定选项的信息。