Linux VLAN 感知網橋和中繼埠
我有一個連接到網橋的乙太網埠:
$ brctl show bridge name bridge id STP enabled interfaces eth0_bridge 8000.6a612bcc4723 yes eth0
網橋是 VLAN 感知的(即
/sys/class/net/eth0_bridge/bridge/vlan_filtering
是1
)。我希望能夠將其他介面添加到該網橋並為它們分配 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 似乎沒有使用這種方法。