跳到主要內容
節省工具箱Jason Tools
技術文章

Proxmox VE VLAN-per-Bridge 架構設定

Jason Cheng 發布 瀏覽 1 次
Proxmox VE VLAN-per-Bridge 架構設定
本文目錄
  1. 架構說明
  2. 情境 A:單一實體網路卡
  3. 情境 B:兩張網路卡做 LACP
  4. 兩種情境對照
  5. 查詢實際網路卡名稱
  6. 從情境 A 升級到情境 B
  7. 結論
  8. 參考資料

PVE 上的 VM 要走不同 VLAN,最常見的做法是在 VM 的網路卡設定中填 VLAN tag。但 VM 一多,每台都要記得填對,哪台在哪個 VLAN 也不容易一眼看出來。

我比較常用的是 VLAN-per-Bridge 架構:在實體網路卡(或 bond)上建立 VLAN 子介面,再掛上一般的 Linux Bridge。VM 只要選擇對應的 vmbrXXX,出去就會自動帶上 VLAN tag,不需要在 VM 的網路卡設定中再額外指定 VLAN tag,設定直覺、也容易維護。

我身邊那些習慣 VMware 模式的朋友,大都比較喜歡這種作法。在 vSphere 裡,每個 VLAN 會建一個連接埠群組(Port Group)並設好 VLAN ID,VM 只要選擇要接哪個連接埠群組就好;VLAN-per-Bridge 的一個 vmbr 對應一個 VLAN,操作邏輯幾乎一樣,從 VMware 轉過來的管理者很容易上手。

架構說明

以 VLAN 200 為例,每個 VLAN 對應一個 Bridge,命名直接帶上 VLAN 編號(vmbr200),看名稱就知道是哪個 VLAN。下圖是兩種情境的架構對照。

VLAN-per-Bridge 兩種情境的架構對照
VLAN-per-Bridge 兩種情境的架構對照

注意:本文範例的網路卡名稱 nic1、nic2,是 PVE 固定網路介面名稱後的命名,請換成你環境中實際的名稱(例如 eno1、enp1s0f0)。

情境 A:單一實體網路卡

GUI 操作(建議)

  1. 建立 → Linux VLAN
    Name:nic1.200
    VLAN raw device:nic1
    VLAN Tag:200
  2. 建立 → Linux Bridge
    Name:vmbr200
    Bridge ports:nic1.200
    VLAN aware:不勾
  3. 按 Apply Configuration 套用

VM 的網路卡接 vmbr200,VLAN tag 留空,出去就會自動帶 VLAN 200。

CLI 操作

對應的 /etc/network/interfaces 內容如下,一般還是建議用 GUI 操作:

# 實體網路卡(不設 IP、不加進其他 bridge)
auto nic1
iface nic1 inet manual

# VLAN 200 子介面
auto nic1.200
iface nic1.200 inet manual

# Bridge
auto vmbr200
iface vmbr200 inet manual
    bridge-ports nic1.200
    bridge-stp off
    bridge-fd 0

情境 B:兩張網路卡做 LACP

GUI 操作(建議)

  1. 建立 → Linux Bond
    Name:bond200
    Slaves:nic1 nic2(用空格分隔,不可空白)
    Mode:LACP (802.3ad)
    Hash policy:layer2+3
  2. 建立 → Linux VLAN
    Name:bond200.200
    VLAN raw device:bond200
    VLAN Tag:200
  3. 建立 → Linux Bridge
    Name:vmbr200
    Bridge ports:bond200.200
    VLAN aware:不勾
  4. 按 Apply Configuration 套用

VM 的網路卡接 vmbr200,VLAN tag 一樣留空。

CLI 操作

# 兩張實體網路卡
auto nic1
iface nic1 inet manual

auto nic2
iface nic2 inet manual

# Bond(trunk,承載多個 VLAN)
auto bond200
iface bond200 inet manual
    bond-slaves nic1 nic2
    bond-miimon 100
    bond-mode 802.3ad
    bond-xmit-hash-policy layer2+3

# VLAN 200 子介面
auto bond200.200
iface bond200.200 inet manual

# Bridge
auto vmbr200
iface vmbr200 inet manual
    bridge-ports bond200.200
    bridge-stp off
    bridge-fd 0

注意:交換器端務必設定對應的 LAG/Port-channel(LACP)與 trunk,PVE 這邊做了 bond、交換器沒做,連線會不穩定。

兩種情境對照

項目情境 A情境 B
實體網路卡nic1nic1 + nic2
中間層無bond200(LACP)
VLAN 子介面nic1.200bond200.200
Bridge portsnic1.200bond200.200
Bridge 名稱vmbr200vmbr200
交換器設定trunk portLAG/Port-channel + trunk

查詢實際網路卡名稱

ip -br link | grep -v 'vmbr\|bond\|tap\|veth\|fwln\|lo\|@'

或是:

# 看哪些網路卡有實體連線(state UP)
ip -br link | grep UP

把上面範例中的 nic1、nic2 換成實際名稱即可。

從情境 A 升級到情境 B

這個架構還有一個好處:未來從單一網路卡升級成 bond 時,VM 完全不用動,只要:

  1. 建立 bond,把 nic1(再加上 nic2)放進 slaves
  2. VLAN 子介面從 nic1.200 改成 bond200.200
  3. Bridge 的 ports 改成 bond200.200

vmbr200 的名稱不變,VM 的設定都不用改。

結論

VLAN-per-Bridge 是把「哪台 VM 走哪個 VLAN」的設定,從每台 VM 收回到 PVE 主機的網路設定上。VM 只要選對 Bridge,名稱就直接說明了它在哪個 VLAN,新增 VM 時也比較不會填錯。

要注意的是,每多一個 VLAN 就要多建一組 VLAN 子介面與 Bridge。如果 VLAN 數量很多,改用 VLAN aware bridge,在 VM 上指定 VLAN tag 會比較省事,兩種做法依環境選擇即可。

參考資料

Jason Cheng

Jason Cheng

企業開源技術顧問,專注架構規劃與實務導入

關於作者 →

延伸閱讀