係結 WiFi 和乙太網,以使網路間移動更輕鬆

2019-07-26 06:17:00

有時一個網路介面是不夠的。網路系結允許將多條網路連線與單個邏輯介面一起工作。你可能因為需要給單條連線更多的頻寬而這麼做,或者你可能希望在有線和無線網路之間來回切換而不會丟失網路連線。

我是後面一種情況。在家工作的好處之一是,當天氣晴朗時,在陽光明媚的陽台而不是在室內工作是很愉快的。但每當我這樣做時,我都會失去網路連線。IRC、SSH、VPN,一切都斷開了,用戶端重連至少需要一會。本文介紹了如何在 Fedora 30 筆電上設定網路系結,以便從筆電擴充套件塢的有線連線無縫切換到 WiFi。

在 Linux 中,介面系結由核心模組 bonding 處理。預設情況下,Fedora 沒有啟用此功能,但它包含在 kernel-core 軟體包中。這意味著啟用介面系結只需一個命令:

sudo modprobe bonding

請注意,這只會在你重新啟動之前生效。要永久啟用介面系結,請在 /etc/modules-load.d 目錄中建立一個名為 bonding.conf 的檔案,該檔案僅包含單詞 bonding

現在你已啟用系結,現在可以建立系結介面了。首先,你必須獲取要繫結的介面的名稱。要列出可用的介面,請執行:

sudo nmcli device status

你將看到如下輸出:

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

在本例中,有兩個(有線)乙太網介面可用。 enp12s0u1 在筆記型電腦擴充套件塢上,你可以通過 STATE 列知道它已連線。另一個是 enp0s31f6,是筆記型電腦中的內建埠。還有一個名為 wlp2s0 的 WiFi 連線。 enp12s0u1wlp2s0 是我們在這裡感興趣的兩個介面。(請注意,閱讀本文無需了解網路裝置的命名方式,但如果你感興趣,可以檢視 systemd.net-naming-scheme 手冊頁。)

第一步是建立系結介面:

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

在此範例中,係結介面名為 bond0con-name bond0 將連線名稱設定為 bond0。直接這樣做會有一個名為 bond-bond0 的連線。你還可以將連線名設定得更加人性化,例如 “Docking station bond” 或 “Ben”。

下一步是將介面新增到系結介面:

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

如上所示,連線名稱被設定為更具描述性。請務必使用系統上相應的介面名稱替換 enp12s0u1wlp2s0。對於 WiFi 介面,請使用你自己的網路名稱 (SSID)替換我的 “Cotton”。如果你的 WiFi 連線有密碼(這當然會有!),你也需要將其新增到設定中。以下假設你使用 WPA2-PSK 身份驗證

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

第二條命令將進入互動式編輯器,你可以在其中輸入密碼,而無需將其記錄在 shell 歷史記錄中。輸入以下內容,將 password 替換為你的實際密碼。

set wifi-sec.psk passwordsavequit

現在,你可以啟動你的系結介面以及你建立的輔助介面。

sudo nmcli connection up bond0sudo nmcli connection up bond-ethernetsudo nmcli connection up bond-wifi

你現在應該能夠在不丟失網路連線的情況下斷開有線或無線連線。

警告:使用其他 WiFi 網路時

在指定的 WiFi 網路間移動時,此設定很有效,但是當遠離此網路時,那麼系結中使用的 SSID 就不可用了。從理論上講,可以為每個使用的 WiFi 連線新增一個介面,但這似乎並不合理。相反,你可以禁用系結介面:

sudo nmcli connection down bond0

回到定義的 WiFi 網路時,只需按上述方式啟動系結介面即可。

微調你的系結

預設情況下,係結介面使用“輪詢round-robin”模式。這會在介面上平均分配負載。但是,如果你有有線和無線連線,你可能希望更喜歡有線連線。 active-backup 模式能實現此功能。你可以在建立介面時指定模式和主介面,或者之後使用此命令(係結介面應該關閉):

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

核心文件提供了有關係結選項的更多資訊。