Linux

Linux VLAN 感知網橋和中繼埠

  • December 11, 2019

我有一個連接到網橋的乙太網埠:

$ brctl show
bridge name bridge id       STP enabled interfaces
eth0_bridge     8000.6a612bcc4723   yes     eth0

網橋是 VLAN 感知的(即/sys/class/net/eth0_bridge/bridge/vlan_filtering1)。我希望能夠將其他介面添加到該網橋並為它們分配 VLAN,如下所示:

ip link set eth1 master eth0_bridge
bridge vlan add dev eth1 vid 10 pvid untagged

這應該將 eth1 上的未標記流量連接到 eth0 上的 VLAN 10。但是在我之前沒有流量通過:

bridge vlan add dev eth0 vid 10

完成此操作後,一切都將按需要進行。但是有沒有辦法告訴它eth0是網橋上的一個中繼埠,eth0_bridge它應該承載所有的 VLAN,然後在網橋的出口上進行 VLAN 過濾?

使用該bridge vlan命令時,您可以一次性添加(或刪除)一系列 VLAN ID。例如:

# bridge vlan add vid 2-4094 dev eth0

會將所有可用的 VLAN 添加到中繼介面eth0(0 和 4095 在協議中保留,不得(也不能)使用,預設情況下將 1 設置為 PVID 未標記的 VLAN ID,因此應該避免或最好將其刪除) .

# bridge vlan show dev eth0
eth0     1 PVID Egress Untagged
        2
        3
[...]
        4093
        4094

# bridge -c vlan show dev eth0
port    vlan ids
eth0     1 PVID Egress Untagged
        2-4094

這裡-c代表-c[ompressvlans]而不是-c[olor]:橋手冊頁(至少到 iproute2-ss191125)完全缺少有關此選項的資訊。

刪除一個範圍正如人們所期望的那樣:

# bridge vlan del vid 100-200 dev eth0
# bridge -c vlan show
port    vlan ids
bridge0  1 PVID Egress Untagged

eth1     1 Egress Untagged
        10 PVID Egress Untagged

eth0     1 PVID Egress Untagged
        2-99
        201-4094

在內部,所有這些都使用單個 VLAN 的(散列)列表進行處理。


注1

Cumulus Networks(已知主要在其網路設備上使用 Linux 的本機網路堆棧)有一些關於此的(和更新)範例:

考慮以下範例橋:

auto bridge
iface bridge
  bridge-vlan-aware yes
  bridge-ports swp1 swp9
  bridge-vids 2-100
  bridge-pvid 101
  bridge-stp on

這是該配置的 VLAN 成員資格:

cumulus@switch$ bridge -c vlan show
portvlan ids
swp1 101 PVID Egress Untagged
 2-100

swp9 101 PVID Egress Untagged
 2-100

bridge 101

使用的配置文件是來自 ifupdown2(及其外掛)的介面文件,實際上由 Cumulus Networks 開發以替換ifupdown,具有大部分兼容的語法,但大大改進了網橋和 VLAN 支持。


筆記2

我沒有找到任何證據表明某些特殊標誌會自動將所有 VLAN 泛洪到網橋埠。這個核心送出告訴 VID 4095 記錄在 IEEE 802.1Q 中有限制,但允許用於管理操作作為 VID 的萬用字元匹配,但 Linux 似乎沒有使用這種方法。

引用自:https://unix.stackexchange.com/questions/556735