Linux-Networking

是否可以在 Linux 網橋上啟用埠隔離?

  • May 15, 2020

在大多數託管交換機上,您可以啟用第 2 層埠隔離。實施和術語因供應商而異,但一般來說,您將一個或多個埠保持在預設混雜 (Cisco) 或上行鏈路 (HP) 狀態,並將其他埠配置為隔離 (Cisco) 或專用 (HP)。之後,隔離埠只能與混雜埠通信,而不能相互通信。

有沒有辦法通過 Linux 橋來實現這一點,例如。將虛擬機相互隔離?也許通過ebtables?

您可以嘗試使用ebtables並創建自己的涉及輸入/輸出橋埠的規則。

我手頭沒有帶網橋的伺服器,但我會做這樣的事情:

ebtables -P FORWARD DROP
ebtables -F FORWARD
ebtables -A FORWARD -i $uplinkPort -j ACCEPT # let the traffic flow from uplink to any ports
ebtables -A FORWARD -o $uplinkPort -j ACCEPT # let the traffic flow from any ports to uplink

正如@pQd 所要求的,當主機是上行鏈路並且所有虛擬機應該相互隔離時,這是一個與虛擬機進行埠隔離的工作範例(這裡:基於Proxmox VE )。我將其用於內部服務網路(DNS、更新等)。網橋是vmbr1,虛擬乙太網設備是vethNNN.1NNNVID 在哪裡)。如果您只想隔離,這應該足夠了:

ebtables --append FORWARD --logical-in vmbr1 --jump DROP

如果要配置多個網橋並且其他虛擬機也應該是上行鏈路(此處:veth100.1veth102.1),則這樣的內容更合適(未經測試):

for br in $(seq 0 1); do
   br=vmbr$br
   ebtables --new-chain $br
   ebtables --policy $br DROP
   ebtables --append FORWARD --logical-in $br --jump $br
done
for if in 100.1 102.1; do
   br=vmbr$(echo $if | cut -d. -f2)
   if=veth$if
   ebtables --append $br --in-if $if
   ebtables --append $br --out-if $if
done

如果主機不應該是上行鏈路,這應該可以工作(雖然我也沒有嘗試過):

ebtables --append INPUT --logical-in vmbr1 --jump vmbr1
ebtables --append OUTPUT --logical-out vmbr1 --jump vmbr1

引用自:https://serverfault.com/questions/388544