2024年5月27日 星期一

建立 bridge 連線, nmcli 版

我喜歡把 virt-manager 所管理的虛擬機從自閉的網路裡面拉到跟 host 同一層的家中區網, 以便手機、 平板等等其他裝置可以看到這些虛擬機。 過去幾年是用 netplan 來建立 bridge; 今年 (從 linux mint) 移民到 debian, 預先安裝的是 nmcli 而不是 netplan。 那就跟著改吧, 這樣比較方便在社群裡求助。

先講結論: 我覺得 nmcli 有幾個地方設計很奇怪、 很難理解。 這個問題 跟我的困惑一樣: 在 nmcli 裡, 一個 device 可以有多個 connection 嗎? 還是反過來, 一個 connection 可以包含多個 device 嗎? 讀完解答還是沒有很懂。

不過沒關係, 指令其實很簡單。 以下都用 root 的身份。 首先, cd /etc/NetworkManager/system-connections ; ls -l 等一下凡是建立或刪除連線, 都可以在這裡觀察變化。 另外, 可以用 nmcli dev 觀察所有網路裝置; 用 nmcli con 觀察所有連線設定。 根據我的觀察, 已成功或正在連線中的 「連線設定」 會出現在第一個列, 綠色表示已成功啟用, 黃/橘色表示 「啟用中」 (連線中); 但找不到文件詳細說明。 從 這個問題 提問者的結論, 我也學到: 改叫它多顯示一個 「狀態」 欄位比較簡單: nmcli -f name,uuid,type,device,state con 等一下可以隨時用。

  1. 預設的有線連線叫做 'Wired connection 1', 它是透過 eth0 這個裝置連線。 那我先把它改名為 eth0-con, 等一下比較容易看: nmcli con mod 'Wired connection 1' con-name eth0-con
  2. 建立一個名為 brext 的 bridge 類型裝置, 同時幫它建一個名為 brext-con 的連線: nmcli con add con-name brext-con type bridge ifname brext stp no
  3. 建立一個名為 brext-eth0-con 的連線, 同時把 eth0 綁定成為 brext 的 slave:
  4. nmcli con add con-name brext-eth0-con type bridge-slave ifname eth0 master brext

從此以後, 如果想採用 brext-eth0-con (虛擬機提升至跟 host 相同的網段) 就:
nmcli con down eth0-con ; nmcli con up brext-con
如果想忽略 brext、 改採用 eth0 直接連網, 就:
nmcli con down brext-con ; nmcli con up eth0-con
從 eth0-con 切換成 brext-con 的時候, 需要等幾秒鐘 brext-con 的狀態才會變正常。

切換實驗時, 可以從區網裡面的另一部機器下: nmap -sP 192.168.xx.0/24 查看一下本區網內所有已連線機器的網卡 mac addresses, 驗證一下確實有切換成功。

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。